Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
1
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
2
9.1. Khái niệm về stacks
!"
#$%&'
(!)*+pushed,-.
(%/+popped,0123 -.
8/28/14
3
4!%5678.%Last In First Out
(LIFO), )*
!%5- !"
9:
;<=% >#;
);?
9.1. Khái niệm về stacks
8/28/14
4
Các thao tác cơ bản trên stack:
Push@A3=0)*-.
Pop@B/-.3=0
Peek@CD-.;%E
9.1. Khái niệm về stacks
8/28/14
5
9.1. Khái niệm về stacks
Một số ứng dụng của stack:
F1trực @ếp@
F1G7H.%*6 6 01I
J * KLMN# OPD'% *
J * *&8*)Q78*#R*'% *
F1gián @ếp@
ST%K7G '*H*##
93=. ST%K#
8/28/14
6
9.1. Khái niệm về stacks
Định nghĩa stack:
9UCVWXM@V:3=0:.+"8,
WDJ3D@(T%K*
Thao tác chính:
Y
Y*3
YDD
Thao tác khác:
WM3
WZ%%
9DM3
8/28/14
7
9.1. Khái niệm về stacks
Thực thi và giới hạn của stack.
Thực thi:
[I%:\*]
(\01:)%^+,]
_*#3;&3%^+`,
Giới hạn:
(a:.stack'b \G+"8,]
4stackO=\PUSH'3=0)*stack4stack _*#POP*c8
_
8/28/14
8
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
9
9.2. Các thao tác chính của stacks
J ba*stack@
dDeD9UCVWXM`ff
01stack%7gT%K**=bT%K*@
h9UCVWXMi]
"* >P#b-.stack*j686"3=08=2!
.stack%:3=O *stack@
hfikf]
8/28/14
10
Thêm một phần tử vào stack:
Y+DlWD@WDJ3D,
Chức năng: J!3=0)*-.
V
Điều kiện thực hiện: VO'&*
)=
Kết quả: 4!\DlWDm
-.V
3+hi)%D,
n
o+hfip9UCVWXMq`,n
hfikhfir`]
hhfiik)%D]
D `]
s
D%D D f]
s
9.2. Các thao tác chính của stacks
8/28/14
11
Thêm một phần tử vào stack:
Y+DlWD@WDJ3D,
Chức năng: J!3=0)*-.
V
Điều kiện thực hiện: VO'&*
)=
Kết quả: 4!\DlWDm
-.V
)*3+hi)%D,
n
o+hfip9UCVWXMq`,n
hfikhfir`]
hhfiik)%D]
s
D%Dn
3 t+u(*DD)* VJU(vu,]
D+,]
s
s
9.2. Các thao tác chính của stacks
8/28/14
12
Thao tác lấy ra 1 phần tử:
Y*3+D@WDJ3D,
Chức năng: B3=0-.Stack)
8%&*%wI
Điều kiện: VO'&*)\
_
Kết quả: Y=0-.Stack' 8
%&*%wI):3=0 *Stack
8`
3*3+hix)%D,
n
o+hfiyf,n
x)%Dkhhfii]
hfikhfiq`]
D `]
s
D%D D f]
s
#I@
)%DD ]
D k3*3+z)%D,]
Wo+D kkf,3 t+{%_|,]
M%D3 t+{ b@}|)%D,
9.2. Các thao tác chính của stacks
8/28/14
13
Thao tác lấy ra 1 phần tử:
Y*3+D@WDJ3D,
Chức năng: B3=0-.Stack)
8%&*%wI
Điều kiện: VO'&*)\
_
Kết quả: Y=0-.Stack' 8
%&*%wI):3=0 *Stack
8`
3*3+hi,
n
)%D]
o+hfiyf,n
)%Dkhhfii]
hfikhfiq`]
s
D%Dn
3 t+uVJU( *vu,]
)%Dkq<?~•€]
s
D )%D]
s
9.2. Các thao tác chính của stacks
8/28/14
14
Xem giá trị ở đỉnh stack:
YDD+D@WDJ3D,
Chức năng: B# b&-.V
\%*&3=0-.V
Điều kiện: VO'&*)\
_
Kết quả: [# b&-.V' 8)•
*%wIV\G
3DD+hixD ,
n
o+hfiyf,n
xD k`]
D hhfii]
s
D%Dn
xD kf]
D f]
s
s
9.2. Các thao tác chính của stacks
8/28/14
15
Xem giá trị ở đỉnh stack:
YDD+D@WDJ3D,
Chức năng: B# b&-.V
\%*&3=0-.V
Điều kiện: VO'&*)\
_
Kết quả: [# b&-.V' 8)•
*%wIV\G
3DD+hi,
n
o+hfiyf,
D hhfii]
D%Dn
3 t+uVJU( *vu,]
D q<?~•€]
s
s
9.2. Các thao tác chính của stacks
8/28/14
16
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
17
9.3. Các thao tác khác của stacks
J*#isEmpty@( PDStack _\E
J*#isFull@( PDStackO=E
J*#makeEmpty@B _Stack
Bài tập:
C‚ƒPush01*#isFull
C‚ƒPop01*#isEmpty
C‚ƒPeek01*#isEmpty
8/28/14
18
Thao tác isEmpty:
( PDV _\E
4 _ 8)•`\ 8)•
f
M3+hi,
n
o+hfikkf,
D `]
D%D
D f]
s
9.3. Các thao tác khác của stacks
8/28/14
19
Thao tác isFull:
( PDVO=E
4O= 8)•`]=
8)•f
Thao tác makeEmpty:
B _V
A:3=0 *V)•f
Z%%+hi,
n
o+hfikk9UCVWXMq`,
D `]
D%D
D f]
s
)*DM3+hi,
n
hfikf]
s
9.3. Các thao tác khác của stacks
8/28/14
20
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
21
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
22
9.4.1. Đảo mảng
Ý tưởng giải quyết vấn đề:
` (&*Stack _:
? 3=0.8%=%')*V\cPush@
Pushhi*Stack
< B=%'% /Stack3=0))* %&87=@
PopDo *Stack*hi
„ (S8H
8/28/14
23
Lecture 9 – Ngăn xếp (Stacks)
9.1. Khái niệm về stacks
9.2. Các thao tác chính của stacks
9.3. Các thao tác khác của stacks
9.4. Ví dụ về ứng dụng của stack
9.4.1. Đảo mảng
9.4.2. Đảo chuỗi
9.4.3. Chuyển đổi hệ cơ số
9.4.4. Bracket Matching
9.4.5. Balancing Act
9.5. Bài tập thực hành
8/28/14
24
9.4.2. Đảo chuỗi
Ý tưởng xây dựng chương trình:
` J&*lV _
? _/mWordI'/ /)*V@
PushmWord*wStack
< AI/wStack*ƒK@
Popwordo *wStack*mWord
ConcatemWord*DD*ooutp string
„ …/8H
.
Chú ý: =P‚ƒ#l* /
8/28/14
25