Скачать презентацию Динамические структуры данных язык Паскаль Списки 2 Скачать презентацию Динамические структуры данных язык Паскаль Списки 2

Списки.ppt

  • Количество слайдов: 12

Динамические структуры данных (язык Паскаль) Списки Динамические структуры данных (язык Паскаль) Списки

2 Динамические структуры данных Строение: набор узлов (элементов), объединенных с помощью ссылок. Как устроен 2 Динамические структуры данных Строение: набор узлов (элементов), объединенных с помощью ссылок. Как устроен узел: ссылки на другие узлы данные Типы структур: списки деревья односвязный графы nil двунаправленный (двусвязный) nil nil циклические списки (кольца) nil nil nil

3 Списки: новые типы данных Что такое список: 1) пустая структура – это список; 3 Списки: новые типы данных Что такое список: 1) пустая структура – это список; 2) список – это начальный узел (голова) и связанный с ним список. ! Рекурсивное определение! nil Новые типы данных: Type U = ^Zveno; ; { указатель на узел } Zveno = Record { структура узла } Inf : Longint; Next: U; { ссылка на следующий } End; Адрес начала списка: var First: U; . . . First : = nil; ! Для доступа к списку достаточно знать адрес его головы!

4 Типовые операции над списками: Рассмотрим работу со связанными списками на примере однонаправленного некольцевого 4 Типовые операции над списками: Рассмотрим работу со связанными списками на примере однонаправленного некольцевого списка. 1. Добавление звена в начало списка; 2. Удаление звена из начала списка; 3. Добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан); 4. Удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан); 5. Проверка, пуст ли список; 6. Очистка списка; 7. Печать списка.

5 Добавление узла в начало списка 1) Установить ссылку нового узла на голову списка: 5 Добавление узла в начало списка 1) Установить ссылку нового узла на голову списка: Vsp nil Vsp^. next : = First; First nil 2) Установить новый узел как голову списка: Vsp First : = Vsp; First Procedure V_Nachalo(Var First : U; X : Longint); ; Var Vsp : U; Begin New(Vsp); Vsp^. Inf : = X; Vsp^. Next : = First; First : = Vsp; End; nil

6 Добавление узла после заданного 1) Установить ссылку нового узла на узел, следующий за 6 Добавление узла после заданного 1) Установить ссылку нового узла на узел, следующий за Pred: Vsp nil Vsp^. Next : = Pred^. Next; Pred nil 2) Установить ссылку узла Pred на новый узел: Vsp Pred^. next = Vsp; nil Procedure V_Spisok(Pred : U; X : Longint); Var Vsp : U; Begin New(Vsp); Vsp^. Inf : = X; Vsp^. Next : = Pred^. Next; Pred^. Next : = Vsp; End;

7 Удаление звена из начала списка Vsp First nil p Procedure Iz_Nachala(Var First : 7 Удаление звена из начала списка Vsp First nil p Procedure Iz_Nachala(Var First : U; Var X : Longint); Var Vsp : U; Begin Vsp : = First; First : = First^. Next; X : = Vsp^. Inf; Dispose(Vsp); End;

Удаление звена из произвольного места списка Проблема: нужно знать адрес предыдущего узла Pred First Удаление звена из произвольного места списка Проблема: нужно знать адрес предыдущего узла Pred First nil Vsp Procedure Iz_Spiska(Pred : U; Var X : Longint); Var Vsp : U; Begin Vsp : = Pred^. Next; Pred^. Next : = Pred^. Next; X : = Vsp^. Inf; Dispose(Vsp); End; 8

9 Вывод списка Задача: Вывести на экран каждый элемент списка. Vsp First nil Алгоритм: 9 Вывод списка Задача: Вывести на экран каждый элемент списка. Vsp First nil Алгоритм: 1) установить вспомогательный указатель Vsp на голову списка; 2) если указатель Vsp равен nil (дошли до конца списка), то стоп; 3) Вывод информационного поля звена с адресом Vsp ; 4) перейти к следующему узлу, Vsp^. next. Procedure Print(First : U); Var Vsp : U; Begin Vsp : = First; // начали с головы While Vsp <> Nil Do // пока не дошли до конца Begin Write(Vsp^. Inf : 6); // Вывод информационного поля Vsp : = Vsp^. Next // переходим к следующему End; Write. Ln End;

10 Вывод списка Задача: Вывести на экран каждый элемент списка. Vsp First nil Алгоритм: 10 Вывод списка Задача: Вывести на экран каждый элемент списка. Vsp First nil Алгоритм: 1) установить вспомогательный указатель Vsp на голову списка; 2) если указатель Vsp равен nil (дошли до конца списка), то стоп; 3) Вывод информационного поля звена с адресом Vsp ; 4) перейти к следующему узлу, Vsp^. next. Procedure Print; Var Vsp : U; Begin Vsp : = First; // начали с головы While Vsp <> Nil Do // пока не дошли до конца Begin Write(Vsp^. Inf : 6); // Вывод информационного поля Vsp : = Vsp^. Next // переходим к следующему End; Write. Ln End;

11 Очистка списка Procedure Ochistka (Var First: U); Var Vsp : BT; Begin While 11 Очистка списка Procedure Ochistka (Var First: U); Var Vsp : BT; Begin While Not Pust(First) Do Iz_Nachala(First, Vsp) End;

12 Проверка, пуст ли список; Function Pust(First : U) : Boolean; Begin Pust : 12 Проверка, пуст ли список; Function Pust(First : U) : Boolean; Begin Pust : = First = Nil End;