Cấu trúc dữ liệu và giải thuật stack

Chia sẻ bởi Hoàng Văn Quỳnh | Ngày 19/03/2024 | 14

Chia sẻ tài liệu: cấu trúc dữ liệu và giải thuật stack thuộc Công nghệ thông tin

Nội dung tài liệu:

Ngăn Xếp
Định nghĩa
Ngăn xếp là một dạng của danh sách, trong đó phép toán xen một phần tử mới vào danh sách và loại bỏ một phần tử khỏi danh sách chỉ được phép thực hiện ở một đầu của danh sách.
2. Các phép toán trên danh sách
1 khởi tạo danh sách rỗng
Procedure intialize(var s: stack);
2 kiểm tra ngăn xếp rỗng.
Function empty (var s: stack):boolean;
3 kiểm tra ngăn xếp đầy
Function full (var s: stack):boolean;
4 Thêm một phần tử x vào đỉnh của ngăn xếp
Procedure push(x: Item, var s: stack)
5 Loại phần tử ở đỉnh của ngăn xếp và gán giá trị của phần tử này cho x
Procedure pop(var s: stack, var x: item);
Ví dụ: Nếu S là ngăn xếp, S=(a1, a2, ... an) và đỉnh của ngăn xếp ở đầu bên phải. khi thực hiện push(x,S) ta được S=(a1, a2, ... an, x). nếu n>=1 thì khi thực hiện pop(S,x) ta được S=(a1, a2, ... an-1) và x=an.

4 Cài đặt danh sách bởi mảng

Ngăn xếp S= (a1, a2, ... an) được biểu diễn bởi mảng như hình sau:

Const max = N;
Type Item =.......;
Stack = record
Top: 0...max;
Element array[1..max] of Item;
End;
Var S: stack;
Các thủ tục và hàm thực hiện các phép toán trên ngăn xếp.
Procedure initialize(S:Stack);
Begin
s.top: = 0;
end;
function Empty(var S:Stack):boolean;
begin
Empty:=(s.top=0);
End;
Function Full(var S: stack):boolean;
Begin
Full: =(s.top=max);
End;
Procedure push( x:Item, var S: Stack, var ok : boolean);
Begin
With s do
If full(S) then ok:=false
Else
Begin
Top:=top+1;
Elment[top]:=X;
Ok:=true;
End;
End;
Biểu diễn phép toán PUSH trên hình vẽ sau:
Procdure pop(var S:Stack, var X:Item, var ok:boolean);
Begin
With S do
If empty(S) then ok:= false
Else
Begin
X:=Element[top];
Top:=top-1;
Ok:=true;
End;
End;
5. Cài đặt ngăn xếp bởi danh sách liên kết



Type Stack = ^cell;
Cell = record
Infor: Item;
Next: Stack;
End;
Var S: Stack;

- Các thủ tục và hàm thể hiện phép toán trên ngăn xếp được cài đặt bởi danh sách liên kết.

Procedure initialize(Var S:Stack);
Begin
S := NIL;
end;
Function Empty(VarS:Stack):Boolean;
Begin
Empty := (S = NIL);
End;
Procedure PUSH(Var S : Stack; X : Item, Var ok : boolean);
Var P : Stack;
Begin
New(P);
P^.Info := X;
p^.Next := S;
S := P;
ok:= true;
End;

s
an
an-1
a1
Procedure POP(Var S : Stack; Var X : Item; Var OK : Boolean);
Var P : Stack;
Begin
If Empty(S) Then OK := False
Else begin
P := S;
X := S^.Info;
S := S^.Next;
OK := True;
Dispose(P);
end;
End;
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...

Người chia sẻ: Hoàng Văn Quỳnh
Dung lượng: | Lượt tài: 1
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)