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

UptoLike

- 26 -
procedure push (var S: stack;x:elemtype);
{ положить x в стек S с контролем переполнения}
begin
if S.top=stacksize then error('стек полон')
else begin
S.top:=S.top+1;
S.elems[S.top]:=x
end
end; {push}
procedure pop (var S: stack; var x:elemtype);
{ если стек непуст, взять из стека S верхний элемент и
присвоить его x, иначе сообщить об ошибке}
begin
if S.top=0 then error('стек пуст ')
else begin
x:=S.elems[S.top];
S.top:=S.top-1;
end
end; {pop}
После того, как программа отлажена, проверки становятся ненужными и их
следует исключить в целях повышения быстродействия программы.
Заметим, что в случаях, когда максимальный размер стека не может быть
заранее определён, лучше воспользоваться реализацией на основе динамических
цепочек. Тогда размер ограничивается только ресурсами вычислительной
среды.
Представление очереди с помощью списка с заглавным звеном
Поскольку операции вставки и удаления осуществляются на разных концах
очереди, для работы с ней удобно иметь два указателяна заглавное и на
последнее звенья. Если очередь пуста, оба указателя ссылаются на заглавное
звено. Приведём необходимые описания.
type link =node; { ссылка на звено }
elemtype = … {подходящий тип элементов очереди};
node= record
elem: elemtype; {элемент }
next: link {ссылка на следующее звено}
end;
queue = record
front: link {ссылка на заглавное звено};
rear: link {ссылка на последнее звено}
end;
var Q: queue;{очередь}
procedure push (var S: stack;x:elemtype);
{ положить x в стек S с контролем переполнения}
  begin
    if S.top=stacksize then error('стек полон')
      else begin
             S.top:=S.top+1;
             S.elems[S.top]:=x
           end
  end; {push}

procedure pop (var S: stack; var x:elemtype);
{ если стек непуст, взять из стека S верхний элемент и
  присвоить его x, иначе сообщить об ошибке}
  begin
    if S.top=0 then error('стек пуст ')
      else begin
             x:=S.elems[S.top];
             S.top:=S.top-1;
           end
  end; {pop}

После того, как программа отлажена, проверки становятся ненужными и их
следует исключить в целях повышения быстродействия программы.
    Заметим, что в случаях, когда максимальный размер стека не может быть
заранее определён, лучше воспользоваться реализацией на основе динамических
цепочек. Тогда размер ограничивается только ресурсами вычислительной
среды.


      Представление очереди с помощью списка с заглавным звеном

    Поскольку операции вставки и удаления осуществляются на разных концах
очереди, для работы с ней удобно иметь два указателя – на заглавное и на
последнее звенья. Если очередь пуста, оба указателя ссылаются на заглавное
звено. Приведём необходимые описания.

type link =↑node; { ссылка на звено }
elemtype = … {подходящий тип элементов очереди};
node= record
       elem: elemtype; {элемент }
       next: link       {ссылка на следующее звено}
      end;
queue = record
           front: link {ссылка на заглавное звено};
            rear: link {ссылка на последнее звено}
        end;

var Q: queue;{очередь}

                                   - 26 -