Динамические структуры данных. Задание практикума. Язык Паскаль. Вылиток А.А - 25 стр.

UptoLike

- 25 -
procedure push (var S: stack;x:elemtype);
{ положить x в стек S}
begin S.top:=S.top+1;
S.elems[S.top]:=x
end; {push}
procedure pop (var S: stack; var x:elemtype);
{ взять из стека S верхний элемент и присвоить его x}
begin x:=S.elems[S.top];
S.top:=S.top-1;
end; {pop}
Перед началом работы со стеком нужно сделать его пустым. Для этого опишем
процедуру init_stack(S):
procedure init_stack (var S: stack);
{ начальная установка стека }
begin S.top:=0;
end; {init_stack}
К пустому стеку нельзя применять операцию pop, а к полному стеку нельзя
применять операцию push. Опишем функции full_stack(S)и
empty_stack(S), проверяющие стек на переполнение и пустоту.
function full_stack(var S: stack):boolean;
{ возвращает истину, если стек полон, иначеложь}
begin
full_stack:=L.top=stacksize
end; {full_stack}
function empty_stack (var S: stack):boolean;
{ возвращает истину, если стек пуст, иначеложь}
begin
empty
_stack:=L.top=0
end; {empty_stack}
В некоторых алгоритмах, использующих стек, проверка на пустоту или
переполнение перед обращением к стеку не требуется, поскольку для них
доказано, что при корректных входных данных подобных ситуаций не
возникает.
1
Для отладки программ, построенных по таким алгоритмам, было бы
удобно, чтобы процедуры pop и push сами проверяли корректность операции
со стеком и в случае ошибки сообщали о ней. Пусть процедура error с одним
параметромстрокойпечатает эту строку и приводит к завершению
программы. Дадим соответствующие описания push и pop .
1
В задаче 9 раздела «Примеры задач с решениями» описан алгоритм, использующий стек, в
котором при корректных входных данных попытка взять элемент из пустого стека исключена.
См. также замечание в решении задачи 10 в том же разделе.
procedure push (var S: stack;x:elemtype);
{ положить x в стек S}
  begin S.top:=S.top+1;
        S.elems[S.top]:=x
  end; {push}

procedure pop (var S: stack; var x:elemtype);
{ взять из стека S верхний элемент и присвоить его x}
  begin x:=S.elems[S.top];
        S.top:=S.top-1;
  end; {pop}

Перед началом работы со стеком нужно сделать его пустым. Для этого опишем
процедуру init_stack(S):

procedure init_stack (var S: stack);
{ начальная установка стека }
  begin S.top:=0;
  end; {init_stack}

К пустому стеку нельзя применять операцию pop, а к полному стеку нельзя
применять операцию push. Опишем функции full_stack(S)и
empty_stack(S), проверяющие стек на переполнение и пустоту.


function full_stack(var S: stack):boolean;
 { возвращает истину, если стек полон, иначе – ложь}
  begin
    full_stack:=L.top=stacksize
  end; {full_stack}

function empty_stack (var S: stack):boolean;
 { возвращает истину, если стек пуст, иначе – ложь}
  begin
    empty_stack:=L.top=0
  end; {empty_stack}

    В некоторых алгоритмах, использующих стек, проверка на пустоту или
переполнение перед обращением к стеку не требуется, поскольку для них
доказано, что при корректных входных данных подобных ситуаций не
возникает.1 Для отладки программ, построенных по таким алгоритмам, было бы
удобно, чтобы процедуры pop и push сами проверяли корректность операции
со стеком и в случае ошибки сообщали о ней. Пусть процедура error с одним
параметром – строкой – печатает эту строку и приводит к завершению
программы. Дадим соответствующие описания push и pop .
1
 В задаче 9 раздела «Примеры задач с решениями» описан алгоритм, использующий стек, в
котором при корректных входных данных попытка взять элемент из пустого стека исключена.
См. также замечание в решении задачи 10 в том же разделе.

                                        - 25 -