Стеки


Стеки - це дискретні, зв'язані, динамічні, рекурсивні інформаційні структури.


Для стеков характерно:

Стік - це лінійний список, у якому всі операції вставки і видалення відбуваються тільки на одному з кінців списку.


Стеки зручно застосовувати в тих випадках, коли потрібно швидке включення, чи виключення елементів без змістовного змісту даних. Стеки широко застосовуються в трансляторах при реалізації рекурсивних процедур і функцій (при кожнім виклику чи процедури функції її стан запам'ятовується в стек і обробляється в зворотному порядку), при реалізації математичних обчислень (калькулятори).

Приклад створення стека []

program Stack;
uses crt;
type
Nodeptr = ^Node;
Node=record
Number:longint;
Member:string;
BegPtr:Nodeptr;
End;
var
Cl,StackTop:Pointer;
x,y:byte;
c:char;
Link:Nodeptr;
NumberStr:string;
procedure PopStack(var i:longint;var Inp:string;var List:Nodeptr);
Begin {ВИШТОВХУВАННЯ ЕЛЕМЕНТІВ}
List:=StackTop;
i:=List^.Number;
Inp:=List^.Member;
StackTop:=List^.BegPtr;
Dispose(List);
End;{PopStack}

procedure Stop;
Begin
gotoxy(20,23);
 Write('Для продовження натисніть пробіл:');
memw[0:$41a]:=memw[0:$41c];
 c:=readkey; ClrScr;
 x:=2; y:=1;
End;{Stop}

procedure InitStac; {ІНІЦІАЛІЗАЦІЯ СТЕКА}
Begin
StackTop:=Nil;
End;

procedure PushStack(var i:longint;var Inp:string;var List:Nodeptr);
Begin {ВШТОВХУВАННЯ ЕЛЕМЕНТІВ}
New(List);
 List^.Number:=i;
 List^.Member:=Inp;
List^.BegPtr:=StackTop;
 StackTop:=List;
End;{PushStack}

procedure CreateStac(var List:Nodeptr);
var
InpMember:string;
InpNumber:longint;
Ch:Char;
Begin
Ch:=' ';
 InpNumber:=0;
 x:=20; y:=12;
 gotoxy(5,2);
write('ДЛЯ ПРОДОВЖЕННЯ ПРОБІЛ, ДЛЯ ЗАВЕРШЕННЯ ESC. ');
while (ord(ch)<>27) and (MaxAvail>SizeOf(Node)) do
Begin
gotoxy(x,y);
inc(InpNumber);
write('Введіть елемент стека', InpNumber,' ');
readln(InpMember);
PushStack(InpNumber,InpMember,List);
gotoxy(78,2);
memw[0:$41a]:=memw[0:$41c];
ch:=readkey; gotoxy(x,y);DelLine;
End;{while}
End;{CreateStac}

procedure WriteStac(var List:Nodeptr);
var {ВИВЕДЕННЯ ЕЛЕМЕНТІВ СТЕКУ}
InpMember:string;
InpNumber:longint;
Max:byte;
Begin
clrscr;gotoxy(28,2);
writeln('ЕЛЕМЕНТИ СТЕКА:');
window(1,3,80,25); x:=2; Max:=2; y:=1;
while StackTop<>Nil do
Begin
PopStack(InpNumber,InpMember, List);
gotoxy(x,y); Str(InpNumber,NumberStr);
gotoxy(x,y);
If length(NumberStr+InpMember+'эл'+'=')+x<77
then
write('эл',InpNumber,'=',InpMember)
else
Begin
Stop;
Max:=x;gotoxy(x,y);
write('эл',InpNumber,'=',InpMember);
If length(NumberStr+InpMember+'эл'+'=')>80
then
Begin
Stop;
Max:=x;
End;
End;
if Max<Wherex
then
Max:=WhereX;
if y<21
then
inc(y)
else
if Max>70
then
Begin
Stop;Max:=x;
End
else
Begin
y:=1; x:=Max+2;
End;
end;{while}
End;{WriteStac}
Begin
textbackground(3);
clrscr;
textcolor(15);
Mark(Cl);
InitStac;
CreateStac(Link);
WriteStac(Link);
Release(Cl);
 memw[0:$41a]:=memw[0:$41c];
 c:=readkey;
End.
 

[ Виконати програму ]

[ Назад | Зміст ]