You are on page 1of 45

CHNG 4

STACK v QUEUE
(6 tit)

GV: Thn Vn S

Chng 4- Stack v Queue

slide 1/45

MC TIU
Sau chng ny bn c th:
Gii thch cu trc v cch lm vic ca stack
Bit s dng cu trc stack gii mt s bi
ton
Gii thch cu trc v cch lm vic ca queue
Bit s dng cu trc queue gii mt s bi
ton
GV: Thn Vn S

Chng 4- Stack v Queue

slide 2/45

NI DUNG
n tp.
4.1- Gii thiu
4.2- Chng-Stack.
4.3- Minh ha v s dng stack
4.4- Hng i - Queue
4.5- S dng queue
Tm tt.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 3/45

n tp
Tm kim l qua trnh da trn mt cht thng tin
(kho tm kim) c xc nh v tr c thng
tin cn tm trong mt nhm tr.
Hai gii thut tm kim: Tm kim tuyn tnh v
tm kim nh phn.
Tm kim tun t c th dng cho mt nhm tr
bt k.
Tm kim nh phn ch dng cho nhm tr c
th t.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 4/45

n tp
Sp xp l qa trnh ti b tr cc phn t trong
mt nhm tr theo mt c ch so snh no .
C ch selection sort: tm 1 tr nh nht trong
nhm tr cn phi sp xp a v u nhm
ny.
C ch Bubble sort: Hon chuyn dn cc tr nh
di ln pha trn.
C ch Insertion sort: Ly 1 tr pha sau chn vo
v tr thch hp trong nhm tr c th t pha
trc

GV: Thn Vn S

Chng 4- Stack v Queue

slide 5/45

4.1- Gii thiu


Mng thng thng cho php truy xut bt
k phn t no Khng hn ch truy cp.
C nhng danh sch hn ch cch truy cp.
Chng(stack) a ch cho php truy cp 1
chiu
Hng i khi mua v l mt danh sch hn
ch cch truy cp.
GV: Thn Vn S

Chng 4- Stack v Queue

slide 6/45

Gii thiu
Chng (stack)
Khi y

C ch:

Last In First Out


LIFO

Thm vo
GV: Thn Vn S

Ly ra
Chng 4- Stack v Queue

slide 7/45

Gii thiu
Queue- Hng i

GV: Thn Vn S

Chng 4- Stack v Queue

slide 8/45

Gii thiu
Queue- Hng i

Hng y

C ch: Vo trc ra trc


First In First Out- FIFO
GV: Thn Vn S

Chng 4- Stack v Queue

slide 9/45

4.2- Stack
M t stack
Khi to 1 stack
Kim tra stack trng
Kim tra stack y
Thm 1 phn t vo stack
Ly phn t nh stack ra

GV: Thn Vn S

Chng 4- Stack v Queue

slide 10/45

4.2.1- M t Stack bng mng


Stack cha
mt nhm
phn t kiu
no (T)
mng

31

1000

...

...

Mng chim
dng b nh
bao nhiu?
2
7
9
5

Ti 1 thi
im, v tr
trn cng l v
tr no?

T* ar

1000

int maxSize 32

int top 3

K thut
template
cho php
nh ngha
1 tn gi
cho 1 kiu
d liu
tru
tng. Khi
s dng s
n nh
kiu c th

template <class T>


struct STACK
{ int maxSize;
T* ar;
int top;
};

B nh
GV: Thn Vn S

Chng 4- Stack v Queue

slide 11/45

4.2.2- Tc v khi to (Init) 1 stack vi MazSize phn t


template <class T>
void Init (STACK <T> & St, int MaxSize=32)
{ if (MaxSize<=0) MaxSize=32;
St.maxSize= MaxSize;
St.ar = new T[St.maxSize];
St.top=-1;
}

31
......

......

1
1000

C++ cho php nh ngha tr mc nh cho tham s


Khi to stack
bao nhiu
phn t ?
Th d: 32

T* ar
int maxSize

int top

St

T* ar

1000

int maxSize 32

int top -1

St

Cha c phn t no v 0 l v tr hp l
(ch s u ca mng) nn chon -1
GV: Thn Vn S

Chng 4- Stack v Queue

slide 12/45

4.2.3- Kim tra stack trng (Empty)?


Stack trng l stack khng
phn t top<0
template <class T>
int Empty(STACK<T> St)
{ return St.top<0;
}

31

......

......
1

1000

T* ar

1000

int maxSize 32

int top -1

GV: Thn Vn S

Chng 4- Stack v Queue

St

slide 13/45

4.2.4- Kim tra stack y (Full)?


Stack y khi ch s nh
stack l maxSize-1

Full

31

......

......

1000

template <class T>


int Full(STACK<T> St)
{ return St.top==(St.maxSize-1);
}

T* ar

1000

int maxSize 32

int top 31

St

X
GV: Thn Vn S

Chng 4- Stack v Queue

slide 14/45

4.2.5- Thm 1 phn t vo stack (Push)?


Ch thm vo c khi stack cha
y Tr tr v m t rng c
thm vo c hay khng?

31

......
1000

template <class T>


int Push (T ele, STACK<T>& St)
{ if (Full(St)) return 0;
St.ar[++(St.top)] = ele;
return 1;
}

GV: Thn Vn S

Chng 4- Stack v Queue

T* ar

1000

int maxSize 32

int top 1
2

St

ele

slide 15/45

4.2.6- Ly phn t nh stack (Pop)?


Ch ly ra c khi stack khng
trng Tr tr v m t rng c ly
ra c hay khng?

31

1000

template <class T>


int Pop (STACK<T>& St, T& ele)
{ if (Empty(St)) return 0;
ele= St.ar[St.top--];
return 1;
}

T* ar

......

1000

int maxSize 32

int top 2
1

St
ele

GV: Thn Vn S

Chng 4- Stack v Queue

slide 16/45

Ci t m hnh cu trc stack v tc v trn stack


nh ngha cu
trc STACK cng
vi cc thao tc
trn STACK trong
file.h. Khi no cn
cu trc ny th
include vo
file.cpp
Dng k thut
template ca C++
to ra STACK
c d liu l cc
phn t c kiu
bt k

GV: Thn Vn S

// stack.h
#ifndef _STACK_H_
#define _STACK_H_
#include<string.h>
template <class T>
struct STACK
{ int maxSize;
T* ar;
int top;
};
template <class T>
void Init (STACK <T> & St, int
MaxSize=32)
{ if (MaxSize<=0) MaxSize=32;
St.maxSize= MaxSize;
St.ar = new T[St.maxSize];
St.top=-1;
}
Chng 4- Stack v Queue

Khai bo 1 kiu
template( mu) gi
l T

Nu 1 hm c tham
s/ d liu thuc
kiu template th
trc MI hin
thc hm phi khai
bo li kiu
template
tham s phi ch
nh c kiu
template

slide 17/45

Ci t m hnh cu trc stack v tc v trn stack


template <class T>
int Pop (STACK<T>& St, T& ele)
{ if (Empty(St)) return 0;
memcpy(&ele,&(St.ar[St.top--]),sizeof(ele));
return 1;
}

template <class T>


int Empty(STACK<T> St)
{ return St.top<0;
}
template <class T>
int Full(STACK<T> St)
#endif
{ return St.top== (St.maxSize -1);
}
template <class T>
int Push (T ele, STACK<T>& St)
{ if (Full(St)) return 0;
memcpy(&(St.ar[++(St.top)]),&ele, sizeof(ele));
return 1;
}

GV: Thn Vn S

Chng 4- Stack v Queue

Dng hm memcpy
sao chp tr
thay v php gn
cho php phn t
ca stack c th
l chui

slide 18/45

4.3- Mt s bi ton dng stack

GV: Thn Vn S

Chng 4- Stack v Queue

slide 19/45

4.3.1-Bi ton i s
Nhp 1 s long ( th d nhp n=13) v c s (th d
CoSo=2) , xut biu din ca s theo c s ny.
13

1
GV: Thn Vn S

0
1

1
0
1

Ngng
chia

1
1
0
1

1
1
0
1

Chng 4- Stack v Queue

Ly ra

slide 20/45

Ch bin dch
khi file.cpp
ang hin
hnh- Khng
bin dch
file.h

GV: Thn Vn S

Chng 4- Stack v Queue

slide 21/45

4.3.2- Bi ton o chui S


Chui nhp: qwert Chui xut: trewq
Th vin string.h c hm strrev (string reverse) lm
iu ny.
C th t xy dng o chui bng stack cc k t
q

while (!Empty(St)

{ char c;

Pop(St,c);

Init(St,100);
int L= strlen (S);
for (i=0;i<L;i++)
Push( S[i],St);
GV: Thn Vn S

t
r
e
w
q
Chng 4- Stack v Queue

printf(%c,c);
}

slide 22/45

4.3.3-Bi ton tnh tr biu thc dng hu t


Lewinski chng minh rng mi biu thc
u c th vit di dng hu t (postfix
notation, ton t t sau ton hng) v tnh
ton t tri sang phi.
Th d: (3+5)*2 3 5+2* Ly 3 vi 5 cng
nhau ri ly 2 nhn vo.
Th d ((3+5)*2)3 3 5+2*3$ vi $ l k
hiu ca ton t ly tha (do ta chn).
Th d: ((3*4)+(5*6)+(7*8))*3
3 4*5 6*+7 8*+3*
GV: Thn Vn S

Chng 4- Stack v Queue

slide 23/45

Bi ton tnh tr biu thc dng hu t


M t biu thc hu t: Chui k s v ton t
phn cch cc ton hng, nn dng cp
mc d truy xut 1 ton hng trong chui.
Nh vy, c th nhp biu thc s thc v c
s m.
Th d: (-3.5)(4.7)+(7.2)*(-5.6)* m t
cho
((-3.5)+(4.7))*(7.2)*(-5.6)
c 1 ton hng l c 1 chui con t mc
m n mc ng, i chui s ny thnh s:
Th d: (-3.5) -3.5 -3.5
GV: Thn Vn S

Chng 4- Stack v Queue

slide 24/45

Bi ton tnh tr biu thc dng hu t...


Cch thc thi:
Dng trung t : ((3*4)+(5*6))*3
Dng hu t (chui nhp):

Lun lun thc


thi 1 php ton vi
2 ton hng ly
t Stack

(3)(4)*(5)(6)*+(3)*
3 4 5 6
3 4 5 6

3
3

12
4
3
GV: Thn Vn S

12 30

126

42

30
6
5
12

42 3

30
12

Chng 4- Stack v Queue

3
42

Xong
slide 25/45

Bi ton tnh tr biu thc dng hu t...


Tc v kim tra 1 k t c l ton t?
Khi duyt biu thc, nu l ton t th
ly 2 tr t stack ra tnh ton. Ngc li
ly ton hng t biu thc ri a vo stack.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 26/45

Bi ton tnh tr biu thc dng hu t...


Tc v ly 1 ton hng t v tr th i trong biu thc.

Biu thc

(-3.5)(4.7)+(7.2)(-5.6)**
i=6
i= 7 j=9
t=7,8,9,10

S = 4.7

4.7

i=11

GV: Thn Vn S

Chng 4- Stack v Queue

slide 27/45

Bi ton tnh tr biu thc dng hu t...


Tc v tnh tr 1 php ton

GV: Thn Vn S

Chng 4- Stack v Queue

slide 28/45

Bi ton tnh tr biu thc dng hu t...


Tc v tnh tr c biu thc

Ton hng 2
trn, ton hng 1
di trong stack

GV: Thn Vn S

Chng 4- Stack v Queue

slide 29/45

Bi ton tnh tr biu thc dng hu t...

Hm main

Nu mun nhp biu thc t bn phm th nhp


bng tc v gets(BieuThuc);

Nh nhp ng dng v chng trnh khng kim


tra biu thc c ng dng hay khng?
GV: Thn Vn S

Chng 4- Stack v Queue

slide 30/45

4.3.4-Bi ton tnh tr biu thc dng tin t


Biu thc tin t (prefix notation) c Jan Lukasiewicz, mt
nh logic hc ngi Balan gii thiu nm 1929, nn cn gi l
dng biu din Balan ca biu thc : (a+b)*(cd) *+ab-cd.
y chnh l dng vit ngc ca postfix notation.
((3-5)*2)3 35-2*3$ (dng hu t)
$3*2-35 (dng tin t)
Vit chng trnh tnh tr ca biu thc tin t.
Gi : Tng t bi ton tnh tr
ca biu thc hu t, ch khc l
phi xt chui t sau ra trc.

GV: Thn Vn S

Chng 4- Stack v Queue

T tr li

slide 31/45

4.4- Queue- Hng i


M t hng i
Khi to 1 hng i
Kim tra hng trng
Kim tra hng y
Thm 1 phn t vo hng
Ly phn t u hng ra.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 32/45

4.4.1- M t hng i
M t hng i: Mng 1 chiu

V tr ly ra
lun l 0
( u hng
i)

GV: Thn Vn S

V tr s thm
phn t mi
(bin rear ui)

Chng 4- Stack v Queue

slide 33/45

4.4.2- Khi to hng i vi MaxSize phn t


maxSize-1

1000

int maxSize

Khi to vi
MaxSize =32
phn t

maxSize 32

T* ar

int rear

GV: Thn Vn S

ar

Chng 4- Stack v Queue

rear

1000

slide 34/45

4.4.3- Kim tra hng c trng?


maxSize-1

1000

maxSize 32
ar

GV: Thn Vn S

Chng 4- Stack v Queue

rear

1000

slide 35/45

4.4.4- Kim tra hng c y?


120
....
....
....
7
5

1000

31

maxSize 32
ar

GV: Thn Vn S

Chng 4- Stack v Queue

rear

1000

32

slide 36/45

4.4.5- Thm 1 phn t vo hng


31

7
5

1000

1
0

maxSize 32
ar

rear

Q
ele

GV: Thn Vn S

Chng 4- Stack v Queue

1000

rear

slide 37/45

4.4.6- Ly 1 phn t ra khi hng


120
....
....
9
7
5

31

2
1
0

maxSize 32
ar

rear

GV: Thn Vn S

31

Q
ele

Chng 4- Stack v Queue

rear

1000

32

slide 38/45

S dng Queue
Qun l in n.
Qun l qa trnh ca h iu hnh.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 39/45

Th d 1: Queue cc phn t int

GV: Thn Vn S

Chng 4- Stack v Queue

slide 40/45

Th d 2: Queue in n

Tn my
S trang cn in

GV: Thn Vn S

Chng 4- Stack v Queue

slide 41/45

Bi tp v queue.
Mi my trong mi trng Internet c nhn din bng mt
a ch IP (Internet Protocol Address) gm 4 byte. M t 4
byte ny theo dng: 202.168.9.0 .Ba byte u ca IP address
dng nhn dng mng m my ny c kt ni (v Internet l
mng ca cc mng), byte cui cng dng nhn dng my
tnh ny trong mng.
Mt my client c th truy xut t server 1 ti nguyn (1 file).
Mt server nhn nhiu yu cu t client.
Vit chng trnh cho bit server s ln lt phc v client
theo th t no v ti nguyn no.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 42/45

Tm tt
Stack: Cu trc danh sch cha 1 nhm cc phn
t lm vic theo c ch vo sau ra trc (Last In
First Out).

Queue: Cu trc danh sch cha 1 nhm cc phn


t lm vic theo c ch vo trc ra trc (First In
First Out).
Cc tc v trn Stack v Queue: Khi to, Kim tra
trng, kim tra y, thm 1 phn t, Ly 1 phn t
ra.
C th dng mng m t danh sch cc phn t
ca stack v queue.
GV: Thn Vn S

Chng 4- Stack v Queue

slide 43/45

Tm tt
Dng k thut template ca C++ gip hin thc
cu trc mc khi qut vi khai bo template
<class T>, T l tn gi do ta t t
Phi khai bo template <class T>li trc mi hin
thc hm c dng kiu tru tng T ny.
Khi gii bi ton c th. T s l mt kiu d liu
c th. Trnh bin dch s p dng kiu d liu c
th cho template ny.

GV: Thn Vn S

Chng 4- Stack v Queue

slide 44/45

Xin cm n

GV: Thn Vn S

Chng 4- Stack v Queue

slide 45/45

You might also like