AFON // радиотехник affonya@mail.ru
← Все проекты Delphi

Стек и очередь

Реализация стека (LIFO) и кольцевой очереди (FIFO) на массивах.

DP.45 · Данные

Задача

Показать разницу порядка выдачи элементов из стека и очереди.

Алгоритм

Стек добавляет и снимает с вершины (LIFO). Очередь — кольцевой буфер с головой и хвостом (FIFO).

Исходный код

⇩ Скачать 45-stek-i-ochered.dpr

program StekIOchered;
{$mode delphi}{$apptype console}
const N = 10;
var stack: array[0..N - 1] of Integer; sp: Integer;
    queue: array[0..N - 1] of Integer; qh, qt: Integer;
  procedure Push(v: Integer); begin stack[sp] := v; Inc(sp); end;
  function Pop: Integer; begin Dec(sp); Result := stack[sp]; end;
  procedure Enq(v: Integer); begin queue[qt] := v; qt := (qt + 1) mod N; end;
  function Deq: Integer; begin Result := queue[qh]; qh := (qh + 1) mod N; end;
var i: Integer;
begin
  sp := 0; qh := 0; qt := 0;
  for i := 1 to 5 do begin Push(i); Enq(i); end;
  Write('Стек (LIFO):    '); for i := 1 to 5 do Write(Pop, ' '); WriteLn;
  Write('Очередь (FIFO): '); for i := 1 to 5 do Write(Deq, ' '); WriteLn;
  ReadLn;
end.

Пояснения

Индексы очереди берутся по модулю N — это классический кольцевой буфер.