Bài ti u lu n môn: C u trúc d li u và gi i thu t
M c l c
Ph n I: M đu
I. Gi i thi u đ tài
Trong khoa h c máy tính, c u trúc d li u là cách l u d li u trong máy ư
tính sao cho nó có th đc s d ng m t cách hi u qu . Thông th ng, m t ượ ườ
c u trúc d li u đc ượ ch n c n th n s cho phép th c hi n thu t toán hi u qu
h n. Vi c ch n c u trúc d li uơ th ng b t đu t ch n m t c u trúc d li u ườ
tr u t ng. M t c u trúc d li u đc thi t k ượ ượ ế ế t t cho phép th c hi n nhi u
phép toán, s d ng càng ít tài nguyên, th i gian x lý và không gian b nh càng
t t. Các c u trúc d li u đc tri n khai b ng cách s d ng các ượ ki u d li u,
các tham chi u và các phép toán trên đó đc cung c p b i m t ngôn ng ế ượ
l p trình.
Trong đó n i tr i lên là hai c u trúc d li u đó là Stack (ngăn x p) và ế
Queue (hàng đi). Stack và Queue có ng d ng r t nhi u k c trong thu t toán
l n trong th c t . H ế àng ngày chúng ta th ng xuyên làm vi c và ti p xúc v i ườ ế
các bi u th c, toán h ng, toán t … và máy tính cũng v y. Tuy nhiên máy tính
không th nào hi u đc ngôn ng và cách vi t c a con ng i, vì v y đ máy ượ ế ườ
tính hi u đc các bi u th c thì chúng ta ph i chuy n chúng v m t d ng mà ượ
máy tính có th th c hi n đc. ượ Vì v y em xin ch n đ tài “ ng d ng ngăn x p ế
GVHD: Tr nh Th Phú Sinh vên th c hi n: Hoàng Năng H ng ư 1
Bài ti u lu n môn: C u trúc d li u và gi i thu t
(Stack) và hàng đi (Queue) đ vi t ch ng trình bi n đi bi u th c trung t ế ươ ế
thành ti n t và h u t đ làm bài ti u lu n.
II. M c đích yêu c u c a đ bài
1. M c đích
Đ tài này giúp em c ng c , nâng cao ki n th c v môn h c c u trúc d ế
li u và gi i thu t. T đó hi u sâu h n và v n d ng vào trong các bài toán s ơ
li u th c t đng th i thông qua vi c làm đ tài này giúp em bi t đc các ế ế ượ
ph ng pháp nghiên c u m t v n đ nh nào đó.ươ
2. Yêu c u
Dùng ngôn ng l p trình C/C++ đ cài đt ch ng trình. V i d li u ươ
đc nh p vào t bàn phím.ượ
III. Ph ng pháp nghiên c uươ
+ Tham kh o tài li u: c u trúc d li u và gi i thu t, trên m ng…
+ Tìm hi u th c ti n, th c t , quy cách, nhu c u c a bài toán. ế
+ Xin ý ki n, h ng d n c a giáo viên h ng d n.ế ư ướ
Ph n II: N i dung
I. Ngăn x p (Stack)ế
Ngăn x p (Stack) là m t danh sách có th t mà phép chèn và xóa đc ế ượ
th c hi n t i đu cu i c a danh sách và ng i ta g i đu cu i này là ườ
đnh (top) c a stack. V i nguyên t c vào sau ra tr c, danh sách ki u ướ
LIFO (last - in - first - out).
Có 2 cách l u tr Stack:ư
GVHD: Tr nh Th Phú Sinh vên th c hi n: Hoàng Năng H ng ư 2
Bài ti u lu n môn: C u trúc d li u và gi i thu t
+ B ng m ng.
+ B ng danh sách liên k t. ế
Các thao tác c b n trênơ Stack:
Push: Đa m t ph n tư vào đnh c a Stack.
Pop: L y t đnh c a Stack m t ph n t .
Peek: Xem đnh c a Stack ch a n i dung là gì?
M t s ng d ng c a Stack:
ng d ng tr c ti p: ế
ng d ng n i b t c a Stack là Stack cho ch ng trình s d ng Stack đ ươ
g i hàm.
Trong trình duy t WEB, các trang đã xem đc l u trong ượ ư
stack.
Trong trình so n th o văn b n, thao tác Undo đc l u ượ ư
trong stack.
ng d ng gián ti p: ế
C u trúc d li u b tr cho thu t toán khác.
M t thành ph n c a c u trúc d li u khác.
II. Hàng đi (Queue)
Hàng đi là ki u danh sách tuy n tính mà phép b sung đc th c hi n ế ượ
1 đu, g i là l i sau (rear) và phép lo i b th c hi n 1 đu khác g i là
l i tr c (front). Nguyên t c vào tr c ra tr c, danh sách ki u FIFO ướ ướ ướ
(first - in - first - out).
Có 2 cách l u tr t ng t nh Stack:ư ươ ư
+ B ng m ng.
GVHD: Tr nh Th Phú Sinh vên th c hi n: Hoàng Năng H ng ư 3
Bài ti u lu n môn: C u trúc d li u và gi i thu t
+ B ng danh sách liên k t. ế
ng d ng c a Queue
ng d ng t r c ti p ế
Danh sách hàng đi.
Qu n lý truy c p t i các tài nguyên dùng chung (ví d máy in).
Multiprogramming.
ng d ng gián ti p ế
C u trúc d li u ph tr cho các thu t toán.
M t ph n c a CTDL khác.
III. ng d ng c a Stack và Queue trong ký pháp Ba Lan
1. Khái ni m:
Prefix: Bi u th c ti n t đc bi u di n b ng cách đt toán t lên tr c ư ướ
các toán h ng. Cách bi u di n này còn đc bi t đn v i tên g i “ ượ ế ế ký pháp Ba
Lando nhà toán h c Ba Lan Jan Łukasiewicz phát minh năm 1920. V i cách
bi u di n này, thay vì vi t x + y nh d ng trung t , ta s vi t + x y. Tùy theo đ ế ư ế
u tiên c a toán t mà chúng s đc s p x p khác nhau, b n có th xem m t ư ượ ế
s ví d phía sau ph n gi i thi u này.
Postfix: Ng c l i v i cách Prefix, bi u th c h u t t c là các toán t s ượ
đc đt sau các toán h ng. Cách bi u di n này đc g i là ượ ượ ký pháp ngh ch
đo Ba Lan ho c đc vi t t t là ượ ế RPN(Reverse Polish notation), đc phát ượ
minh vào kho ng gi a th p k 1950 b i m t tri t h c gia và nhà khoa h c máy ế
tính Charles Hamblin ng i Úc.ườ
GVHD: Tr nh Th Phú Sinh vên th c hi n: Hoàng Năng H ng ư 4
Bài ti u lu n môn: C u trúc d li u và gi i thu t
Ví d :
2. Chuyn đi dng Infix(trung t ) sang Postfix(h u t )
Thu t toán:
B c 1:ướ Đc m t thành ph n c a bi u th c E (d ng Infix bi u di n
b ng xâu, đc t trái qua ph i). Gi s thành ph n đc đc là x ư
B c 1.1: ướ N u x là toán h ng thì vi t nó vào bên ph i bi u th c E1 ế ế
(xâu l uư
k t qu c a Postfix)ế
B c 1.2:ướ N u x là d u ‘(’ thì đy nó vào Stack.ế
B c 1.3:ướ N u x là m t trong các phép toán +, -, *, / thìế
B c 1.3.1:ư Xét ph n t y đnh Stack.
B c 1.3.2:ướ N u Pri(y) >= Pri(x) là m t phép toán thì lo i y ra ế
kh i Stack và vi t y vào bên ph i c a E1 và quay l i b c 1.3.1 ế ướ
B c 1.3.3:ướ N u Pri(y) < Pri(x) thì đy x vào Stack.ế
B c 1.4ướ : N u x là d u ‘)’ thìế
B c 1.4.1:ướ Xét ph n t y đu c a Stack.
B c 1.4.2:ướ y là phép toán thì lo i y ra kh i Stack, vi t y vào bên ế
ph i E1 và quay tr l i 1.4.1
B c 1.4.3:ướ N u y là d u ‘(’ lo i y ra kh i Stack.ế
GVHD: Tr nh Th Phú Sinh vên th c hi n: Hoàng Năng H ng ư 5