[帕斯卡尔]在队列中的一些操作 – 代码帕斯卡尔
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 操作:
1. 检查空: Nếu số lượng phần tử (尺寸) 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ử (尺寸) 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ư 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ử (尺寸) 向上 1, sau đó gán phần tử cuối cùng bằng x cần chèn
6. 抹去: 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 单元, 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.
最新评论