Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_po_Pascal_2_chast.doc
Скачиваний:
107
Добавлен:
18.02.2016
Размер:
5.11 Mб
Скачать

Динамические списки

Список — набор элементов, расположенных в определенном порядке, к которым применимы операции включения, исключения.

Линейный список — список, отражающий отношения соседства между элементами. Т.е. это множество, состоящее из узлов (элементов), структурные свойства которого, по сути, ограничиваются лишь линейным (одномерным) относительным положением узлов, т.е. теми условиями, что если , то является первым; если , тоk-му узлу предшествует и за ним следует ; является последним узлом.

Длина списка равна числу элементов, содержащихся в списке, список нулевой длины называется пустым списком. Линейные связные списки являются простейшими динамическими структурами данных.

Линейный динамический список — это линейный список, элементы которого располагаются в динамической памяти.

Каждый элемент (узел) связанного списка:

- хранит какую-то информацию — данные,

- указывает на следующий за ним элемент.

Графически связи в списках удобно изображать следующим образом:

Рис. 4. Представление односвязного списка.

Здесь поле INF - информационное поле, данные, NEXT - указатель на следующий элемент списка. Каждый список должен иметь особый элемент, называемый указателем начала списка или головой списка, который обычно по формату отличен от остальных элементов. В поле указателя последнего элемента списка находится специальный признак nil, свидетельствующий о конце списка.

Элементы списка могут быть связаны различными способами. Есть списки, в которых для каждого элемента указатель задает место положения следующего или предыдущего элемента — однонаправленные списки. В двунаправленных списках для каждого элемента задаются два указателя: место положения следующего и предыдущего элемента.

Рис. 5. Представление двусвязного списка

Разновидностью рассмотренных видов линейных списков является кольцевой список, который может быть организован на основе как односвязного, так и двухсвязного списков. При этом в односвязном списке указатель последнего элемента должен указывать на первый элемент; в двухсвязном списке в первом и последнем элементах соответствующие указатели переопределяются.

Реализация списков на языке Pascal.

Type

TAddrElem = ^TElemSpiska;

TElemSpiska = record

inf: integer;

next: TAddrElem;

end;

Var

addrNachSp, addrNovElem, addrElem: TAddrElem;

Begin

addrNachSp:=nil ;

new (addrNovElem);

addrNovElem^.info : =5 ;

addrNovElem^.next:=nil;

End.

Типовые операции над списками:

  • добавление нового элемента в список;

  • переход к очередному элементу списка (используется указатель на следующий элемент);

  • поиск заданного элемента (последовательно просматриваются элементы списка до тех пор, пока не найден искомый элемент или пока не окончен список);

  • удаление элемента из списка;

  • проверка, пуст ли список;

  • очистка списка;

  • объединение в одном списке двух (или более) линейных списков;

  • разбиение линейного списка на два (или более) списка;

  • создание копии линейного списка;

  • определение количества узлов в списке;

  • сортировка узлов в порядке возрастания значений в определенных полях этих узлов;

  • поиск узла с заданным значением в некотором поле;

  • печать списка.

Добавление элемента в список

Для добавления в начало списка должен модифицироваться указатель на начало списка, как показано на рис. 6.

Рис. 6. Вставка элемента в начала 1-связного списка

addrNovElem^.next := addrNachSp;

addrNachSp:=addrNovElem;

Добавление элемента в список после элемента, на который ссылается указатель, показана на рис.7.

Рис. 7. Вставка элемента в середину 1-связного списка

New(addrNovElem);

addrNovElem^.next:=addrElem^.next;

addrElem^.next:=addrNovElem;

Просмотр элементов списка

Для просмотра элементов списка необходимо выполнить последовательный переход по ссылкам элементов, начиная с головы списка.

Удаление элемента из списка

Различают удаление

- первого элемента;

- элемента из середины списка

- последнего элемента.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]