Ch4a Stack

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 18

A

B
C
D
F
G
E
H
K
CU TRC D LIU V
GII THUT
Mt s ng dng DSLK: Stack
2
M t stack
Mt stack l mt cu
trc d liu m vic
thm vo v loi b
c thc hin ti
mt u (gi l nh
top ca stack).
L mt dng vo sau
ra trc LIFO (Last
In First Out)
3
V d v stack
Stack rng:
y (push) Q vo:
y A vo:
Ly (pop) ra mt => c A:
Ly ra mt => c Q v stack rng:
Q
Q
A
Q
A
Q
4
Ci t ngn xp bng DSLK
Phn nhiu ging nh DSLK n ta nghin
cu.
typedef . DataType;
struct Node
{
DataType Data;
Node *Next;
};
typedef Node *StackType;
5
Mt s php ton trn ngn xp
void CreateEmpty(StackType &S): to ngn xp rng
int EmptyStack(StackType S): Kim tra ngn xp c
rng hay khng?
int FullStack(StackType S): Kim tra ngn xp S y
hay khng? (trng hp ngn xp c to bng mng)
void Push(StackType &S, DataType x): a phn t x
vo ngn xp S.
int Pop(StackType &S, DataType &x): Ly phn t u
ca ngn xp gn cho x nu ngn xp khng rng.
int Top(StackType S, DataType &x): Ly phn t u
ca ngn xp gn cho x xem nu ngn xp khng
rng.
6
Ci t ngn xp bng DSLK
void CreateEmpty(StackType &S)
{
S=NULL;
}
int EmptyStack(StackType S)
{
return (S==NULL);
}
7
Ci t ngn xp bng DSLK
void Push(StackType &S, DataType x)
{ StackType temp;
temp=new Node;
if(temp==NULL)
{ cout<<Khng cp pht c vng nh; exit(1);}
else
{
gn(temp->Data,x);//Gn x cho vng Data ca Temp
temp->Next=S;
S=temp;
}
}
8
Ci t ngn xp bng DSLK
int Pop(StackType &S, DataType &x)
{
if(EmptyStack(S)) return 0;
else
{
StackType temp=S;
S=S->Next;
Gn(x,temp->Data);
delete(temp);
return 1;
}
}
9
Ci t ngn xp bng DSLK
int Top(StackType &S, DataType &x)
{
if(EmptyStack(S)) return 0;
else
{
Gn(x,S->Data);
return 1;
}
}
10
ng dng Stack
Dng kh quy
Lu vt trong thut ton quay lui, vt cn.
Chuyn i, nh gi cc biu thc ton hc (nh trong
cc chng trnh Excel, Pascal, C, nh th no!?)

11
ng dng Stack: nh ga biu thc
ton hc
Mt biu thc ton hc thng thng c vit theo k
php trung t (ton t t gia hai ton hng).
K php nghch o Ba Lan (l biu thc ton hc c
vit di dng hu t RPN - ton t t sau cc ton
hng)
Ta ng dng ngn xp chuyn biu thc t trung t
sang hu t, sau nh gi biu thc hu t .
V d:
12
ng dng Stack: Chuyn biu thc
t trung t sang hu t
Thut ton
1. Khi to ngn xp rng
2. Lp li cc vic sau cho n khi du kt thc c c
c phn t tip theo trong biu thc trung t
Nu phn t l:
- Du ( : a n vo S.
- Du ) : Hin th cc phn t ca S cho n khi gp du ( c c (du
( khng hin th).
- Ton t:
- Nu S rng: y ton t vo S.(1)
- Ngc li:
- Nu ton t c u tin cao hn ton t nh
S th a ton t vo S.
- Ngc li: ly ra v hin th ton t nh S quay li (1).
- Ton hng: Hin th n
3. Khi ht biu thc th ly S ra hin th n khi S rng
( u tin ton t ta xem ( , +, - , *, /, % : T tri sang phi)
13
ng dng Stack: Chuyn biu thc
t trung t sang hu t
V d: Chuyn biu thc 7*8-(2+3) sang hu t
Biu thc trung t Stack S Biu thc hu t
7*8-(2+3)
*8-(2+3)
8-(2+3)
7
7
7 8
14
ng dng Stack: Chuyn biu thc
t trung t sang hu t
V d: Chuyn biu thc 7*8-(2+3) sang hu t
Biu thc trung t Stack S Biu thc hu t
-(2+3)
(2+3)
2+3)
7 8 *
7 8 *
7 8 * 2
15
ng dng Stack: Chuyn biu thc
t trung t sang hu t
V d: Chuyn biu thc 7*8-(2+3) sang hu t
Biu thc trung t Stack S Biu thc hu t
+3)
3)
7 8 * 2
7 8 * 2 3
16
ng dng Stack: Chuyn biu thc
t trung t sang hu t
V d: Chuyn biu thc 7*8-(2+3) sang hu t
Biu thc trung t Stack S Biu thc hu t
)
7 8 * 2 3 +
7 8 * 2 3 +
7 8 * 2 3 + -
17
ng dng Stack: nh gi biu thc
dng hu t
Thut ton
1. Khi to ngn xp rng
2. Lp li cng vic sau cho n khi kt thc biu thc
- c phn t tip theo trong biu thc
- Nu phn t l ton hng: a n vo S
- Ngc li (l ton t)
- Ly t nh S hai ton hng
- Thc hin php ton t vi 2 ton hng theo th
t ngc li.
- a kt qu va tnh tr li S
3. Kt thc biu thc th gi tr biu thc l gi tr nt nh.
18
Reverse Polish Calculator V d
Ban u
Tnh ton biu thc: 3 5 + 2 * =
Ton t ?
Nhp vo 3
3
Ton t ?
Nhp vo 5
3
5
Ton t +
Ly ra 5 v 3
Tnh 3 + 5 => 8
3
5
y 8 vo
8
Ton t *
Ly ra 2 v 8
Tnh 8 * 2 => 16
8
y vo 16
16
Ton t =
In ra 16
16
Ton t ?
Nhp vo 2
8
2 2
16

You might also like