Chúng ta có thể cài đặt stack bởi danh sách liên kết nh chúng ta đã làm đối với danh sách. Đỉnh của stack là đầu của danh sách liên kết. Ta sử dung con trỏ S trỏ đến đỉnh stack. Hình 3.12 minh hoạ danh sách liên kết biểu diễn stack (a1, a2, ..., an) với đỉnh là an.
S
...
Hình 3.12
Ta có thể khai báo cấu trúc dữ liệu danh sách liên kết biểu diễn stack nh sau :
type Stack = ^Cell Cell = record
Infor : Item ; next : Stack :
end ;
var S : Stack ;
Trong cách cài đặt này, S là stack rỗng, nếu S = nil. Chúng ta giả thiết rằng, việc cấp phát bộ nhớ cho các biến động (thủ tục new trong Pascal) luôn luôn đợc thực hiện. Do đó hàm Full luôn luôn có giá trị false, và phép toán Push không bao giờ thất bại.
Sau đây là các thủ tục và hàm thực hiện các phép toán trên Stack đợc cài đặt bởi danh sách liên kết.
procedure Initialize (var S : Stack) ; begin
S : = nil
end ;
function Emty (var S : Stack) : boolean ; begin
if S = nil then Emty : = true
else Emty : = false
end ;
function Full (var S : stack) : boolean ; begin
Full : = false
end ;
var P : ^Cell ; begin new (P) ; P^.infor : = x ; P^.next : = S ; S : = P ; OK : = true end ;
procedure Pop (var S : Stack ; var x: Item ; var OK : boolean) ; var P : ^Cell ;
begin
if S = nil then OK : = false
else begin P : = S ; x : = S^.infor ; S : = S^.next ; OK : = true ; dispose (P) ; end ; end ;
Các thao tác thực hiện các phép toán Push và Pop trên stack đợc minh hoạ trong hình 3.13a và 3.13b.
S
X
…
P (a) phép toán Push
. x
X
... (b) Phép toán Pop
Hình 3.13. Các phép toán Push và Pop trên stack.