Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации 2часть / Лекция_23_24_ДинамическиеСписки.ppt
Скачиваний:
24
Добавлен:
11.05.2015
Размер:
232.45 Кб
Скачать

Add1- добавить в стек

Procedure TlistStk.Add1(Inf:TInf);

begin

New(sp);

sp^.Inf:=Inf;

sp^.A:=sp1;

sp1:=sp;

end;

end;

New(sp)

sp1 07/02/19

sp1

sp

Inf

31

Read1 – взять элемент из стека

Procedure TlistStk.Reаd1(var

begin

Inf:=sp1^.Inf;

sp:=sp1;

sp1:=sp1^.A;

Dispose(sp);

end;

Inf

sp1

sp1

Inf:Tinf);

sp1

sp

 

 

 

 

 

 

 

 

 

 

sp1

 

 

 

 

 

sp

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

07/02/19

32

Print распечатать содержимое стека

Procedure TlistStk.Print(memo:Tmemo);

var k:word;

begin

sp:=sp1; k:=0;

While sp <> Nil do

begin k:=k+1;

Memo.Lines.Add(‘k=‘,IntTostr(k));

Memo.Lines.Add(‘I1=‘,sp^.Inf.I1);

Memo.Lines.Add(‘key=‘,sp^.Inf.key);

sp:=sp^.A;

end;

end;

07/02/19

33

Не всегда очередь движется по правилам – «в конец добавили из начала взяли»

Есть блатные покупатели, которых нужно передвинуть в очереди

Имеются отказники, которых надо удалить из середины очереди.

Поэтому надо уметь вставить новую запись внутрь списка или удалить запись из середины списка.

Это довольно просто сделать, если имеется указатель на запись, после которой нужно вставить или удалить запись

07/02/19

34

AddAftter – добавить элемент в стек после элемента с заданным в указателе spi адресом

Procedure TlistStk.AddAfter(spi:Tsel,Inf:TInf);

begin

New(sp);

sp^.Inf:=Inf;

sp^.A:=spi^.A;

spi^.A:=sp;

end;

spi

sp1

sp

07/02/19

Inf

35

 

ReadAftter взять и удалить из стека элемент после элемента с заданным адресом

Procedure

Tlist.ReadAfter(spi:Tsel;var Inf:TInf);

begin

sp:=spi^.A;

Inf:=sp^.Inf;

spi^.A:=sp^.A;

Dispose(sp);

end;

Inf

spi

sp

sp1

07/02/19

36

AddBefore – добавить элемент в стек перед элементом с заданным адресом

Procedure Tlist.AddBefore(spi:Psel;Inf:Tinf);

begin

AddAfter(spi,spi^.Inf);//копируем

spi^.Inf:=Inf;

end;

Inf

spi

sp1

07/02/19

37

Основные методы работы с очередью (класс TlistTrn)

Метод Addk – добавить элемент в очередь

Метод Read1 – взять элемент из очереди

Метод Readk – взять последний элемент из очереди

07/02/19

38

Addk добавить элемент в конец очереди

Procedure TlistTrn.Addk(Inf:TInf);

begin

New(sp);

sp^.A:=Nil;

sp^.Inf:=inf;

if sp1=Nil then begin

spk:=sp; sp1:=sp;

end

else

begin spk^.A:=sp; spk:=sp; end;

end;

 

 

 

 

spk

sp1

I1 A1

….

Ik-1 Ak-1

Ik nil

sp1

spk

Inf nil

 

sp

07/02/19

39

Read1 взять первый элемент из очереди

Procedure TlistTrn.Reаd1(var Inf:Tinf);

begin

Inf:=sp1^.Inf;

sp:=sp1;

sp1:=sp1^.A;

if sp1=Nil then spk:=Nil;

Dispose(sp);

end;

Этот метод отличается от аналогичного для стека только тем, что поддерживается вторая точка входа spk (оператор if).

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

07/02/19

40