Вы находитесь на странице: 1из 87

Chng 5:

NGN XP HNG I
(Stack - Queue)
1
Chng 5: Ngn xp Hng i
Ni dung
Ngn xp
Hng i
2
Ngn xp (Stack)
Khi nim Stack
Cc thao tc trn Stack
Hin thc Stack
ng dng ca Stack
Hng i
Chng 5: Ngn xp Hng i
Stack - Khi nim
Stack l mt danh sch m cc i tng c thm vo v
ly ra ch mt u ca danh sch (A stack is simply a list of
elements with insertions and deletions permitted at one end)
V th, vic thm mt i tng vo Stack hoc ly mt i
tng ra khi Stack c thc hin theo c ch LIFO (Last In
First Out - Vo sau ra trc)
Cc i tng c th c thm vo Stack bt k lc no
nhng ch c i tng thm vo sau cng mi c php
ly ra khi Stack
3
Chng 5: Ngn xp Hng i
Stack Cc thao tc
Stack h tr 2 thao tc chnh:
Push: Thao tc thm 1 i tng vo Stack
Pop: Thao tc ly 1 i tng ra khi Stack
V d:
5 3 2 - - 4
4
Chng 5: Ngn xp Hng i
Stack Cc thao tc
5
Stack cng h tr mt s thao tc khc:
isEmpty(): Kim tra xem Stack c rng khng
Top(): Tr v gi tr ca phn t nm u Stack m khng
hy n khi Stack. Nu Stack rng th li s xy ra

Chng 5: Ngn xp Hng i
Stack Hin thc Stack
(Implementation of a Stack)
6
Mng 1 chiu Danh sch LK
Kch thc stack
khi qu thiu, lc
qu tha
Cp pht
ng!
Push / Pop hi
phc tp
Push/Pop
kh d
dng
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
C th to mt Stack bng cch khai bo mt mng 1 chiu
vi kch thc ti a l N (v d: N =1000)
Stack c th cha ti a N phn t nh s t 0 n N-1
Phn t nm nh Stack s c ch s l top (lc trong
Stack ang cha top+1 phn t)
Nh vy, khai bo mt Stack, ta cn mt mng 1 chiu list,
v 1 bin s nguyn top cho bit ch s ca nh Stack:
struct Stack {
DataType list[N];
int top;
};
7
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Lnh top = 0 s to ra mt Stack S rng
Gi tr ca top s cho bit s phn t hin hnh c trong Stack
Khi ci t bng mng 1 chiu, Stack b gii hn kch thc
nn cn xy dng thm mt thao tc ph cho Stack:
isFull(): Kim tra xem Stack c y cha, v khi Stack y,
vic gi n hm Push() s pht sinh ra li
8
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
9
Khi to Stack:

void Init (Stack &s)
{
s.top = 0;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Kim tra Stack rng hay khng:
10
int isEmpty(Stack s)
{
if (s.top==0)
return 1; // stack rng
else
return 0;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Kim tra Stack y hay khng:
11
int isFull(Stack s)
{
if (s.top>=N)
return 1;
else
return 0;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Thm mt phn t x vo Stack
12
void Push (Stack &s, DataType x)
{
if (!isFull(s)) // stack cha y
{
s.list[s.top]=x;
s.top++;
}
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Trch thng tin v hu phn t nh Stack
13
DataType Pop(Stack &s)
{
DataType x;
if (!Empty(s)) // stack khc rng
{
x = s.list[s.top];
s.top--;
}
return x;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng mng
(Implementation of a Stack using Array)
Nhn xt:
Cc thao tc trn u lm vic vi chi ph O(1)
Vic ci t Stack thng qua mng mt chiu n gin v
kh hiu qu
Tuy nhin, hn ch ln nht ca phng n ci t ny l
gii hn v kch thc ca Stack (N)
Gi tr ca N c th qu nh so vi nhu cu thc t hoc qu ln s
lm lng ph b nh
14
Chng 5: Ngn xp Hng i
Hin thc Stack dng DSLK
(Implementation of a Stack using Linked List)
C th to mt Stack bng cch s dng mt danh sch lin
kt n (DSLK)
Khai bo cc cu trc:

15
struct Node
{
DataType data;
Node *pNext;
};
struct Stack
{
Node *top;
};
Chng 5: Ngn xp Hng i
Hin thc Stack dng DSLK
(Implementation of a Stack using Linked List)
Khi to Stack:

16
void Init(Stack &t)
{
t.top = NULL;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng DSLK
(Implementation of a Stack using Linked List)
Kim tra xem Stack c rng khng:
17
int isEmpty (Stack t)
{
return t.top == NULL ? 1 : 0;
}
Chng 5: Ngn xp Hng i
Hin thc Stack dng DSLK
(Implementation of a Stack using Linked List)
Thm mt phn t x vo Stack:

18
void Push (Stack &t, DataType x)
{
Node *p = new Node;
if (p==NULL) { cout<<Khong du bo nho; return; }
p->data = x;
p->pNext= NULL;
if (t.top==NULL) // if (Empty(l))
t.top = p;
else{
p->pNext = t.top;
t.top = p;
}
}
Thm phn t vo u danh sch
Chng 5: Ngn xp Hng i
Hin thc Stack dng DSLK
(Implementation of a Stack Using Linked List)
Trch thng tin v hy phn t nh Stack:
19
DataType Pop (Stack &t)
{
if (t.top==NULL){
cout<<Stack rng; return NULLDATA;}
DataType x;
Node *p = t.top;
p->pNext = NULL;
t.top = t.top->pNext;
x = p->data;
delete p;
return x;
}
Ly v xa phn t u danh sch
Chng 5: Ngn xp Hng i
Stack - ng dng
Stack thch hp lu tr cc loi d liu m trnh t truy xut
ngc vi trnh t lu tr
Mt s ng dng ca Stack:
Trong trnh bin dch (thng dch), khi thc hin cc th tc,
Stack c s dng lu mi trng ca cc th tc
Lu d liu khi gii mt s bi ton ca l thuyt th (nh tm
ng i)
Kh qui
ng dng trong cc bi ton tnh ton biu thc

20
Chng 5: Ngn xp Hng i
Stack - ng dng
V d: th tc Quick_Sort dng Stack kh qui:
Bc 1. l=1; r=n;
Bc 2. Chn phn t gia x=a[(l+r) / 2]
Bc 3. Phn hoch (l, r) thnh (l1, r1) v (l2, r2) bng cch xt:
y thuc (l1, r1) nu yx
y thuc (l2, r2) ngc li
Bc 4. Nu phn hoch (l2, r2) c nhiu hn 1 phn t th thc hin:
Ct (l2, r2) vo Stack
Nu (l1, r1) c nhiu hn 1 phn t th thc hin:
l = l1
r = r1
Quay ln bc 2
Ngc li
Ly (l, r) ra khi Stack, nu Stack khc rng th quay ln bc 2, ngc li
th dng
21
Chng 5: Ngn xp Hng i
22
Stack - ng dng
57 2
1 28 2
0 14 2
0 7 2
1 3 2
1 1 2
1 0
57 = 111001
2
V d: 57 = ???
2
Bi tp: i s t c s 10 sang c s x
Chng 5: Ngn xp Hng i
void main()
{
Stack s;
int coso, so, sodu;
Init(s);
// Nhp s cn chuyn vo so
// Nhp c s cn chuyn vo coso
while (so != 0)
{
sodu = so % coso;
Push (s, sodu); // push so du vao stack
so = so/coso;
}
cout<<"Kt qu: ";
while (!isEmpty(s))
cout<<Pop(s); // pop so du ra khoi stack
}
23
Chng 5: Ngn xp Hng i
Stack - ng dng
Thut ton Ba Lan ngc
(Reverse Polish Notation RPN)
nh ngha RPN:
Biu thc ton hc trong cc ton t c vit sau ton
hng v khng dng du ngoc
Pht minh bi Jan Lukasiewics mt nh khoa hc Ba Lan
vo nhng nm 1950

24
Chng 5: Ngn xp Hng i
RPN
25

Infix : ton t vit gia ton hng
Postfix (RPN): ton t vit sau ton hng
Prefix : ton t vit trc ton hng

Examples:
INFIX RPN (POSTFIX) PREFIX
A + B
A * B + C
A * (B + C)
A - (B - (C - D))
A - B - C - D
A B +
+ A B
A B * C +
A B C + *
A B C D - - -
A B - C - D -
+ * A B C
* A + B C
- A - B - C D
- - - A B C D
Lng gi biu thc RPN
26
K thut gch di:
1. Duyt t tri sang phi ca biu thc cho n khi gp ton t.
2. Gch di 2 ton hng ngay trc ton t v kt hp chng
bng ton t trn
3. Lp i lp li cho n ht biu thc.
V d 2*((3+4)-(5-6))
2 3 4 + 5 6 - - *
2 8 *
2 8 *
16
2 7 5 6 - - *
2 7 5 6 - - *
2 7 -1 - *
2 7 -1 - *
2 3 4 + 5 6 - - *
Chng 5: Ngn xp Hng i
Thut ton tnh gi tr
1. Khi to Stack rng (cha hng hoc bin).
2. Lp cho n khi kt thc biu thc:
c 01 phn t ca biu thc (hng, bin, php ton).
Nu phn t l hng hay bin: a vo Stack.
Ngc li:
Ly ra 02 phn t ca Stack.
p dng php ton cho 02 phn t va ly ra.
a kt qu vo Stack.
3. Gi tr ca biu thc chnh l phn t cui cng
ca Stack.
27
2*((3+4)-(5-6))
28
Example: 2 3 4 + 5 6 - - *
Push 2
Push 3
Push 4
Read +
Pop 4, Pop 3,
Push 7
Push 5
Push 6
Read -
Pop 6, Pop 5,
Push -1
Read -
Pop -1, Pop 7,
Push 8
Read *
Pop 8, Pop 2,
Push 16
2
3
4
2
7
5
6
2
7
-1
2
8
16
3 + 4 = 7
5 - 6 = -1
7 - -1 = 8
2 * 8 = 16
Chng 5: Ngn xp Hng i
Chuyn infix thnh postfix
1. Khi to Stack rng (cha cc php ton).
2. Lp cho n khi kt thc biu thc:
c 01 phn t ca biu thc
(01 phn t c th l hng, bin,php ton, )
hay ( ).
Nu phn t l:
2.1 (: a vo Stack.
2.2 ): ly cc phn t ca Stack ra
cho n khi gp ( trong Stack.

29
Chng 5: Ngn xp Hng i
Chuyn infix thnh postfix
2.3 Mt php ton: + - * /
Nu Stack rng: a vo Stack.
Nu Stack khc rng v php
ton c u tin cao hn phn
t u Stack: a vo Stack.
Nu Stack khc rng v php
ton c u tin thp hn hoc
bng phn t u Stack:
- ly phn t t Stack ra;
- sau lp li vic so snh vi
phn t u Stack.
30
Chng 5: Ngn xp Hng i
Chuyn infix thnh postfix

2.4 Hng hoc bin: a vo kt qu.
3. Ly ht tt c cc phn t ca Stack ra.

31
Chng 5: Ngn xp Hng i
u tin
+ , _ 1
*, / 2
^ 3

32
33
(
-
/
Example:
Push ( Output
Display A
Push +
Display B
Push *
Display C
Read )
Pop *, Display *,
Pop +, Display +, Pop (
Push /
Push (
Display D
Push -
Push (
Display E
Push -
Display F
Read )
Pop -, Display -, Pop (
Read )
Pop -, Display -, Pop (
Pop /, Display /
(
+
*
(
+
(
-
(
-
(
(A+B*C)/(D-(E-F))
A
ABC
AB
ABC*
ABC*+
ABC*+D
ABC*+DE
ABC*+DEF
ABC*+DEF-
ABC*+DEF--
(A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F))
/
/
ABC*+DEF--/
(A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F)) (A+B*C)/(D-(E-F))
Chng 5: Ngn xp Hng i
V d
A + (B*C - (D/E^F) * G) * H

S=[];

KQ=
34
Chng 5: Ngn xp Hng i
V d
A + (B*C - (D/E^F) * G) * H



35
S=[];
KQ=

S=[+];
KQ=A

A + (B*C - (D/E^F) * G) * H A + (B*C - (D/E^F) * G) * H
Chng 5: Ngn xp Hng i
V d
36
S=[+];
KQ=A

A + (B*C - (D/E^F) * G) * H A + (B*C - (D/E^F) * G) * H A + (B*C - (D/E^F) * G) * H A + (B*C - (D/E^F) * G) * H A + (B*C - (D/E^F) * G) * H
S=[+(]; S=[+(*];
KQ=AB

KQ=ABC

Chng 5: Ngn xp Hng i
V d
37
A + (B*C - (D/E^F) * G) * H
S=[+(*];
KQ=ABC

S=[+(];
KQ=ABC*

S=[+(-];
Chng 5: Ngn xp Hng i
V d
38
A + (B*C - (D/E^F) * G) * H
KQ=ABC*

S=[+(-]; S=[+(-(];
Chng 5: Ngn xp Hng i
V d
39
A + (B*C - (D/E^F) * G) * H
KQ=ABC*

S=[+(-(];
KQ=ABC*D

Chng 5: Ngn xp Hng i
V d
40
A + (B*C - (D/E^F) * G) * H
KQ=ABC*D

S=[+(-(]; S=[+(-(/];
Chng 5: Ngn xp Hng i
V d
41
A + (B*C - (D/E^F) * G) * H
KQ=ABC*D

S=[+(-(/];
KQ=ABC*DE

Chng 5: Ngn xp Hng i
V d
42
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DE

S=[+(-(/]; S=[+(-(/^];
Chng 5: Ngn xp Hng i
V d
43
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DE

S=[+(-(/^];
KQ=ABC*DEF

Chng 5: Ngn xp Hng i
V d
44
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DEF

S=[+(-(/^]; S=[+(-(/];
KQ=ABC*DEF^/

S=[+(-(]; S=[+(-];
KQ=ABC*DEF^

Chng 5: Ngn xp Hng i
V d
45
A + (B*C - (D/E^F) * G) * H
S=[+(-];
KQ=ABC*DEF^/

S=[+(-*];
Chng 5: Ngn xp Hng i
V d
46
A + (B*C - (D/E^F) * G) * H
S=[+(-*];
KQ=ABC*DEF^/

KQ=ABC*DEF^/G

Chng 5: Ngn xp Hng i
V d
47
A + (B*C - (D/E^F) * G) * H
S=[+(-*];
KQ=ABC*DEF^/G

S=[+(-];
KQ=ABC*DEF^/G*

KQ=ABC*DEF^/G*-

S=[+(]; S=[+];
Chng 5: Ngn xp Hng i
V d
48
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DEF^/G*-

S=[+]; S=[+*];
Chng 5: Ngn xp Hng i
V d
49
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DEF^/G*-

S=[+*];
KQ=ABC*DEF^/G*-H

Chng 5: Ngn xp Hng i
V d
50
A + (B*C - (D/E^F) * G) * H
KQ=ABC*DEF^/G*-H

S=[+*]; S=[];
KQ=ABC*DEF^/G*-H*+

KQ=ABC*DEF^/G*-H*+

Chng 5: Ngn xp Hng i
Ni dung
Ngn xp (Stack)
Hng i (Queue)
Khi nim Queue
Cc thao tc trn Queue
Hin thc Queue
ng dng Queue

51
Chng 5: Ngn xp Hng i
Queue - Khi nim
Queue l mt danh sch m cc i tng c thm vo
mt u ca danh sch v ly ra mt u kia ca danh sch
(A queue is also a list of elements with insertions permitted at one end and
deletions permitted from the other end)
Vic thm mt i tng vo Queue lun din ra cui
Queue v vic ly mt i tng ra khi Queue lun din ra
u Queue
V th, vic thm mt i tng vo Queue hoc ly mt i
tng ra khi Queue c thc hin theo c ch FIFO (First
In First Out - Vo trc ra trc)
52
Chng 5: Ngn xp Hng i
Queue - Khi nim
53
Imaging
Chng 5: Ngn xp Hng i
Queue Cc thao tc
Hng i h tr cc thao tc:
EnQueue(): Thm i tng vo cui (rear) Queue
DeQueue(): Ly i tng u (front) Queue ra khi Queue
V d:
5 3 2 - - 4







54
Front Rear
Chng 5: Ngn xp Hng i
Queue Cc thao tc
Queue cn h tr cc thao tc:
isEmpty(): Kim tra xem hng i c rng khng
Front(): Tr v gi tr ca phn t nm u hng i m
khng hy n. Nu hng i rng th li s xy ra
55
Chng 5: Ngn xp Hng i
Queue Hin thc Queue
(Implementation of a Queue)
56
Mng 1 chiu Danh sch LK
Kch thc queue
khi qu thiu, lc
qu tha
Cp pht
ng!
EnQueue/DeQueue
hi phc tp
EnQueue/DeQueue
kh d dng
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
57
C th to mt Queue bng cch s dng mt mng 1 chiu
theo kiu xoay vng (coi phn t a
n-1
k vi phn t a
0
)
Hng i cha ti a N phn t
Phn t u hng i s c ch s front
Phn t cui hng i s c ch s rear


The limitation of an array implementation is that the queue cannot
grow and shrink dynamically as per the requirement
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
Dng mng: C xu hng di v cui mng
Hai cch hin thc:
Khi ly mt phn t ra th ng thi di ln mt v tr:




Khi ly mt phn t ra th khng di ln:
58
A B C D B C D B C D E
Ban u Ly ra 1 phn t:
di tt c v trc
trng ch thm vo
Thm vo 1 phn t
A B C D B C D B C D
Ban u Ly ra 1 phn t Thm vo 1 phn t
E
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
Trng thi Queue lc bnh thng:



Trng thi Queue lc xoay vng:
59
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
60
12 1 4 2
A
5
A[0] A[1]
DeQueue(Q)
A[2] A[N-1]
r
f
Cch dng mng 1
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
61
1 4 2 5
A
A[0] A[1]
DeQueue(Q)
A[2] A[N-1]
r
f
Cch dng mng 1
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
62
1 4 2 5
A
A[0] A[1] A[2] A[N-1]
r
f
Cch dng mng 1
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
63
12 1 4 2
A
5
A[0] A[1]
r
A[2] A[N-1]
f
A
A[0] A[1]
r
A[2]
f
Empty queue f=r
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
64
12 1 4 2
A
5
A[0] A[1]
r
DeQueue(Q)
A[2] A[N-1]
f
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
65
1 4 2
A
5
A[0] A[1] A[2] A[N-1]
f
r
DeQueue(Q)
EnQueue(5,Q)
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
66
1 4 2
A
5 5
A[0] A[1] A[2] A[N-1]
f
r
DeQueue(Q)
EnQueue(5,Q)
EnQueue(5,Q)
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
67
1 4 2
A
5 5 5
A[0] A[1] A[2] A[N-1]
f
r
DeQueue(Q)
EnQueue(5,Q)
EnQueue(5,Q)
DeQueue(Q)
DeQueue(Q)
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
68
2
A
5 5 5
A[0] A[1] A[2] A[N-1]
f
r
DeQueue(Q)
EnQueue(5,Q)
EnQueue(5,Q)
DeQueue(Q)
DeQueue(Q)
DeQueue(Q), EnQueue(5,Q), DeQueue(Q),
EnQueue(5,Q),.
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
69

A
5 5 5 5
A[0] A[1]
r
A[2] A[N-1]
f
DeQueue(Q)
EnQueue(5,Q)
EnQueue(5,Q)
DeQueue(Q)
DeQueue(Q)
DeQueue(Q), EnQueue(5,Q), DeQueue(Q),
EnQueue(5,Q),.
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
70
5 5
A
5 5
A[0] A[1]
r
A[2] A[N-1]
f
DeQueue(Q), EnQueue(5,Q), DeQueue(Q),
EnQueue(5,Q),.
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
72
size(Q): if (r >= f) then return (r-f)
else return N-(f-r)
1 4 2
A
5
A[0] A[1] A[2] A[N-1]
f
r
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
73
size(Q): if (r >= f) then return (r-f)
else return N-(f-r)
5 5
A
5 5
A[0] A[1]
r
A[2] A[N-1]
f
Cch dng mng 2
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
74
khai bo mt Queue, ta cn khai bo:
mt mng mt chiu list,
hai bin nguyn front, rear cho bit ch s ca u v cui ca
hng i,
hng s N cho bit kch thc ti a ca Queue
Hng i c th c khai bo c th nh sau:
struct Queue
{
int front, rear;
DataType list[N];
};
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
Do khi ci t bng mng mt chiu, hng i b gii hn kch
thc nn cn xy dng thm mt thao tc ph cho hng i:
isFull(): Kim tra xem hng i c y cha

75
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
76
Khi to Queue:



Kim tra xem Queue c rng khng:

void Init(Queue &q)
{
q.front = q.rear = 0;
}
int isEmpty(Queue q)
{
if (q.front == q.rear == 0)
return 1;
if (q.front == q.rear)
return 1;
return 0;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
77
Kim tra hng i y hay khng:
int isFull(Queue q)
{
if (q.front == 0 && q.rear == N-1)
return 1;
if (q.front == q.rear)
return 1;
return 0;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
78
Thm mt phn t x vo cui Queue:
int EnQueue(Queue &q, DataType x)
{
if (isFull(q))
return 0; // khng thm c v Queue y
q.list[q.rear] = x;
q.rear++;
if (q.rear == N) q.rear=0;
return 1;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
79
Trch, hu phn t u hng i:


DataType DeQueue(Queue &q)
{
if (Empty(q)) return NULLDATA;
DataType t = q.list[q.front];
q.front++;
if (q.front == N) q.front = 0;
return t;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
Xem thng tin ca phn t u Queue:
DataType Front(Queue q)
{
if (isEmpty(q)) return NULLDATA;
return q.list[q.front];
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
81
C th to mt hng i s dng mt DSLK n
Phn t u DSKL (phead) s l phn t u Queue (front),
phn t cui DSKL (ptail) s l phn t cui Queue (rear)
a
1
a
2
a
N-2
a
n-1
u queue
Cui queue
a
0
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
82
Khai bo cc cu trc:
struct Node
{
DataType data;
Node *pNext;
};
struct Queue
{
Node *front, *rear;
};
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
Khi to Queue rng:




Kim tra hng i rng :
83
void Init(Queue &q)
{
q.front = q.rear = NULL;
}
int isEmpty(Queue &q)
{
if (q.front == NULL)
return 1;
else
return 0;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
Thm mt phn t p vo cui Queue:
84
int EnQueue(Queue &q, DataType x)
{
Node *p = new Node;
if (p==NULL) return 0; //Khong du bo nho
p->pNext = NULL;
p->data = x;
if (q.front == NULL) // TH Queue rng
q.front = q.rear = new_node;
else
{
q.rear->pNext = new_node;
q.rear = new_node;
}
return 1;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
Trch v hu phn t u Queue:
85
DataType DeQueue(Queue &q)
{
if (isEmpty(q)) return NULLDATA;
Node *p = q.front;
p->pNext = NULL;
q.front = q.front->pNext;
if (q.front==NULL) q.rear = NULL;
DataType x = p->data;
delete p;
return x;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng mng
(Implementation of a Queue using Array)
Xem thng tin ca phn t u Queue:
DataType Front(Queue q)
{
if (isEmpty(q)) return NULLDATA;
return q.front->data;
}
Chng 5: Ngn xp Hng i
Hin thc Queue dng DSLK
(Implementation of a Queue using Linked List)
87
Nhn xt:
Cc thao tc trn Queue biu din bng danh sch lin kt
lm vic vi chi ph O(1)
Nu khng qun l phn t cui xu, thao tc Dequeue s
c phc tp O(n)
Chng 5: Ngn xp Hng i
Queue - ng dng
88
Queue c th c s dng trong mt s bi ton:
Bi ton sn xut v tiu th (ng dng trong cc h iu hnh
song song)
B m (v d: Nhn phm B m CPU x l)
X l cc lnh trong my tnh (ng dng trong HH, trnh bin
dch), hng i cc tin trnh ch c x l, .

Вам также может понравиться