Динамические структуры данных.pptx
- Количество слайдов: 18
Список ЛР 1. Кольцевые однонаправленные списки с включеным заглавным звеном. Кольцевые однонаправленные списки с удаленным заглавным звеном 2. Двунаправленные списки с заглавным звеном 3. Бинарные деревья 4. Алгоритмы балансировки 5. Алгоритмы на графах ?
Динамические структуры данных Кольцевые однонаправленные списки
Однонаправленный кольцевой список с включенным заглавным звеном
процедура построения кольцевого однонаправленного списка с включенным заглавным звеном Procedure Create_Ring (var p. Begin: Ptr. Rec); Var p. Aux : Ptr. Rec; el : Type. Element; Begin New (p. Begin); p. Aux : = p. Begin; p. Aux^. p. Next : = Nil; Write ('Введите последовательность. . . '); Write ('Признак окончания ввода - 0'); Read. Ln (el); While el <> 0 do {формируем список} Begin New (p. Aux^. p. Next); p. Aux : = p. Aux^. p. Next; p. Aux^. Element : = el; p. Aux^. p. Next : = Nil; Read. Ln (el); End; p. Aux^. p. Next : = p. Begin; {Замкнем кольцо на заглавное звено} Write. Ln; End;
Просмотр элементов кольцевого однонаправленного списка с включенным заглавным звеном Procedure Print_Ring (p. Begin: Ptr. Rec); Var p. Aux : Ptr. Rec; Begin p. Aux : = p. Begin^. p. Next; {Исключим из рассмотрения заглавное звено} If p. Aux <> p. Begin Then Begin {Пока текущий указатель не совпадает с началом списка. . . } While p. Aux <> p. Begin do Begin Write (p. Aux^. Element: 5); p. Aux : = p. Aux^. p. Next; End; Write. Ln; End Else Write. Ln ('Список пуст. . . ') End;
Поиск звена в кольцевом однонаправленном списке с включенным заглавным звеном Function Find_Ring (p. Begin: Ptr. Rec; Key: Type. Element; var p. CKey : Ptr. Rec): Boolean; Var p. Aux: Ptr. Rec; Begin Find_Ring : = False; p. CKey : = Nil; p. Aux : = p. Begin^. p. Next; {Исключим из рассмотрения заглавное звено} {Пока текущий указатель не совпадает с началом списка и } {элемент с заданным ключем не найден. . . } While (p. Aux <> p. Begin) and (p. Aux^. Element <> Key) do p. Aux : = p. Aux^. p. Next; If p. Aux^. Element = Key Then Begin Find_Ring : = True; p. CKey : = p. Aux End;
процедура добавления звена с информационным полем Elem в кольцо за звеном, на которое указывает p. CKey Procedure Add_Ring 1 (p. CKey : Ptr. Rec; Elem : Type. Element); Var p. Aux: Ptr. Rec; Begin New (p. Aux); p. Aux^. Element : = Elem; p. Aux^. p. Next : = p. CKey^. p. Next; p. CKey^. p. Next : = p. Aux End;
Добавление звена с информационным полем Elem перед звеном, на которое указывает p. CKey Procedure Add_Ring 2 (p. CKey : Ptr. Rec; Elem : Type. Element); Var p. Aux : Ptr. Rec; Begin New (p. Aux); p. Aux^. p. Next : = p. CKey^. p. Next; p. CKey^. p. Next : = p. Aux; p. Aux^. Element : = p. CKey^. Element; p. CKey^. Element : = Elem; End;
Удаление звена, на который указывает указатель p. CKey Procedure Del_Elem 1 (p. CKey: Ptr. Rec); Var p. Pred. Rec, p. Aux : Ptr. Rec; Begin p. Pred. Rec : = p. Begin; {ссылка на предыдущий} p. Aux : = p. Begin^. p. Next; {исключили заглавное звено} While p. Aux <> p. CKey do {двигаемся до ссылки p. CKey} Begin p. Pred. Rec : = p. Aux; {запомним ссылку на предыдущий} p. Aux : = p. Aux^. p. Next {перешли на следующий} End; p. Pred. Rec^. p. Next : = p. Pred. Rec^. p. Next; Dispose (p. Aux); End;
Удаление звена, следующего за звеном с заданным указателем p. CKey Procedure Del_Elem 2 (p. CKey: Ptr. Rec); Var p. Aux : Ptr. Rec; Begin If p. CKey^. p. Next <> p. Begin Then Begin {ссылка на следующий - не заглавное звено} p. Aux : = p. CKey^. p. Next; p. CKey^. p. Next : = p. CKey^. p. Next; End Else Begin {ссылка на следующий - заглавное звено} p. Aux : = p. Begin^. p. Next; {запомним ссылку} p. Begin^. p. Next : = p. Begin^. p. Next; End Dispose (p. Aux) End;
Кольцевые однонаправленные списки с удаленным заглавным звеном
процедура построения кольцевого однонаправленного списка Procedure Create_Ring (var p. Begin: Ptr. Rec); Var p. Aux : Ptr. Rec; el : Type. Element; Begin New (p. Begin); p. Aux : = p. Begin; p. Aux^. p. Next : = Nil; Write ('Задайте последовательность. . . '); Read. Ln (el); While el <> 0 do Begin New (p. Aux^. p. Next); p. Aux : = p. Aux^. p. Next; p. Aux^. Element : = el; p. Aux^. p. Next : = Nil; Read. Ln (el); End; p. Aux^. p. Next : = p. Begin^. p. Next; {Образовали кольцо} Writeln; End;
Просмотр кольцевого однонаправленного списка с удаленным заглавным звеном Procedure Print_Ring (p. Begin: Ptr. Rec); Var p. Aux: Ptr. Rec; Begin p. Aux : = p. Begin^. p. Next; If p. Begin^. p. Next<>Nil Then Begin While p. Aux^. p. Next <> p. Begin^. p. Next do Begin Write (p. Aux^. Element, ' '); p. Aux : = p. Aux^. p. Next End; Writeln (p. Aux^. Element); End Else Writeln ('Список пуст') End;
Поиск звена в списке с удаленным заглавным звеном Function Find (p. Begin: Ptr. Rec; Key: Type. Element; var p. CKey: Ptr. Rec) : Boolean; Var p. Aux : Ptr. Rec; Begin Find : = False; p. CKey : = Nil; {не найдено} p. Aux : = p. Begin^. p. Next; {заглавное звено обогнули} While (p. Aux^. p. Next <> p. Begin^. p. Next) and (p. Aux^. Element <> Key) do p. Aux : = p. Aux^. p. Next; If p. Aux^. Element = Key Then Begin Find : = True; p. CKey : = p. Aux; End;
Добавление звена с информационным полем R после звена, на которое указывает p. CKey Procedure Add_Elem 1 (p. CKey: Ptr. Rec; R: Type. Element); Var p. Aux: Ptr. Rec; Begin New (p. Aux); p. Aux^. Element : = R; p. Aux^. p. Next : = p. CKey^. p. Next; p. CKey^. p. Next : = p. Aux; End;
Добавление звена с информационным полем R перед звеном, на которое указывает p. CKey Procedure Add_Elem 2 (p. CKey: Ptr. Rec; R: Type. Element); Var p. Aux : Ptr. Rec; Begin New (p. Aux); p. Aux^. p. Next : = p. CKey^. p. Next; p. CKey^. p. Next : = p. Aux; p. Aux^. Element : = p. CKey^. Element; p. CKey^. Element : = R; End;
Удаление звена, на которое указывает p. CKey Procedure Del_Elem 1 (p. CKey: Ptr. Rec); Var q, p. Aux: Ptr. Rec; Begin If p. CKey^. p. Next=p. CKey Then Begin p. Begin^. p. Next : = Nil; Writeln ('Кольцо пусто!') End Else Begin q : = p. Begin; p. Aux : = p. Begin^. p. Next; While p. Aux <> p. CKey do Begin q : = p. Aux; p. Aux : = p. Aux^. p. Next; End; q^. p. Next : = q^. p. Next; Dispose (p. Aux); End;
Удаление звена, следующего за звеном, заданным указателем p. CKey Procedure Del_Elem 2 (p. CKey: Ptr. Rec); Var p. Aux: Ptr. Rec; Begin If p. CKey^. p. Next <> p. Begin^. p. Next Then Begin p. Aux : = p. CKey^. p. Next; p. CKey^. p. Next : = p. CKey^. p. Next; Dispose (q); End Else If p. CKey^. p. Next=p. CKey Then Begin Writeln ('Кольцо пусто!'); p. Begin^. p. Next : = Nil; Dispose (p. CKey); End Else Begin p. Aux : = p. Begin^. p. Next; p. CKey^. p. Next : = p. CKey^. p. Next; p: = p. CKey^. p. Next; {ПРОВЕРИТЬ!!!} Dispose (p. Aux); End;


