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 — это классический кольцевой буфер.