Академический Документы
Профессиональный Документы
Культура Документы
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.
Trang
else
} 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.
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