program QueueExample;
const
MAX_SIZE = 128;
type
Queue = record
data: array[1..MAX_SIZE] of Integer;
first, last: Integer;
end;
procedure InitializeQueue(var q: Queue);
begin
q.first := 1;
q.last := 0;
end;
function IsEmpty(q: Queue): Boolean;
begin
IsEmpty := q.last < q.first;
end;
function IsFull(q: Queue): Boolean;
begin
IsFull := q.last = MAX_SIZE;
end;
procedure Enqueue(var q: Queue; value: Integer);
begin
if IsFull(q) then
writeln('Queue is full!')
else
begin
q.last := q.last + 1;
q.data[q.last] := value;
writeln('Enqueued: ', value);
end;
end;
procedure Dequeue(var q: Queue);
begin
if IsEmpty(q) then
writeln('Queue is empty!')
else
begin
writeln('Dequeued: ', q.data[q.first]);
q.first := q.first + 1;
end;
end;
procedure PrintQueue(q: Queue);
var
i: Integer;
begin
if IsEmpty(q) then
writeln('Queue is empty.')
else
begin
writeln('Queue contents:');
for i := q.first to q.last do
write(q.data[i], ' ');
writeln;
end;
end;
var
q: Queue;
begin
InitializeQueue(q);
Enqueue(q, 10);
Enqueue(q, 20);
Enqueue(q, 30);
PrintQueue(q);
Dequeue(q);
PrintQueue(q);
end.
(*
run:
Enqueued: 10
Enqueued: 20
Enqueued: 30
Queue contents:
10 20 30
Dequeued: 10
Queue contents:
20 30
*)