While And Do Begin Writeln; Inc End

End; {list}

Procedure push; {занесение элемента в стек}

Var i: Integer;

Begin

For i:=n Downto 2 Do s:=s;

s:=x

End; {push}

Function pop:typeelem;        {удаление элемента из стека}

Var i: Integer;

Begin

pop:=s;

For i:=1 To n-1 Do s:=s;

s:=-1000

End; {pop}

Function stacktop:typeelem; {считывание верхнего элемента без удаления}

Begin

stacktop:=s

End; {stacktop}

Function empty: Boolean;              {проверка стека на пустоту}

Begin

empty:=false;

End; {empty}

{–}

Begin {main}

Clrscr;

init;

list; Writeln;

For i:=1 To 3 Do push;

Writeln; list;

Writeln);

y:=stacktop; Writeln; Writeln;

Writeln; list; Writeln;

For i:=1 To 2 Do Begin y:=pop; Writeln End;

Writeln; list; Writeln;

y:=pop; Writeln;

Writeln; list;

Writeln);

Readln

End. {main}

 

Очередь:

{pеализация очереди на основе лин списка}

Program spisok;

Uses Crt;

Type typeelem=Integer;

connect=^data;

data=Record

elem:typeelem;

Next:connect

End;

Var sn, s, sk:connect; x:typeelem; i: Integer;

Procedure init;

{создание очереди}

var p:connect;

Begin

new;

p^.next:=nil;

sn:=p; sk:=p;

End; {init}

Procedure list;

{распечатка содержимого очереди}

var s:connect;

Begin

s:=sn^.next;

while s<>nil do begin

write;

s:=s^.next; end;

End; {list}

Function empty: Boolean;

{проверка очереди на пустоту}

Begin

empty:=sn=sk;

End; {empty}

Procedure insert;

{занесение элемента x в очередь}

var p:connect;

Begin

new;

p^.next:=nil;

p^.elem:=x;

sk^.next:=p;

sk:=p;

End; {insert}

Function remove:typeelem;

{удаление элемента из очереди}

Begin

remove:=sn^.next^.elem;

sn:=sn^.next;

End; {remove}

{–}

Begin

ClrScr;

randomize;

init; {инициализация очереди}

for i:=1 to 5 do begin

x:=random-random;

insert; {вставка элемента в очередь}

end;

list; writeln; {распечатка содержимого очереди}

x:=remove; {удаление элемента из очереди}

list; writeln; {распечатка содержимого очереди}

Readln; End.

Дек:

{pеализация дека на основе линейного списка}

Program dek;

Uses Crt;

Type typeelem=Integer;

connect=^data;

data=Record

elem:typeelem;

next:connect;

Pred:connect

End;

Var sn1, sn2, s:connect; x, y:typeelem; i: Integer;

k:string;

Procedure init;

{создание дека}

var p:connect;

Begin

new;

p^.next:=nil;

p^.pred:=nil;

p^.elem:=x;

sn1:=p;

sn2:=p;

End; {init}

Procedure listnext;

{распечатка содержимого дека в прямом порядке}

var s:connect;

Begin

s:=sn1;

while s<>nil do begin

write;

s:=s^.next; end;

write;

End; {list}

Procedure listpred;

{распечатка содержимого дека в обратном порядке}

var s:connect;

Begin

s:=sn2;

while s<>nil do begin

write;

s:=s^.pred; end;

write;

End; {list}

Function empty: Boolean;

{проверка дека на пустоту}

Begin

empty:=sn1=sn2;

End; {empty}

Procedure insert1;

{занесение элемента x в дек после заданного звена}

var s1, s2, p:connect;

Begin

s1:=sn1;

s2:=sn2;

while s1^.elem<>y do s1:=s1^.next;

while s2^.pred^.elem<>y do s2:=s2^.pred;

new;

p^.elem:=x;

p^.next:=s2;

p^.pred:=s1;

s2^.pred:=p;

s1^.next:=p;

end;

Procedure insert3;

{занесение элемента x в дек до заданного звена}

var s1, s2, p:connect;

Begin

s1:=sn1;

s2:=sn2;

while s1^.next^.elem<>y do s1:=s1^.next;

while s2^.elem<>y do s2:=s2^.pred;

new;

p^.elem:=x;

p^.next:=s2;

p^.pred:=s1;

s2^.pred:=p;

s1^.next:=p;

end;

Procedure insert2;

{занесение элемента x в дек}

var p:connect;

Begin

if k='к' then begin

new;

p^.next:=nil;

p^.elem:=x;

p^.pred:=sn2;

sn2^.next:=p;

sn2:=p;

end;

if k='н' then begin

new;

p^.pred:=nil;

p^.elem:=x;

p^.next:=sn1;

sn1^.pred:=p;

sn1:=p;

end;

End; {insert}

Procedure insertnext;

{занесение элемента x в дек после заданного звена}

var s1, s2, p:connect;

Begin

s1:=sn1;

s2:=sn2;

If then insert1

Else insert2

end;

Procedure insertpred;

{занесение элемента x в дек до заданного звена}

var s1, s2, p:connect;

Begin

s1:=sn1;

s2:=sn2;

If then insert3

Else insert2

end;

Function remove1:typeelem;

{удаление элемента из начала}

Begin

remove1:=sn1^.elem;

sn1^.next^.pred:=nil;

sn1:=sn1^.next;

End; {remove}

Function remove2:typeelem;

{удаление элемента из конца}

Begin

remove2:=sn2^.elem;

sn2^.pred^.next:=nil;

sn2:=sn2^.pred;

End; {remove}

Function remove:typeelem;

{удаление элемента из дека}

var s1, s2, s, p:connect;

Begin

s1:=sn1; s2:=sn2;

If andthen begin

while s1^.next^.elem<>y do s1:=s1^.next;

while s2^.pred^.elem<>y do s2:=s2^.pred;

remove:=s1^.next^.elem;

s1^.next:=s1^.next^.next;

s2^.pred:=s2^.pred^.pred;

End

else if then remove:=remove2

else remove:=remove1;

End; {remove}

{–}

Begin

ClrScr;

sn1:=nil;

sn2:=nil;

k:='к';

init;

for i:=2 to 10 do

insert2;

listnext;

writeln;

listpred;

writeln;

insertnext;

listnext;

writeln;

insertpred;

listnext;

writeln;

remove1;

listnext;

writeln;

listpred;

writeln;

remove2;

listnext;

writeln;

listpred;

remove;

writeln;

listnext;

writeln;

listpred;

Readln

End.



Литература

стек дек очередь переменная

1. Информатика и образование, №5 – 1999.

2. Бабушкина И.А., Бушмелева Н.А., Окулов С.М., Черных С.Ю. Конспекты по информатике. – Киров, 1997.

3. Грэхем Р., Кнут Д., Паташник О. Конкретная информатика. – М.: Мир, 1988.

4. Вирт Н., Алгоритм + структура данных = программа.

5. Райнтли, Абстракция и структура данных.

6. Зубов В.С., Справочник программиста. – 1999.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: