Ng n x p (Stack) hay b x p ch ng là m t ki u danh sách tuy n tính đ c bi t mà phép b xung ph n t và lo i b ph n t luôn luôn đ c th c hi n m t đ u g i là đnh (top).
Có th hình dung stack nh m t ch ng đa đ c x p vào h p ho c m t b ng đ n đ c n p vào kh u súng liên thanh. Quá trình x p đa ho c n p đ n ch đ c th c hi n m t đ u, chi c đa ho c viên đ n cu i cùng l i chi m v trí đnh đ u tiên còn đa đ u ho c viên đ n đ u l i đáy c a h p (bottom), khi l y ra thì đa cu i cùng ho c viên đ n cu i cùng l i đ c l y ra tr c tiên. Nguyên t c vào sau ra tr c c a stack còn đ c g i d i m t tên khác LIFO (Last- In- First- Out).
Stack có th r ng ho c bao g m m t s ph n t . Có hai thao tác chính trên stack là thêm m t nút vào đnh stack (push) và lo i b m t nút t i đnh stack (pop). Khi mu n thêm m t nút vào stack thì tr c đó ta ph i ki m tra xem stack đã đ y (full) hay ch a, n u ta mu n lo i b m t nút c a stack thì ta ph i ki m *tra stack có r ng hay không. Hình 4.1 minh h a s thay đ i c a stack thông qua các thao tác thêm và b t đnh trong stack.
Gi s ta có m t stack S l u tr các kí t . Tr ng thái b t đ u c a stack đ c mô t trong hình a là tr ng thái r ng, hình e mô t tr ng thái đ y. Các thao tác:
push(S,’A’) (hình b) push(S,’B’) (hình c)
push(S,’C’) (hình d) push(S,’D’) (hình e) pop(S) (hình f) pop(S) (hình g)
(a) (b) (c) (d) (e) (f) (g)
Hình 3.1. Các thao tác trên Stack
Có th l u tr stack d i d ng m t vector S g m n thành ph n liên ti p nhau. N u T
là đa ch c a ph n t đnh stack thì T s có giá tr bi n đ i khi stack ho t đ ng. Ta g i ph n t đ u tiên c a stack là ph n t th 0, nh v y stack r ng khi T có giá tr nh h n 0 ta qui c là -1. Stack tràn khi T có giá tr là n-1. M i khi m t ph n t đ c thêm vào stack, giá tr c a Tđ c t ng lên 1đ n v , khi m t ph n t b lo i b kh i stack giá tr c a T s gi m đi m t đ n v .
TOP T BOOTTOM
Hình 3.2. Vector S l u tr Stack
khai báo m t stack, chúng ta có th dùng m t m ng m t chi u. Ph n t th 0 là đáy stack, ph n t cu i c a m ng là đnh stack. M t stack t ng quát là m t c u trúc g m hai tr ng, tr ng top là m t s nguyên ch đnh stack. Tr ng node: là m t m ng m t chi u g m MAX ph n t trong đó m i ph n t là m t nút c a stack. M t nút c a stack có th là m t bi n đ n ho c m t c u trúc ph n ánh t p thông tin v nút hi n t i. Ví d , khai báo stack dùng đ l u tr các s nguyên. #define TRUE 1 #define FALSE 0 #define MAX 100 typedef struct { int top; int nodes[MAX]; } stack; S1 S2 S3 . . . ST . . . A B A C B A D C B A C B A B A