Chương II: DANH SÁCH TUYẾN TÍNH
IỊ4.2. Tổ chức hàng đợi bằng mảng
hàng đợi, một biến nguyên front để lưu chỉ số phần tử đầu hàng đợi và một biến nguyên rear để lưu chỉ số phần tử cuối hàng đợị Chỉ một phần của mảng items từ vị trí front tới rear được sử dụng lưu trữ các phần tử trong hàng đợị
Const max = 1000; {Dung lượng cực đại} Type
Telement = integer; {Kiểu giá trị một phần tử} TQueue = record
Items: array[1..max] of TElement; Front: integer;
Rear: integer; End;
Var Queue: TQueue;
Bổ sung/ Đưa vào
Front (Lối sau, đầu) Rear (Lối trước, cuối)
Loại bỏ/ Đưa ra
Các thao tác cơ bản trên hàng đợi được cài đặt bằng ngôn ngữ lập trình Free Pascal như sau:
uses crt; const max = 1000; type TElement = integer; TQueue = record
items: array[1..max] of Telement; front: integer;
rear: integer; end;
var
Queue: TQueue;
Procedure init(var Q: TQueue); begin
Q.front:= 1; Q.rear:= 0; end;
Function IsEmpty(var Q: TQueue): Boolean; begin
IsEmpty:= (Q.front > Q.rear); end;
Function IsFull(var Q: TQueue): Boolean; begin
IsFull:= (Q.rear = max); end;
Function Get(var Q: TQueue): TElement; begin
if IsEmpty(Q) then write('Queue rong!') else Get:= Q.items[Q.front];
end;
Procedure Push(x: TElement; var Q: TQueue); begin
if IsFull(Q) then write('Queue day!') else with Q do begin rear:= rear + 1; items[rear]:= x; end; end;
Function Pop(var Q: TQueue): TElement; begin
if IsEmpty(Q) then write('Queue rong!') else with Q do begin Pop:= items[front]; front:= front + 1; end; end; procedure Test; const r = 100;
var i,x,k,n: integer;
a: array[1..max] of TElement; begin
Init(Queue); randomize;
n:= 10; For i:=1 to n do begin x:= random(r); Push(x,Queue); end;
writeln('Cac phan tu thuoc hang doí); with Queue do
for i:=front to rear do write(items[i], ' '); readln;
k:= 0;
While not IsEmpty(Queue) do begin x:= Pop(Queue); if x mod 2 = 0 then begin k:= k+1; a[k]:= x; end; end; writeln; writeln;
for i:= 1 to k do write(a[i],' '); readln; end;
BEGIN
Test; END.
IỊ4.3. Tổ chức hàng đợi bằng danh sách vòng (Xem [1], Trang 21)