Nhân tiện có bạn nhờ làm bài về queue, mình post lên đây luôn.
Trong bài có 8 phép toán:
1. Kiểm tra rỗng: Nếu số lượng phần tử (size) của queue = 0 thì trả về true, ngược lại flase
2. Kiểm tra đầy: Nếu số lượng phần tử (size) của queue = Max (số phần tử tối đa của queue) thì trả về true, ngược lại flase
3. Nhập: Như nhập mảng bình thường: nhập số phần tử, sau đó nhập các phần tử bằng vòng for

4. Xuất: duyệt bằng vòng for rồi xuất.
5. Chèn: chèn vào cuối hàng bằng cách tăng số phần tử (size) lên 1, sau đó gán phần tử cuối cùng bằng x cần chèn
6. Xóa: Xóa phần tử ở đâu hàng: dùng biến x để lưu lại phần tử đó, sau đó di chuyển các phần tử từ thứ 2 trở đi về trước 1 đơn vị, giảm số phàn tử xuôgns 1
7. Sửa tại vị trí k. Gán phần tử tại vị trí k thành giá trị mới.
8. Sửa phần tử x thành y.
+/ Xây dựng hàm tìm kiếm phần tử x trong hàng: dùng vòng for để tìm vị trí của x, tìm được thì trả về vị trí.
+/ Dùng hàm sửa tại vị trí k để sửa thành phần tử y.

program hangdoi;
uses crt;
const Max = 100; {hang doi co toi da 100 phan tu}
type queue = record
        A:array[1..Max] of integer;
        size : integer;
        End;

var Q:queue;
        x,y,k,chon:integer;

function KTRong(Q:queue):boolean; {kiem tra rong}
begin
        if Q.size = 0 then KTRong := true
        else KTRong := false;
end;

function KTDay(Q:queue):boolean;  {kiem tra day}
begin
        if Q.size = Max then KTDay := true
        else KTDay := false;
end;

procedure nhap(var Q:queue); {nhap hang doi}
var i:integer;
begin
        write('Nhap so phan tu cua hang doi : ');
        readln(Q.size);
        for i:=1 to Q.size do
        begin
                write('Nhap phan tu thu ',i,' : ');
                readln(Q.A[i]);
        end;
end;

procedure xuat(Q:queue); {xuat hang doi}
var i:integer;
begin
        for i:=1 to Q.size do
                write(Q.A[i],'  ');
end;

procedure chen(var Q:Queue; x:integer); {chen phan tu vao cuoi hang}
var i:integer;
begin
        if KTday(Q) then writeln('hang day, khong the chen them !')
        else
        begin
                Q.size :=Q.size + 1;
                Q.A[Q.size] := x;
                writeln('Chen thanh cong !');
        end;
end;

procedure xoa(var Q:queue; var x:integer); {xoa phan tu}
var i:integer;
begin
        if KTRong(Q) then writeln('Hang rong, khong the xoa !')
        else
        begin
                x := Q.A[1];
                for i:=1 to Q.size-1 do
                        Q.A[i] := Q.A[i+1];
                Q.size := Q.size - 1;
                writeln('Xoa thanh cong !');
        end;
end;

function tim_x(Q:queue; x:integer):integer;
var i:integer;
begin
        if KTRong(Q) then tim_x := 0
        else
        begin
                for i:=1 to Q.size do
                        if Q.A[i] = x then
                        begin
                                tim_x := i;
                                break;
                        end;
        end;
end;

procedure sua_k(var Q:queue; var x:integer; k:integer); {sua phan tu o vi tri k thanh x}
var i:integer;
begin
        if (k>Q.size+1) or (k<1) then writeln('Vi tri khong hop le !')
        else
        begin
                Q.A[k] := x;
                writeln('Sua thanh cong o vi tri ',k,' !');
        end;
end;

procedure sua_x(var Q:queue; var x:integer; y:integer); {sua phan tu x thanh y}
var i,j:integer;
begin
        j := tim_x(Q,x);
        if j = 0 then writeln('Khong tim thay x !')
        else
        begin
                while (j<>0) do
                begin
                        sua_k(Q,y,j);
                        j := tim_x(Q,x);
                end;
        end;
end;
BEGIN
        writeln('1: Kiem tra hang rong khong');
        writeln('2: Kiem tra hang day khong');
        writeln('3: Nhap hang doi');
        writeln('4: Xuat hang doi');
        writeln('5: Chen phan tu trong hang');
        writeln('6: Xoa phan tu trong hang');
        writeln('7: Sua phan tu o vi tri k trong hang');
        writeln('8: Sua phan tu x trong hang thanh y');
        writeln('9: Thoat');
        while chon <> 9 do
        begin
        writeln;
        writeln('Chon mot trong cac so de lam :');
        readln(chon);

        case chon of
        1:      begin
                        if KTRong(Q) then writeln('Hang doi rong !')
                        else writeln('Hang khong rong !');
                end;
        2:      begin
                        if KTDay(Q) then writeln('Hang doi day !')
                        else writeln('Hang khong day !');
                end;
        3:      begin
                        nhap(Q);
                        writeln('Nhap thanh cong !');
                end;
        4:      begin
                        writeln('Cac phan tu trong hang doi :');
                        xuat(Q);
                end;
        5:      begin
                        write('Nhap phan tu can chen :');
                        readln(x);
                        chen(Q,x);
                end;
        6:      xoa(Q,x);
        7:      begin
                        write('Nhap vi tri can sua :');
                        readln(k);
                        write('Sua thanh phan tu nao ? ');
                        readln(x);
                        sua_k(Q,x,k);
                end;
        8:      begin
                        write('Nhap phan tu can sua :');
                        readln(x);
                        writeln('Sua ',x,' thanh phan tu nao ? ');
                        readln(y);
                        sua_x(Q,x,y);
                end;
        end;
        end;
        readln;

END.
Advertisements