|
|
|||
|
wm-help.net -> Электронная библиотека -> Pascal -> Pascal. Курс лекций. -> 38. Стеки38. Стеки
38. Стеки
Стеком называется динамическая структура данных, добавление компо- ненты в которую и исключение компоненты из которой производится из одного конца, называемого вершиной стека. Стек работает по принципу
LIFO (Last-In, First-Out) -
поступивший последним, обслуживается первым. Обычно над стеками выполняется три операции: -начальное формирование стека (запись первой компоненты); -добавление компоненты в стек; -выборка компоненты (удаление). Для формирования стека и работы с ним необходимо иметь две пере- менные типа указатель, первая из которых определяет вершину стека, а вторая - вспомогательная. Пусть описание этих переменных имеет вид:
var pTop, pAux: Pointer;
где pTop - указатель вершины стека; pAux - вспомогательный указатель. Начальное формирование стека выполняется следующими операторами:
ЙННННН» ЙННННН» New(pTop); є *ДДєДДДї є є ИНННННј і єНННННє pTop АДД>є є ИНННННј
ЙННННН» ЙННННН» pTop^.pNext:=NIL; є *ДДєДДДї є є ИНННННј і єНННННє pTop АДД>є NIL є ИНННННј
ЙННННН» ЙННННН» pTop^.D:=D1; є *ДДєДДДї є D1 є ИНННННј і єНННННє pTop АДД>є NIL є ИНННННј
Последний оператор или группа операторов записывает содержимое поля данных первой компоненты. Добавление компоненты в стек призводится с использованием вспо- могательного указателя:
ЙННННН» ЙННННН» ЙННННН» New(pAux); є *ДДєДДДї є є ЪДДДєДД* є ИНННННј і єНННННє і ИНННННј pTop і є є<ДДЩ pAux і ИНННННј і і ЙННННН» і є D1 є і єНННННє АДД>є NIL є ИНННННј
ЙННННН» ЙННННН» ЙННННН» pAux^.pNext:=pTop; є *ДДєДДДї є є ЪДДДєДД* є ИНННННј і єНННННє<ДДЩ ИНННННј pTop і є *ДДєДї pAux і ИНННННј і і і і ЙННННН» і і є D1 є і і єНННННє і АДД>є NIL є<Щ ИНННННј
ЙННННН» ЙННННН» ЙННННН» pTop:=pAux; є *ДДєДДДї є є ЪДДДєДД* є ИНННННј і єНННННє<ДДЩ ИНННННј pTop АДД>є *ДДєДї pAux ИНННННј і і ЙННННН» і є D1 є і єНННННє і є NIL є<Щ ИНННННј
ЙННННН» ЙННННН» pTop^.D:=D2; є *ДДєДДДї є D2 є ИНННННј і єНННННє pTop АДД>є *ДДєДї ИНННННј і і ЙННННН» і є D1 є і єНННННє і є NIL є<Щ ИНННННј
Добавление последующих компонент производится аналогично. Рассмотрим процесс выборки компонент из стека. Пусть к моменту на- чала выборки стек содержит три компоненты: ЙННННН» ЙННННН» є *ДДєДДДї є D3 є ИНННННј і єНННННє pTop АДД>є *--єДї ИНННННј і і ЙННННН» і є D2 є і єНННННє і ЪДєДД* є<Щ і ИНННННј і і ЙННННН» і є D1 є і єНННННє А>є NIL є ИНННННј
Первый оператор или группа операторов осуществляет чтение данных из компоненты - вершины стека. Второй оператор изменяет значение ука- зателя вершины стека:
ЙННННН» ЙННННН» D3:=pTop^.D; є *ДДєДДДї є D3 є pTop:=pTop^.pNext; ИНННННј і єНННННє pTop і є є і ИНННННј і і ЙННННН» і є D2 є і єНННННє АДД>є *ДДєДї ИНННННј і і ЙННННН» і є D1 є і єНННННє і є NIL є<Щ ИНННННј
Как видно из рисунка, при чтении компонента удаляется из стека.
Пример. Составить программу, которая формирует стек, добавляет в него произвольное количество компонент, а затем читает все компоненты и выводит их на экран дисплея, В качестве данных взять строку симво- лов. Ввод данных - с клавиатуры дисплея, признак конца ввода - строка символов END.
Program STACK; uses Crt; type Alfa= String[10]; PComp= ^Comp; Comp= Record sD: Alfa; pNext: PComp end; var pTop: PComp; sC: Alfa; Procedure CreateStack(var pTop: PComp; var sC: Alfa); begin New(pTop); pTop^.pNext:=NIL; pTop^.sD:=sC end; Procedure AddComp(var pTop: PComp; var sC: Alfa); var pAux: PComp; begin NEW(pAux); pAux^.pNext:=pTop; pTop:=pAux; pTop^.sD:=sC end; Procedure DelComp(var pTop: PComp; var sC:ALFA); begin sC:=pTop^.sD; pTop:=pTop^.pNext end; begin Clrscr; writeln(' ВВЕДИ СТРОКУ '); readln(sC); CreateStack(pTop,sC); repeat writeln(' ВВЕДИ СТРОКУ '); readln(sC); AddComp(pTop,sC) until sC='END'; writeln('****** ВЫВОД РЕЗУЛЬТАТОВ ******'); repeat DelComp(pTop,sC); writeln(sC); until pTop = NIL end.
|
|
| бодибилдинг | Строим Домик | RU-домены за 170 рублей | Copyright © "В помощь Веб-Мастеру" (Alexander D. Belyaev) 2005-2009. При перепечатке любого материала видимая ссылка на источник "В помощь Веб-Мастеру" и все имена, ссылки авторов обязательны! Время генерации страницы: 0.074 |