87
Chương 5: NGĂN XẾP – HÀNG ĐỢI (Stack - Queue) 1

C5 Stack Queue

Embed Size (px)

DESCRIPTION

Stack, Queue

Citation preview

  • Chng 5: NGN XP HNG I(Stack - Queue)*

    Chng 5: Ngn xp Hng i

    Ni dungNgn xpHng i*Ngn xp (Stack)Khi nim StackCc thao tc trn StackHin thc Stackng dng ca StackHng i

    Chng 5: Ngn xp Hng i

    Stack - Khi nimStack 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*

    Chng 5: Ngn xp Hng i

    Stack Cc thao tcStack h tr 2 thao tc chnh:Push: Thao tc thm 1 i tng vo StackPop: Thao tc ly 1 i tng ra khi StackV d:5 3 2 - - 4*

    Chng 5: Ngn xp Hng i

    Stack Cc thao tc*Stack cng h tr mt s thao tc khc:isEmpty(): Kim tra xem Stack c rng khngTop(): 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)*Mng 1 chiuDanh sch LKKch thc stack khi qu thiu, lc qu thaCp pht ng!Push / Pop hi phc tpPush/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-1Phn 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;};*

    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 rngGi tr ca top s cho bit s phn t hin hnh c trong StackKhi 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*

    Chng 5: Ngn xp Hng i

    Hin thc Stack dng mng (Implementation of a Stack using Array)*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:*int isEmpty(Stack s){if (s.top==0)return 1; // stack rngelsereturn 0;}

    Chng 5: Ngn xp Hng i

    Hin thc Stack dng mng (Implementation of a Stack using Array)Kim tra Stack y hay khng:*int isFull(Stack s){if (s.top>=N)return 1;elsereturn 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*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*DataType Pop(Stack &s){ DataType x;if (!Empty(s)) // stack khc rng{s.top--;x = s.list[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 quTuy 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*

    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:

    *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:*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: *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:

    *void Push (Stack &t, DataType x){Node *p = new Node;if (p==NULL) { coutpNext= 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:*DataType Pop (Stack &t){if (t.top==NULL){coutpNext = NULL;x = p->data;delete p;return x;}Ly v xa phn t u danh sch

    Chng 5: Ngn xp Hng i

    Stack - ng dngStack thch hp lu tr cc loi d liu m trnh t truy xut ngc vi trnh t lu trMt 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 tcLu 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*

    Chng 5: Ngn xp Hng i

    Stack - ng dngV 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 yxy thuc (l2, r2) ngc liBc 4.Nu phn hoch (l2, r2) c nhiu hn 1 phn t th thc hin: Ct (l2, r2) vo StackNu (l1, r1) c nhiu hn 1 phn t th thc hin: l = l1r = r1Quay ln bc 2Ngc liLy (l, r) ra khi Stack, nu Stack khc rng th quay ln bc 2, ngc li th dng*

    Chng 5: Ngn xp Hng i

    *Stack - ng dng572 1 28 2 0 14 2 0 7 2 1 3 2 1 1 2 1 0 57 = 1110012V d: 57 = ???2Bi 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

  • Lng gi biu thc RPN*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 trn3. 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 * 162 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 tr1. 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 cngca Stack.*

  • 2*((3+4)-(5-6))*Example: 2 3 4 + 5 6 - - *Push 2Push 3Push 4Read + Pop 4, Pop 3, Push 7Push 5Push 6Read -Pop 6, Pop 5, Push -1Read - Pop -1, Pop 7, Push 8Read *Pop 8, Pop 2, Push 163 + 4 = 75 - 6 = -17 - -1 = 82 * 8 = 16

    Chng 5: Ngn xp Hng i

    Chuyn infix thnh postfix1. 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.

    *

    Chng 5: Ngn xp Hng i

    Chuyn infix thnh postfix2.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 hocbng phn t u Stack: - ly phn t t Stack ra; - sau lp li vic so snh vi phn t u Stack.*

    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.

    *

    Chng 5: Ngn xp Hng i

    u tin+ , _1*, /2^3

    *

  • *Example:Push (OutputDisplay APush +Display BPush *Display CRead ) Pop *, Display *, Pop +, Display +, Pop ( Push /Push (Display D Push -Push (Display EPush -Display FRead )Pop -, Display -, Pop (Read ) Pop -, Display -, Pop (Pop /, Display / (A+B*C)/(D-(E-F))AABCABABC*ABC*+ABC*+DABC*+DEABC*+DEFABC*+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=*

    Chng 5: Ngn xp Hng i

    V d A + (B*C - (D/E^F) * G) * H

    *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*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) * HS=[+(];S=[+(*];KQ=AB

    KQ=ABC

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HS=[+(*];KQ=ABC

    S=[+(];KQ=ABC*

    S=[+(-];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*

    S=[+(-];S=[+(-(];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*

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

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*D

    S=[+(-(];S=[+(-(/];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*D

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

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DE

    S=[+(-(/];S=[+(-(/^];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DE

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

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DEF

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

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

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HS=[+(-];KQ=ABC*DEF^/

    S=[+(-*];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HS=[+(-*];KQ=ABC*DEF^/

    KQ=ABC*DEF^/G

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HS=[+(-*];KQ=ABC*DEF^/G

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

    KQ=ABC*DEF^/G*-

    S=[+(];S=[+];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DEF^/G*-

    S=[+];S=[+*];

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DEF^/G*-

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

    Chng 5: Ngn xp Hng i

    V d* A + (B*C - (D/E^F) * G) * HKQ=ABC*DEF^/G*-H

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

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

    Chng 5: Ngn xp Hng i

    Ni dungNgn xp (Stack)Hng i (Queue)Khi nim QueueCc thao tc trn QueueHin thc Queueng dng Queue

    *

    Chng 5: Ngn xp Hng i

    Queue - Khi nimQueue 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 QueueV 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)*

    Chng 5: Ngn xp Hng i

    Queue - Khi nim*Imaging

    Chng 5: Ngn xp Hng i

    Queue Cc thao tcHng i h tr cc thao tc:EnQueue(): Thm i tng vo cui (rear) QueueDeQueue(): Ly i tng u (front) Queue ra khi QueueV d:5 3 2 - - 4

    *FrontRear

    Chng 5: Ngn xp Hng i

    Queue Cc thao tcQueue cn h tr cc thao tc:isEmpty(): Kim tra xem hng i c rng khngFront(): Tr v gi tr ca phn t nm u hng i m khng hy n. Nu hng i rng th li s xy ra*

    Chng 5: Ngn xp Hng i

    Queue Hin thc Queue(Implementation of a Queue)*Mng 1 chiuDanh sch LKKch thc queue khi qu thiu, lc qu thaCp pht ng!EnQueue/DeQueue hi phc tpEnQueue/DeQueue kh d dng

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*C th to mt Queue bng cch s dng mt mng 1 chiu theo kiu xoay vng (coi phn t an-1 k vi phn t a0) Hng i cha ti a N phn tPhn t u hng i s c ch s frontPhn 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 mngHai 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:*Ban uLy ra 1 phn t:di tt c v trc trng ch thm voThm vo 1 phn tBan uLy ra 1 phn tThm vo 1 phn tE

    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: *

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*12142A5A[0]A[1]DeQueue(Q)A[2]A[N-1]rfCch dng mng 1

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*1425AA[0]A[1]DeQueue(Q)A[2]A[N-1]rfCch dng mng 1

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*1425AA[0]A[1]A[2]A[N-1]rfCch dng mng 1

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*12142A5A[0]A[1]rA[2]A[N-1]fAA[0]A[1]rA[2]fEmpty queue f=rCch dng mng 2

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*12142A5A[0]A[1]rDeQueue(Q)A[2]A[N-1]fCch dng mng 2

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*142A5A[0]A[1]A[2]A[N-1]frDeQueue(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)*142A55A[0]A[1]A[2]A[N-1]frDeQueue(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)*142A555A[0]A[1]A[2]A[N-1]frDeQueue(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)*2A555A[0]A[1]A[2]A[N-1]frDeQueue(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)* A 5555 A[0]A[1]rA[2]A[N-1]fDeQueue(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)*5 5 A 55A[0]A[1]rA[2]A[N-1]fDeQueue(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)*empty(Q): return (f = r)Front(Q): if empty(Q) then error else return A[f]142A5A[0]A[1]A[2]A[N-1]frCch dng mng 2

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*size(Q): if (r >= f) then return (r-f) else return N-(f-r)142A5A[0]A[1]A[2]A[N-1]frCch dng mng 2

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*size(Q): if (r >= f) then return (r-f) else return N-(f-r)5 5 A 55A[0]A[1]rA[2]A[N-1]fCch dng mng 2

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)* 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 QueueHng 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

    *

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng mng(Implementation of a Queue using Array)*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)*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)*Thm mt phn t x vo cui Queue: int EnQueue(Queue &q, DataType x){if (isFull(q)) return 0; // khng thm c v Queue yq.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)*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:DataTypeFront(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)*C th to mt hng i s dng mt DSLK nPhn t u DSKL (phead) s l phn t u Queue (front), phn t cui DSKL (ptail) s l phn t cui Queue (rear)

    Chng 5: Ngn xp Hng i

    Hin thc Queue dng DSLK(Implementation of a Queue using Linked List)*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 : *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:*int EnQueue(Queue &q, DataType x){Node *p = new Node;if (p==NULL) return 0; //Khong du bo nhop->pNext = NULL;p->data = x;if (q.front == NULL)// TH Queue rngq.front = q.rear = p;else{q.rear->pNext = p;q.rear = p;}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: *DataType DeQueue(Queue &q){if (isEmpty(q)) return NULLDATA;Node *p = q.front;q.front = q.front->pNext;p->pNext = NULL;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)*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 Enqueue s c phc tp O(n)

    Chng 5: Ngn xp Hng i

    Queue - ng dng*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, .

    *insertions and deletions permitted at one end

    *Vic ci t stack thng qua mng mt chiu n gin vkhhiu qu.Tuy nhin, hn ch ln nht ca phng n ci t ny lgii hn v kch thc ca stack N. Gitr ca N c th qunh so vi nhu cu thc t hoc quln s lm lng ph b nh.

    *****

    *Trong tin hc, CTDL hng i c nhiu ng dng: kh qui, t chc lu vt cc qu trnh tm kim theo chiu rng v quay lui, vt cn, t chc qun l v phn phi tin trnh trong cc h iu hnh, t chc b m bn phm,

    *Vic ci t stack thng qua mng mt chiu n gin vkhhiu qu.Tuy nhin, hn ch ln nht ca phng n ci t ny lgii hn v kch thc ca stack N. Gitr ca N c th qunh so vi nhu cu thc t hoc quln s lm lng ph b nh.

    **Ch di hng v u khi cui hng khng cn ch*Ngoi ra, khi dng mng biu din hng i, cn dng mt gi tr c bit, k hiu l NULLDATA, gn cho nhng cn trng trn hng i. Gi tr ny l mt gi tr nm ngoi min xc nh ca d liu lu trong hng i

    *