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

STACK v QUEUE

MC TIU
Hon tt phn thc hnh ny, sinh vin c th: Hiu c cch thc s dng stack v queue trn c s s dng danh sch lin kt ci t. Hiu v vn dng cc cu trc stack v queue trong nhng bi ton n gin.

Thi gian thc hnh: 120 pht n 360 pht. Lu : yu cu vn dng thnh tho danh sch lin kt Lab02.

TM TT
Stack (ngn xp) v queue (hang i) l nhng cu trc d liu dng lu tr cc phn t ca tp hp theo nhng nguyn tc c bit khi thm phn t cng nh ly phn t ra khi cu trc. Stack (last in, first out LIFO): phn t vo stack sau cng, l phn t c ly ra khi stack trc nht. Queue (first in, first out FIFO): phn t vo queue trc nht, l phn t c ly ra khi queue trc nht.

Lab03 l phn vn dng danh sch lin kt thc hnh Lab02 ci t Stack v Queue. (Lu : chng ta cng c th dng mng ci t stack v queue, nhng mng c trng cho c ch tnh, do vy danh sch lin kt c ch ng - l cu trc tt hn mng khi hin thc Stack v Queue). V d: minh ha Stack

Ly

Thm

STACK

+ Phn t mi c thm vo nh ca ngn xp. + Thao tc ly phn t ra khi ngn xp, nu ngn xp khc rng th phn t u ngn xp c ly ra, ngc li, ngn xp rng th thao tc ly phn t tht bi. V d: minh ha Queue

Thm

QUEUE

Ly

Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

Trang

+ Phn t c thm vo u queue. Do vy, phn t vo u tin s y ca queue. Do vy, khi ly phn t ra, nu queue khc rng th phn t y queue c ly ra, ngc li, queue b rng th thao tc ly phn t ra khi queue tht bi.

NI DUNG THC HNH C bn


Yu cu: ci t stack v queue bng danh sch lin kt. Do c trng ca stack v queue, chng ta cn xy dng 2 thao tc chnh l thm 1 phn t vo stack hoc queue, v ly 1 phn t ra khi stack hoc queue. Da vo nguyn tc thm v ly phn t ra khi stack/queue, ta cn xy dng cc hm sau: i vi Stack o Thm phn t: thm phn t vo u danh sch lin kt. o Ly phn t: ly phn t u danh sch ra khi danh sch lin kt. (Lu : ta cng c th thm phn t vo cui danh sch lin kt, do vy thao tc ly phn t, ta thc hin ly phn t cui danh sch lin kt). i vi Queue o Thm phn t: thm vo u danh sch lin kt. o Ly phn t: ly phn t cui danh sch lin kt. (Lu : ta cng c th thc hin vic thm phn t vo cui danh sch lin kt v ly ra u danh sch lin kt). S dng bi tp Lab02 Chng trnh mu
#include <stdio.h> struct NODE{ int Key; NODE *pNext; }; NODE* CreateNode(int Data) { NODE* pNode; pNode = new NODE; if (pNode == NULL) return NULL; pNode->Key = Data; pNode->pNext = NULL; return pNode; } bool AddHead(NODE* &pHead, int Data) { NODE *pNode; pNode = CreateNode(Data); if (pNode == NULL) return false; if (pHead == NULL) pHead = pNode; Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

Trang

else

{ pNode->pNext = pHead; pHead = pNode;

} return true; } NODE* GetHead(NODE* &pHead) { if(pHead == NULL) return NULL; NODE* pResult = pHead; pHead = pHead->pNext; return pResult; } NODE* GetTail(NODE* &pHead) { NODE *pNode; if(pHead == NULL) { return NULL; } else if(pHead->pNext == NULL) { pNode = pHead; pHead = NULL; return pNode; } pNode = pHead; while(pNode->pNext->pNext != NULL) { pNode = pNode->pNext; } NODE* pResult = pNode->pNext; pNode->pNext = NULL; return pResult; } void PrintList(NODE *pHead) { NODE *pNode; pNode = pHead; while (pNode != NULL) { printf("%5d", pNode->Key); pNode = pNode->pNext; } } void main() { NODE* pHead = NULL; int n = 10; while(n!=0) { AddHead(pHead, n); n--; } printf("Danh sach luc dau :\n"); Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

//<1>

//<2>

//<3>

Trang

PrintList(pHead); printf("\n"); NODE* pNode = GetTail(pHead); printf("Danh sach sau khi lay phan tu cuoi\n"); PrintList(pHead); if(pNode != NULL) //<4> printf("\nGia tri Tail : %d\n", pNode->Key); else printf("\nNULL\n"); NODE* pNode2 = GetHead(pHead); printf("Danh sach sau khi lay phan tu dau\n"); PrintList(pHead); if(pNode2 != NULL) printf("\nGia tri Head : %d\n", pNode2->Key); else printf("\nNULL\n"); }

1. Bin dch on chng trnh trn. 2. Thay gi tr n=10 thnh n=1 trong main, c gi tr Tail v Head in ra mn hnh. 3. Gii thch <4> khi no gi tr pNode khc NULL, khi no pNode bng NULL, ngha ca mi trng hp trn. 4. Gii thch hm GetTail cc im <1>, <2>, <3> cho bit ngha ca chng. 5. S dng cc hm AddHead, GetHead, GetTail ci t Stack v Queue. a. Stack: Trong hm main, thc hin vic thm vo 3 gi tr do ngi dng nhp vo (thc hin 3 lnh thm phn t vo stack), sau thc hin 4 ln lnh ly gi tr phn t ra khi stack, nu c, in gi tr phn t ra mn hnh, nu khng c (stack rng), in ra mn hnh STACK RONG, KHONG LAY DUOC PHAN TU. b. Queue: Trong hm main, thc hin vic thm vo 3 gi tr do ngi dng nhp vo (thc hin 3 ln lnh thm phn t vo queue), sau thc hin 4 ln lnh ly gi tr phn t ra khi queue, nu c, in gi tr phn t ra mn hnh, nu khng c (queue rng), in ra mn hnh QUEUE RONG, KHONG LAY DUOC PHAN TU.

p dng Nng cao


1. Ci t hm AddTail c phin bn ci t Stack (thm phn t vo cui danh sch v ly phn t cui danh sch lin kt) cng nh p dng 1 phin bn khc khi ci t Queue (thm phn t vo cui danh sch lin kt v ly phn t u danh sch lin kt). 2. Nhn xt cch ci t trn phn 1 (p dng nng cao) so vi chng trnh mu i vi trng hp stack cng nh queue. 3. S dng cu trc Stack chuyn gi tr t c s 10 sang c s 2. Gi : thc hin vic chia lin tip gi tr trong c s 10 cho 2, ly phn d a vo stack, cho n khi gi tr em i chia l 0. In gi tr trong stack ra ( chnh l kt qu khi chuyn s t h c s 10 sang h c s 2).

BI TP THM
Trang

Tm ng trong m cung (thc hin loang theo chiu rng <s dng queue> hoc loang theo chiu su <s dng stack>). Bi ton: cho ma trn mxn, mi phn t l s 0 hoc 1.
Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

Gi tr 1 : c th i ti v gi tr 0 : khng th i ti c. Cu hi: T ban u c ta (x1, y1) c th i ti (x2, y2) khng? Bit rng t 1 (x,y) ch c th i qua c chung cnh vi ang ng v mang gi tr l 1, ngc li khng c ng i.

Ti liu hng dn thc hnh mn Cu trc d liu v gii thut HCMUS 2010

Trang

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