русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Двусвязный линейный список


Дата добавления: 2015-01-16; просмотров: 1795; Нарушение авторских прав


Основным недостатком односвязного списка является невоз­мож­ность удаления узла, когда известен только указатель на него и неизвестен указатель на пред­шественника. Этого недостатка лишен двусвязный список, в котором каждый элемент имеет указатели на предшественника и на последователя (рис.10).

 
 

Рис 10. Узел двусвязного списка

 

Точно так же, как и односвязный список, двусвязный может иметь голову и быть кольцевым. На рис. 11 изображен кольцевой двусвязный список с головой.

Рис. 11. Двусвязный циклический список с головой

 

Узел двусвязного списка может быть представлен структурой:

struct UZEL{

<тип> Info; // данные узла

UZEL *Left; // указатель на предшественника

UZEL *Right; // указатель на последователя

};

Операция вставки нового узла представлена на рис 12.

Рис.12. Вставка узла в двусвязный список вслед за узлом P

 

Как и прежде, пунктиром обозначены связи, изменившиеся после выполнения операции. Функция, выполняющая операцию вставки, приведена ниже.

UZEL *InsertUzel(UZEL *p){

// функция вставляет новый узел справа от P

// и возвращает указатель на новый узел

UZEL *Z;

Z=new UZEL;

If(Z==NULL) return NULL; // нет памяти в куче

Z->Left=p;

Z->Right=p->Right;

p->Right->Left=X;

p->Right=X;

return X;

}

 
 

Операция удаления узла изображена на рис 13.

Рис 13. Удаление узла из двусвязного списка

 

Функция, выполняющая удаление:

void DeleteUzel(UZEL *p){

p->Left->Right=p->Right;

p->Right->Left=p->Left;

delete p;

}



<== предыдущая лекция | следующая лекция ==>
Int px,py,pz; // степени x,y,z | Ортогональные списки


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.277 сек.