Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

Embed Size (px)

Citation preview

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    1/425

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    2/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 2/16

    Nhom th hai muon noi en cac lp CTDL (CTDL). Vay co g giong va khacnhau gia cac lp CTDL va cac lp khac?

    iem giong nhau gia cac lp CTDL va cac lp khac: moi lp eu phaithc hien mot so chc nang thong qua cac hanh vi cua cac oi tng cuano. Mot khi chung ta a xay dng xong mot lp CTDL nao o, chung tahoan toan tin tng rang no se hoan thanh xuat sac nhng nhiem vu ma

    chung ta a thiet ke va a giao pho cho no. ieu nay rat khac biet so vinhng tai lieu viet ve CTDL theo quan iem hng thu tuc trc ay: viecx ly d lieu khong he co tnh ong kn va tnh s dung lai. Tuy ve matthc thi th cac chng trnh nh the co kha nang chay nhanh hn,nhng chung boc lo rat nhieu nhc iem: thi gian phat trien giai thuatchnh rat cham gay kho khan nhieu cho ngi lap trnh, chng trnhthieu tnh trong sang, rat kho sa loi va phat trien.

    ac trng rieng cua cac lp CTDL: Nhiem vu chnh cua cac lp CTDL lanam gi d lieu sao cho co the ap ng moi khi c chng trnh yeu cau

    tra ve mot d lieu cu the nao o ma chng trnh can en. Nhng thaotac c ban oi vi mot CTDL thng la: them d lieu mi, xoa bo d lieua co, tm kiem, truy xuat.

    Ngoai cac thao tac d lieu c ban, cac CTDL khac nhau se khac nhau ve cacthao tac bo sung khac. Chnh v ieu nay ma khi thiet ke nhng giai thuat egiai quyet cac bai toan ln, ngi ta se la chon CTDL nao la thch hp nhat.

    Chung ta th xem xet mot v du that n gian sau ay.Gia s chung ta can viet mot chng trnh nhan vao mot day cac con so, va in

    chung ra theo th t ngc vi th t nhap vao ban au.e giai quyet bai toan nay, neu chung ta ngh en viec phai khai bao cac bien elu cac gia tr nhap vao nh the nao, va sau o la th t in ra sao e ap ng yeucau bai toan, th dng nh la chung ta a quen ap dung nguyen tac lap trnhhng oi tng: chung ta a phai ban tam en nhng viec qua chi tiet. ay chla mot v du vo cung n gian, nhng no co the minh hoa cho vai tro cua CTDL.Neu chung ta nh rang, viec to chc va lu d lieu nh the nao la mot viec quachi tiet va t m khong nen thc hien vao luc nay, th o chnh la luc chung ta abc au hieu c vai tro cua cac lp CTDL.

    Mon CTDL va giai thuat se giup chung ta hieu ro ve cac lp CTDL co santrong cac phan mem. Hn thena, trong khi hoc cach xay dng cac lp CTDL tn gian en phc tap, chung ta se nam c cac phng phap cung nh cac kynang thong qua mot so nguyen tac chung. T o, ngoai kha nang hieu ro e cothe la chon mot cach ung an nhat nhng CTDL co san, chung ta con co khanang xay dng nhng lp CTDL phc tap hn, tinh te va thch hp hn trongmoi bai toan ma chung ta can giai quyet. Kha nang tha ke cac CTDL co san ephat trien them cac tnh nang mong muon cung la mot ieu ang lu y.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    3/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 3/16

    Vi v du tren, nhng ai a tng tiep xuc t nhieu vi viec lap trnh eu khongxa la vi khai niem ngan xep. ay la mot CTDL n gian nhat nhng lai ratthong dung, va d nhien chung ta se co dp hoc ky hn ve no. ay chung tamuon mn no e minh hoa, va cung nham giup cho ngi oc lam quen vi motphng phap tiep can hoan toan nhat quan trong suot giao trnh nay.

    Gia s CTDL ngan xep cua chung ta a c giao cho mot nhiem vu la cat ginhng d lieu va tra ve khi co yeu cau, theo mot quy nh bat di bat dch la dlieu a vao sau phai c lay ra trc. Bang cach s dung CTDL ngan xep,chng trnh tr nen het sc n gian va c trnh bay bang ngon ng gia nhsau:

    Lap cho en khi nhap u cac con so mong muon{

    Nhap 1 con so.

    Cat vao ngan xep con so va nhap.}Lap trong khi ma ngan xep van con d lieu{

    Lay t ngan xep ra mot con so.In so va lay c.

    }

    Chung ta se co dp gap nhieu bai toan phc tap hn ma cung can s dung enac tnh nay cua ngan xep. Tnh ong kn cua cac lp giup cho chng trnh vocung trong sang. oan chng trnh tren khong he cho chung ta thay ngan xepa lam viec vi cac d lieu c a vao nh the nao, o la nhiem vu ma chung taa giao pho cho no va chung ta hoan toan yen tam ve ieu nay. Bang cach nay,khi a co nhng CTDL thch hp, ngi lap trnh co the de dang giai quyet cacbai toan ln. Ho co the yen tam tap trung vao nhng iem mau chot e xay dng,tinh che giai thuat va kiem loi.

    Tren ay chung ta ch va mi gii thieu ve phan CTDL nam trong noi dungcua mon hoc CTDL va giai thuat. Vay giai thuat la g? ng tren quan iem

    thiet ke va lap trnh hng oi tng, chung ta a hieu vai tro cua cac lp. Vaykhi a co cac lp roi th ngi ta can xay dng kch ban cho cac oi tng hoatong nham giai quyet bai toan chnh. Chung ta can mot cau truc chng trnh etao ra kch ban o: viec g lam trc, viec g lam sau; viec g ch lam trong nhngtnh huong ac biet nao o; viec g can lam lap lai nhieu lan. Chung ta nhac engiai thuat chnh la quay ve vi khai niem cua lap trnh thu tuc trc kia. Ngoaira, chung ta cung can en giai thuat khi can hien thc cho moi lp: xong phanac ta cac phng thc - phng tien giao tiep cua lp vi ben ngoai - chung tacan en khai niem lap trnh thu tuc e giai quyet phan hien thc ben trong cua

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    4/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 4/16

    cac phng thc nay. o la viec chung ta phai x ly nhng d lieu ben trong cuachung nh the nao mi co the hoan thanh c chc nang ma phng thc phaiam nhiem.

    Nh vay, ve phan giai thuat trong mon hoc nay, chu yeu chung ta se tm hieucac giai thuat ma cac phng thc cua cac lp CTDL dung en, mot so giai thuat

    sap xep tm kiem, va cac giai thuat trong cac ng dung minh hoa viec s dung caclp CTDL e giai quyet mot so bai toan o.

    Trong giao trnh nay, y tng ve cac giai thuat se c trnh bay can ke, phanchng trnh dung ngon ng C++ hoac ngon ng gia theo quy c cuoi chngnay. Phan anh gia giai thuat ch neu nhng ket qua a c chng minh vakiem nghiem, sinh vien co the tm hieu ky hn trong cac sach tham khao.

    1.3.Cach tiep can trong qua trnh tm hieu cac lp CTDL1.3.1.Cac bc trong qua trnh phan tch thiet ke hng oi tng

    Qua trnh phan tch thiet ke hng oi tng khi giai quyet mot bai toan gomcac bc nh sau:1.nh ra cac lp vi cac chc nang ma chung ta mong i. Cong viec nay cung

    giong nh cong viec phan cong cong viec cho cac nhan vien cung tham giamot d an.

    2.Giai quyet bai toan bang cach la chon cac giai thuat chnh. o la viec tao ramot moi trng e cac oi tng cua cac lp neu tren tng tac lan nhau.Giai thuat chnh c xem nh mot kch ban dan dat cac oi tng thc hiencac hanh vi cua chung vao nhng thi iem can thiet.

    3.Hien thc cho moi lp.Y tng chnh ay nam bc th hai, dau cho cac lp cha c hien thc,

    chung ta hoan toan co the s dung chung sau khi a biet ro nhng chc nang mamoi lp se phai hoan thanh. Trung thanh vi quan iem nay cua hng oi tng,chung ta cung se neu ra ay phng phap tiep can ma chung ta se s dung motcach hoan toan nhat quan trong viec nghien cu va xay dng cac lp CTDL.

    ng dung trong chng 18 ve chng trnh Game Of Life la mot dan chng vecac bc phan tch thiet ke trong qua trnh xay dng nen mot chng trnh. Sinhvien co the tham khao ngay phan nay. Rieng phan 18.4.2 phien ban th hai cuachng trnh sinh vien ch co the tham khao sau khi oc qua chng 4 ve danhsach va chng 12 ve bang bam.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    5/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 5/16

    1.3.2.Qua trnh xay dng cac lp CTDLChung ta se lan lt xay dng t cac lp CTDL n gian cho en cac lp

    CTDL phc tap hn. Tuy nhien, qua trnh thiet ke va hien thc cho moi lpCTDL eu tuan theo ung cac bc sau ay:

    1.Xuat phat t mot mo hnh toan hoc hay da vao mot nhu cau thc te naoo, chung ta nh ra cac chc nang cua lp CTDL chung ta can co. Bc naygiong bc th nhat tren, v lp CTDL, cung nh cac lp khac, se cung capcho chung ta cac oi tng e hoat ong trong chng trnh chnh. Va nhvay, nhng nhiem vu ma chung ta se giao cho no se c ch ra mot cach rorang va chnh xac bc ke tiep sau ay.

    2. ac ta ay u cach thc giao tiep gia lp CTDL ang c thiet ke vi moitrng ngoai (cac chng trnh se s dung no). Phan giao tiep nay c mota thong qua nh ngha cac phng thc cua lp. Moi phng thc la mot

    hanh vi cua oi tng CTDL sau nay, phan ac ta gom cac yeu to sau: Kieu cua ket qua ma phng thc tra ve. Cac thong so vao / ra. Cac ieu kien ban au trc khi phng thc c goi (precondition). Cac ket qua ma phng thc lam c (postcondition). Cac lp, ham co s dung trong phng thc (uses).

    Thong qua phan ac ta nay, cac CTDL hoan toan co the c s dung trongviec xay dng nen nhng giai thuat ln trong cac bai toan ln. Phan ac tanay co the c xem nh nhng cam ket ma khong bao gi c quyen thay

    oi. Co nh vay cac chng trnh co s dung CTDL mi khong b thay oimot khi a s dung chung.

    3. Tm hieu cac phng an hien thc cho lp CTDL. Chung ta cung nen nhrang, co rat nhieu cach hien thc khac nhau cho cung mot ac ta cua mot lpCTDL. Ve mat hieu qua, co nhng phng an gan nh giong nhau, nhngcung co nhng phng an khac nhau rat xa. ieu nay phu thuoc rat nhieuvao cach to chc d lieu ben trong ban than cua lp CTDL, vao cac giaithuat lien quan en viec x ly d lieu cua cac phng thc.

    4. Chon phng an va hien thc lp. Trong bc nay bao gom ca viec kiem trae hoan tat lp CTDL nh la mot lp e bo sung vao th vien, ngi laptrnh co the s dung chung trong nhieu chng trnh sau nay. Cong viec bc nay ke cung kha vat va, v chung ta se phai kiem tra that ky lng,trc khi a san pham ra nh nhng ong goi, ma ngi khac co the hoantoan yen tam khi s dung chung.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    6/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 6/16

    e co c nhng san pham hoan hao thc hien ung nhng ieu a cam ket,bc th hai tren ay c xem la bc quan trong nhat. Va e co c mot nhngha va mot ac ta ay u va chnh xac nhat cho mot CTDL mi nao o, bucth hai phai c thc hien hoan toan oc lap vi hai bc sau no. ay la nguyentac vo cung quan trong ma chung ta se phai tuan thu mot cach triet e. V trongtrng hp ngc lai, viec xem xet sm cac chi tiet cu the se lam cho chung ta de

    co cai nhn phien dien, ieu nay de dan en nhng ac ta mang nhieu s suat.

    1.4.Mot so nh ngha c banChung ta bat au bang nh ngha cua mot kieu d lieu (type):

    1.4.1.nh ngha kieu d lieunh ngha: Mot kieu d lieu la mot tap hp, cac phan t cua tap hp nay c

    goi la cac tr cua kieu d lieu.

    Chung ta co the goi mot kieu so nguyen la mot tap cac so nguyen, kieu so thcla mot tap cac so thc, hoac kieu ky t la mot tap cac ky hie u ma chung ta mongmuon s dung trong cac giai thuat cua chung ta.

    Lu y rang chung ta a co the ch ra s phan biet gia mot kieu d lieu trutng va cach hien thc cua no. Chang han, kieu int trong C++ khong phai la tapcua tat ca cac so nguyen, no ch cha cac so nguyen c bieu dien thc s bimot may tnh xac nh, so nguyen ln nhat trong tap phu thuoc vao so bit ngita danh e bieu dien no (thng la mot t gom 2 bytes tc 16 bits). Tng t, kieufloat va double trong C++ bieu dien mot tap cac so thc co dau cham ong nao

    o, va o ch la mot tap con cua tap tat ca cac so thc.

    1.4.2.Kieu nguyen to va cac kieu co cau trucCac kieu nhint, float, char c goi la cac kieu nguyen to (atomic) v

    chung ta xem cac tr cua chung ch la mot thc the n, chung ta khong co mongmuon chia nho chung. Tuy nhien, cac ngon ng may tnh thng cung cap caccong cu cho phep chung ta xay dng cac kieu d lieu mi goi la cac kieu co cautruc (structured types). Chang han nh mot struct trong C++ co the cha nhieukieu nguyen to khac nhau, trong o khong loai tr mot kieu co cau truc khac lam

    thanh phan. Tr cua mot kieu co cau truc cho chung ta biet no c tao ra bi cacphan t nao.

    1.4.3.Chuoi noi tiep va danh sachnh ngha: Mot chuoi noi tiep (sequence) kch thc 0 la mot chuoi rong. Mot

    chuoi noi tiep kch thc n 1 cac phan t cua tap T la mot cap co tht (Sn-1, t), trong o Sn-1 la mot chuoi noi tiep kch thc n 1 cacphan t cua tap T, va t la mot phan t cua tap T.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    7/425

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    8/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 8/16

    Mot ac ta cho mot kieu d lieu tru tng hoan toan co the co nhieu cachhien thc khac nhau. Moi cach hien thc mang lai tnh kha thi va tnh hieu quakhac nhau. ieu nay phu thuoc vao yeu cau ve thi gian va khong gian cua baitoan. Nhng can nhan manh rang, moi cach hien thc cua mot kieu d lieu trutng eu luon trung thanh vi ac ta ban au ve cac chc nang cua no.

    Nhiem vu cua chung ta trong viec hien thc CTDL trong C++ la bat au tnhng khai niem, thng la nh ngha cua mot ADT, sau o tinh che dan e coc hien thc bang mot lp trong C++. Cac phng thc cua lp trong C++ tngng mot cach t nhien vi cac thao tac d lieu tren ADT, trong khi nhng thanhphan d lieu cua lp trong C++ tng ng vi CTDL vat ly ma chung ta chon ebieu dien ADT.

    1.5.Mot so nguyen tac va phng phap e hoc tot mon CTDL va giaithuat

    1.5.1.Cach tiep can va phng hng suy ngh tch ccMoi CTDL eu c trnh bay theo ung cac bc sau ay:

    nh ngha lp. ac ta lp. Phan tch cac phng an hien thc. Hien thc lp.

    Lu y rang, s tru tng va ac ta d lieu phai luon i trc s la choncach thc to chc lu tr d lieu va cach hien thc chung.

    Trong phan nh ngha va ac ta lp, e co the hieu sau van e va cam thayhng thu hn, sinh vien nen t xem mnh la mot trong nhng ngi tham gia vaocong viec thiet ke. V chc nang cua lp hoan toan phu thuoc vao quan iem cuangi thiet ke. Neu chung ta gii han cho moi lp CTDL mot so chc nang thaotac d lieu c ban nhat, chung ta co mot th vien gon nhe. Ngc lai, th vien serat ln, nhng ngi lap trnh co the goi thc hien bat c cong viec nao ma homuon t nhng phng thc a co san cua moi lp. Th vien cac lp CTDL trongVC++ la mot minh hoa cho thay moi lp CTDL co san rat nhieu phng thc apng c nhu cau cua nhieu ngi dung khac nhau.

    Cac phng thc c ac ta ky cang cho moi lp trong giao trnh nay cungch la e minh hoa. Sinh vien co the t y chon la e ac ta mot so phng thcbo sung khac theo y muon.

    Trc khi tm hieu cac phng an hien thc c trnh bay trong gia o trnhdanh cho moi lp CTDL, sinh vien cung nen t phac hoa theo suy ngh cua rieng

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    9/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 9/16

    ban than mnh. Vi cach chu ong nh vay, sinh vien se de dang nhn ra cac unhc iem trong tng phng an. Va neu co c nhng y tng hoan toan mime so vi nhng g c trnh bay trong giao trnh, sinh vien se t tin hn khican giai quyet cac bai toan. Nhng CTDL nham phuc vu cho cac bai toan ln oikhi c hnh thanh t s ghep noi cua mot so CTDL n gian. Chnh s ghepnoi nay lam nay sinh vo van phng an khac nhau ma chung ta phai chon la

    that than trong, e bao am tnh kha thi va hieu qua cua chng trnh. Mot khigap mot bai toan can giai quyet, neu sinh vien biet chon cho mnh nhng phngan ghep noi cac CTDL n gian, biet cach s dung lai nhng g a co trong thvien, va biet cach lam the nao e hien thc bo sung nhng g thuoc ve nhng ytng mi me va nay sinh, xem nh sinh vien a hoc tot mon CTDL va giaithuat.

    So vi nhieu giao trnh khac, giao trnh nay tach rieng phan ng dung cacCTDL nham lam gon nhe hn cho phan II la phan ch trnh bay ve cac CTDL

    Nh vay se thuan tien hn cho sinh vien trong viec tm hieu nhng phan can banhay la tra cu m rong kien thc. Hn na, co nhieu ng dung lien quan ennhieu CTDL khac nhau.

    1.5.2.Cac nguyen tac1.Trc khi hien thc bat ky mot lp CTDL nao, chung ta can chac chan rang

    chung ta a nh ngha CTDL va ac ta cac tac vu cho no mot cach that ayu. Co nh vay mi bao am c rang: Chung ta a hieu ve no mot cach chnh xac. Trong khi hien thc chung ta khong phai quay lai sa oi cac ac ta cua

    no, v viec sa oi nay co the lam cho chung ta mat phng hng, CTDLse khong con ung nh nhng y tng ban au ma chung ta a d nhcho no.

    Cac chng trnh ng dung khong can phai c chnh sa mot khi a sdung CTDL nay.

    Neu chung ta cung cap nhieu hien thc khac nhau cho cung mot CTDL,th khi oi sang s dung mot hien thc khac, chng trnh ng dungkhong oi hoi phai c chnh sa lai. Cac hien thc khac nhau cua cung

    mot CTDL luon co cung mot giao dien thong nhat.

    2.Moi phng thc cua lp luon co nam phan mo ta (kieu tra ve, thong so vao/ra,precondition,postcondition, uses)

    ay la yeu cau chung trong viec lap tai lieu cho mot ham. Cac CTDL cuachung ta se c s dung trong rat nhieu ng dung khac nhau. Do o chungta can xay dng sao cho ngi lap trnh bt c moi cong sc co the. Likhuyen ay la: phanprecondition ch nham giai thch y ngha cac thong so

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    10/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 10/16

    vao, ch khong nen rang buoc nhng tr hp le ma thong so vao phai thoa.Nhiem vu trong phan hien thc cua phng thc la chung ta phai lng hetmoi kha nang co the co cua thong so vao va giai quyet thoa ang tng trnghp.

    Chung ta xem cac CTDL cung nh cac dch vu, chung c viet mot

    lan va c s dung trong rat nhieu ng dung khac nhau. Do o CTDL

    can c xay dng sao cho ngi s dung bt c cong sc moi luc co

    the.

    Cac phng thc public cua cac CTDL nen c hien thc khong co

    precondition.

    3.am bao tnh ong kn (encapsulation) cua lp CTDL. D lieu co tnh ongkn khi chung ch co the c truy xuat bi cac phng thc cua lp.

    u iem cua viec s dung mot lp co tnh ong kn la khi chung ta ac tava hien thc cac phng thc, chung ta khong phai lo lang en cac gia trkhong hp le cua cac d lieu ang c lu trong oi tng cua lp.

    Cac thanh phan d lieu cua CTDL nen c khai bao private.

    4. Ngoai tr cac constructor co chu ch, moi oi tng cua CTDL luon phaic khi tao la mot oi tng rong va ch c sa oi bi chnh cacphng thc cua lp. Vi cac phng thc a c hien thc va kiem tra ky

    lng, chung ta luon an tam rang cac oi tng CTDL luon cha nhng dlieu hp le. ieu nay giup chung luon hoan thanh nhiem vu c giao, va ocung la nguyen tac cua hng oi tng.

    1.5.3.Phong cach lap trnh (style of programming) va cac ky nang:1.Van e x ly loi:

    Viec x ly loi cung cap mot mc o an toan can thiet ma chung ta nenthc hien moi luc co the trong CTDL cua chung ta. Co vai cach khac nhautrong viec x ly loi. Chang han chung ta co the in ra thong bao hoac ngng

    chng trnh khi gap loi. Hoac thay vao o, chung ta danh viec x ly loi laicho ngi lap trnh s dung CTDL cua chung ta bang cach tra ve cac ma loithong qua tr tra ve cua cac phng thc. Cach cuoi cung nay hay hn v nocung cap kha nang la chon cho ngi lap trnh. Co nhng tnh huong mangi lap trnh thay can thiet phai ngng ngay chng trnh, nhng cung conhng tnh huong loi co the bo qua e chng trnh tiep tuc chay. Bang cachnay, ngi lap trnh khi s dung cac CTDL hoan toan co the chu ong oi

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    11/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 11/16

    pho vi moi tnh huong. Hn na, cac CTDL cua chung ta se c xay dngnh la cac th vien dung chung cho rat nhieu chng trnh.

    Khi s dung mot phng thc cua mot lp CTDL, ngi lap trnh can

    phai xem xet lai ma loi ma phng thc tra ve e x ly loi khi can thiet.

    Cac lp CTDL can phai c thiet ke sao cho co the cho phep ngi lap

    trnh chon la cach thc x ly loi theo y muon.

    Chung ta se dung khai bao ErrorCode nh mot kieu d lieu kieu liet ketap cac tr tng ng cac tnh huong co the xay ra khi mot phng thc cuamot lp c goi: thanh cong hay that bai, tran bo nh, tr thong so khonghp le, Chung ta se co gang thiet ke mot cach that nhat quan: hau het cacphng thc cua cac lp tra ve kieu ErrorCode nay.

    S nhat quan bao gi cung tao ra thoi quen rat tot trong phong cach

    lap trnh. ieu nay tiet kiem rat nhieu cong sc va thi gian cua ngi laptrnh.

    2. Cach truyen nhan d lieu gia oi tng CTDL vi chng trnh s dungCac giao tiep truyen nhan d lieu khac gia chng trnh s dung va cac

    lp CTDL d nhien cung thong qua danh sach cac thong so. Trong phngthc cua lp CTDL se khong co viec ch nhan d lieu trc tiep t ban phm.Chung ta nen danh cho ngi lap trnh quyen chuyen hng dong nhap xuat

    d lieu vi cac thiet b ben ngoai nh ban phm, man hnh, tap tin, may in,

    3.Van e kieu cua d lieu c lu trong CTDL.Moi lp CTDL ma chung ta xay dng eu co tnh tong quat cao, no co the

    chap nhan bat ky mot kieu d lieu nao cho d lieu c lu trong no. TrongC++ t khoa template cho phep chung ta lam ieu nay. Cac kieu d lieu naythng c yeu cau phai co san mot so thao tac can thiet nh so sanh,nhap, xuat,

    4. Cac khai bao ben trong mot lp CTDL.Lp CTDL cung cap cac thao tac d lieu thong qua cac phng thc c

    khai bao la public.Tat ca nhng thuoc tnh va cac ham con lai luon c khai bao privatehoac protected.Cac thuoc tnh cua mot lp CTDL co the c phan lam hai loai: Thuoc tnh bat buoc phai co e lu d lieu.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    12/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 12/16

    Thuoc tnh ma oi tng can co e t quan ly, trong so nay co thuoc tnhc bo sung ch e ay nhanh toc o cua cac thao tac d lieu.

    Cac ham c che dau ben trong lp c goi la cac ham phu tr (auxilaryfunction), chung ch c s dung bi chnh cac phng thc cua lp CTDLo ma thoi.

    Viec m rong them cac tac vu cho mot lp co san co the theo mot tronghai cach: Bo sung them phng thc mi. Xay dng lp tha ke.

    5. Mot so hng dan can thiet trong viec th nghiem chng trnh. Bo chng trnh th (driver): ay la oan chng trnh thng c viet

    trong ham main va cha mot thc n (menu) cho phep th moi phngthc cua lp CTDL ang c xay dng.Chung ta se viet, th nghiem, va hoan chnh nhieu lp CTDL khac nhau.Do o ngay t au chung ta nen xay dng mot driver sao cho tong quat, khican th vi mot CTDL nao o ch can chnh sa lai oi chut ma thoi.Trong driver chung ta nen chuan hoa viec oc ghi tap tin, x ly cac thaotac oc t ban phm va xuat ra man hnh. Phan con lai la mot menu chophep ngi s dung chay chng trnh chon cac chc nang nh tao oitng CTDL mi, goi cac thao tac them, xoa, tm kiem, truy xuat, trenCTDL o.

    Cac mau tam (stub): ay la mot meo nho nhng rat hu ch. e dch vachay th mot vai phan nho a viet, nhng phan cha viet cua chng trnhse c tao nh nhng mau nho va ch can hp cu phap (Xem ng dungtnh toan cac a thc trong chng 15).V du: Trong oan chng trnh nao o chung ta ang muon chay th maco s dung lp A, ham B,, chung ta se tam khai bao cacstub:

    class A{

    }; // Mot lp cha co thuoc tnh v chung ta cha quyet nh nen chonkieu thuoc tnh nh the nao.

    void B(){} // Mot ham vi than ham con rong ma chung ta hen se viet sau.

    Neu mot ham a co nh ngha th ch can tra ve sao cho hp le:

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    13/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 13/16

    int C(){

    return 1;} // ch can can than trong trng hp neu nh gia tr tra ve lai c

    dung trong mot bieu thc luan ly e xet ieu kien lap vong th cokha nang vong lap khong c thc hien hoac lap vo tan.

    Cach thc theo doi mot chng trnh ang chay hoac nhu cau khao sat cachlam viec cua mot trnh bien dch nao o:

    V du gi y:void D(){

    count

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    14/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 14/16

    Viec tm oc tai lieu kem theo trnh bien dch la mot viec lam can thiet, nocho chung ta s hieu biet ay u va chnh xac. Nhng e rut ngan thi gianth gi y tren ay cung la mot li khuyen quy bau. Khong g nhanh vachnh xac bang cach tm cau tra li trong th nghiem. Viec sa oi chngtrnh nh the nao e co c cac stub thoa nhng nhu cau can th nghiem

    la tuy thuoc vao s tch cc, say me va sang tao cua sinh vien.

    G roi chng trnh (debug)ay la kha nang theo vet chng trnh nhng oan ma ngi lap trnhcon nghi ng co loi. Bat c ngi lap trnh nao cung co luc can phai chaydebug. V vay tot hn het la ngay t au sinh vien nen tm hieu ky cac kha nang cua cong cu debug cua trnh bien dch ma mnh s dung (cho pheptheo doi tr cac bien, lch s cac lan goi ham,).

    Mot gi y trong phan nay la sinh vien can biet cach co lap tng phan cuachng trnh a viet bang cach dung ky hieu danh cho phan chu thch(comment) e khoa bt nhng phan cha en lt kiem tra. Hoac khi loi dotrnh bien dch bao co ve m ho, th cach co lap bang cach gii han danoan chng trnh ang dch th se giup chung ta sm xac nh c phamvi co loi. Cung co the lam ngc lai, ch dch th va chnh sa tng oanchng trnh nho, cho en khi het loi mi ni dan pham vi chng trnh edch tiep.

    1.6.Gii thieu ve ngon ng gia:Phan ln chng trnh c trnh bay trong giao trnh nay eu s dung ngon

    ng C++, sau khi y tng ve giai thuat a c giai thch can ke. Phan con lai comot so giai thuat c trnh bay bang ngon ng gia.

    Ngon ng gia, hay con goi la ma gia (pseudocode), la mot cach bieu dien oclap vi moi ngon ng lap trnh, no khong rang buoc sinh vien vao nhng cu phapnghiem ngat cung nh cach goi sao cho chnh xac cac t khoa, cac ham co trongth vien mot trnh bien dch nao o. Nh o sinh vien co the tap trung vao ytng ln cua giai thuat.

    Cac quy nh ve ma gia c s dung trong giao trnh nay:

    Bieu dien s tuan t cua cac lenh chng trnh: cac lenh c thc thi tuan tlenh nay sang lenh khac se co cung khoang cach canh le nh nhau va canh so th t tang dan, luon bat au t 1.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    15/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 15/16

    Cau truc khoi long nhau: mot khoi nam trong mot khoi khac se co khoangcach canh le ln hn.

    Trong giao trnh nay, ch nhng phan c trnh bay bang ma gia mi co soth t au moi dong lenh.

    V du:1.

    1.

    2.

    1. // ay la dong lenh co so th t la 1.2.12.

    3.

    2.

    1.

    3.

    1.

    2.

    S re nhanh: chung ta s dung cac t khoa: if

    endif

    if

    else

    endif

    casecase1:

    case2:

    case3:

    else:

    endcase

    S lap vong: loop

    endloop // lap trong khi bieu thc luan ly con ung. repeat

    until // lap cho en khi bieu thc luan lyung.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    16/425

    Chng 1: Gii thieu

    Giao trnh Cau truc d lieu va Giai thuat 16/16

    Khai bao ham: ten ham (danh sach thong so)

    trong o danh sach thong so: val/ ref ten thong so, val/ ref ten thong so,

    val: danh cho tham tr; ref: danh cho tham bien.

    Khai bao cau truc, lp:struct ten kieu d lieu cau trucend struct

    class ten kieu d lieu cau trucend class

    Khai bao phng thc cua lp: ten lp::ten ham (danh sach thong so);

    Khai bao bien: ten bien

    Mot chut lu y ve cach trnh bay trong giao trnh:

    Do cac oan chng trnh s dung font ch Courier New, nen cac ten bien,ten lp, ten oi tng, ten cac ham khi c nhac en cung dung font ch nay.Cac t tieng Anh khac c in nghieng. ac biet nhng phan co lien quan chatche en nhng ac thu cua ngon ng lap trnh C++ thng dung kch c ch nhohn, e phan biet vi nhng phan quan trong khac khi noi ve y tng va giaithuat, va o mi la muc ch chnh cua mon hoc nay.Co mot so t hay oan c in am hay gach di nham giup sinh vien oc dedang hn.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    17/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 17

    Phan 2 CAC CAU TRUC D LIEUChng 2 NGAN XEP

    Chung ta se tm hieu mot CTDL n gian nhat, o la ngan xep. Mot cach nhat

    quan nh phan gii thieu mon hoc a trnh bay, moi CTDL eu c xay dngtheo ung trnh t:

    nh ngha. ac ta. Phan tch cac phng an hien thc. Hien thc.

    2.1.nh ngha ngan xepVi nh ngha danh sach trong chng m au, chung ta hieu rang trong

    danh sach, moi phan t, ngoai tr phan t cuoi, eu co duy nhat mot phan tng sau no. Ngan xep la mot trng hp cua danh sach, c s dung trong cacng dung co lien quan en s ao ngc. Trong CTDL ngan xep, viec them haylay d lieu ch c thc hien tai mot au. D lieu them vao trc se lay ra sautnh chat nay con c goi la vao trc ra sau (First In Last Out - FILO).au them hay lay d lieu cua ngan xep con goi la nh (top) cua ngan xep.

    Hnh 2.1- Them phan t vao va lay phan t ra khoi ngan xep.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    18/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 18

    Vay chung ta co nh ngha cua ngan xep di ay, khong khac g oi vi nhngha danh sach, ngoai tr cach thc ma ngan xep cho phep thay oi hoac truyxuat en cac phan t cua no.

    nh ngha: Mot ngan xep cac phan t kieu T la mot chuoi noi tiep cac phan

    t cua T, kem cac tac vu sau:

    1. Tao mot oi tng ngan xep rong.

    2. ay (push) mot phan t mi vao ngan xep, gia s ngan xep cha ay (phan

    t d lieu mi luon c them tai nh).

    3. Lay (pop) mot phan t ra khoi ngan xep, gia s ngan xep cha rong (phan

    t b loai la phan t ang nam tai nh).

    4. Xem phan t ta i nh ngan xep (top).Lu y rang nh ngha nay khong quan tam en cach hien thc cua kieu d

    lieu tru tng ngan xep. Chung ta se tm hieu mot vai cach hien thc khac nhaucua ngan xep va tat ca chung eu phu hp vi nh ngha nay.

    2.2.ac ta ngan xepNgoai cac tac vu chnh tren, cac phng thc khac co the bo sung tuy vao nhu

    cau ma chung ta thay can thiet:+ empty: cho biet ngan xep co rong hay khong.+ full: cho biet ngan xep co ay hay cha.+ clear: xoa sach tat ca d lieu va lam cho ngan xep tr nen rong.

    Chung ta lu y rang, khi thiet ke cac phng thc cho moi lp CTDL, ngoaimot so phng thc chnh e them vao hay lay d lieu ra, chung ta co the bo sungthem nhieu phng thc khac. Viec them da vao quan niem cua moi ngi ve stien dung cua lp CTDL o. Nhng ieu ac biet quan trong ay la cac phngthc o khong the mau thuan vi nh ngha ban au cung nh cac chc nang machung ta a nh ra cho lp. Chang han, trong trng hp ngan xep cua chung ta,e bao am quy luat Vao trc ra sau th trat t cua cac phan t trong ngan xepla rat quan trong. Chung ta khong the cho chung mot phng thc co the thay oitrat t cua cac phan t ang co, hoac phng thc lay mot phan t tai mot v tr

    bat ky nao o cua ngan xep.

    Tren ay la nhng phng thc lien quan en cac thao tac d lieu tren nganxep.

    oi vi bat ky lp CTDL nao, chung ta cung khong the khong xem xet en haiphng thc cc ky quan trong: o chnh la hai ham dng lp va huy lp:constructor va destructor. Trong C++ cac ham constructor va destructor c

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    19/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 19

    trnh bien dch goi khi mot oi tng va c tao ra hoac sap b huy. Chung tacan bao am cho moi oi tng CTDL c tao ra co trang thai ban au la hp leS hp le nay se tiep tuc c duy tr bi cac phng thc thao tac d lieu bentren.

    Trang thai ban au hp le la trang thai rong khong cha d lieu nao hoac

    trang thai a cha mot so d lieu theo nh mong muon cua ngi lap trnh sdung CTDL. Nh vay, moi lp CTDL luon co mot constructor mac nh (khong cothong so) e tao oi tng rong, cac constructor co thong so khac chung ta co thethiet ke bo sung neu thay hp ly va can thiet.

    Mot oi tng CTDL khi b huy phai am bao khong e lai rac trong bo nh.Chung ta a biet rang, vi cac bien cap phat tnh, trnh bien dch se t lay lainhng vung nh a cap phat cho chung. Vi cac bien cap phat ong th ngc lai,vung nh phai c chng trnh giai phong khi khong con s dung en. Nh

    vay, oi vi moi phng an hien thc cu the cho moi lp CTDL ma co s dungvung nh cap phat ong, chung ta se xay dng destructor cho noe lo viec giaiphong vung nh trc khi oi tng b huy.

    Trong C++, constructor co cung ten vi lp va khong co kieu tra ve. Constructor cua mot lpc goi mot cach t ong khi mot oi tng cua lp o c khai bao.

    ac ta constructor cho lp ngan xep, ma chung ta at ten la lp Stack, nhsau:template

    Stack::Stack();pre: khong co.post: oi tng ngan xep va c tao ra la rong.uses: khong co.

    e ac ta tiep cho cac phng thc khac, chung ta chon ra cac tr cuaErrorCode u e s dung cho lp Stack la:

    success, overflow, underflow

    Cac thong so danh cho cac phng thc di ay c thiet ke tuy vao chc nangva nhu cau cua tng phng thc.

    Phng thc loai mot phan t ra khoi ngan xep:template

    ErrorCode Stack::pop();

    pre: khong co.post: neu ngan xep khong rong, phan t tai nh ngan xep c lay i, ErrorCode tra ve la

    success; neu ngan xep rong, ErrorCode tra ve la underflow, ngan xep khong oi.uses: khong co.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    20/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 20

    Phng thc them mot phan t d lieu vao ngan xep:template

    ErrorCode Stack::push(const Entry &item);

    pre: khong co.post: neu ngan xep khong ay, item c them vao tren nh ngan xep, ErrorCode tra ve la

    success; neu ngan xep ay, ErrorCode tra ve la overflow, ngan xep khong oi.uses: khong co.

    Lu y rang item trong thong so cua push ong vai tro la tham tr nen ckhai bao la tham chieu hang (const reference). Trong khi o trong phng thctop, item la tham bien.

    Hai phng thc top va empty c khai bao const v chung khong lam thayoi ngan xep.template

    ErrorCode Stack:: top(Entry &item) const;pre: khong copost: neu ngan xep khong rong, phan t tai nh ngan xep c chep vao item, ErrorCodetra

    ve lasuccess; neu ngan xep rong, ErrorCode tra ve la underflow; ca hai trng hpngan xep eu khong oi.

    uses: khong co.

    template

    bool Stack::empty() const;pre: khong copost: neu ngan xep rong, ham tra ve true; neu ngan xep khong rong, ham tra ve false, ngan

    xep khong oi.uses: khong co.

    Sinh vien co the ac ta tng t cho phng thc full, clear, hay cacphng thc bo sung khac.T nay ve sau, chung ta quy c rang neu hai phanprecondition hoac uses khongco th chung ta khong can phai ghi ra.

    Chung ta co phan giao tiep ma lp Stack danh cho ngi lap trnh s dungnh sau:template

    class Stack {

    public:

    Stack();bool empty() const;

    ErrorCode pop();

    ErrorCode top(Entry &item) const;

    ErrorCode push(const Entry &item);

    };

    Vi mot ac ta nh vay chung ta a hoan toan co the s dung lp Stack trongcac ng dung. Sinh vien nen tiep tuc xem en phan trnh bay cac ng dung vengan xep trong chng 14. Di ay la chng trnh minh hoa viec s dung ngan

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    21/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 21

    xep thong qua cac ac ta tren. Chng trnh giai quyet bai toan in cac so theo tht ngc vi th t nhap vao a c trnh bay trong phan m au.

    V du:Chng trnh se oc vao mot so nguyen n va n so thc ke o. Moi so thc

    nhap vao se c lu vao ngan xep. Cuoi cung cac so c lay t ngan xep va in

    ra.#include //S dung lp Stack.int main()

    /*

    pre: Ngi s dung nhap vao mot songuyen n va n so thc.post: Cac so se c in ra theo th t ngc.uses: lp Stack va cac phng thc cua Stack.*/

    {

    int n;

    double item;

    Stack numbers;

    cout

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    22/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 22

    Tnh trong sang cua chng trnh: u iem khac cua che dau thong tin latnh trong sang cua chng trnh. Nhng ten goi quen thuoc danh cho cac thaotac tren cau truc d lieu giup chung ta hnh dung ro rang giai thuat cua chngtrnh. Chang han vi thao tac tren ngan xep, ngi ta thng quen dung cac t:push ay vao ngan xep, pop lay ra khoi ngan xep.

    Thiet ke t tren xuong: S tach ri gia viec s dung cau truc d lieu va cachhien thc cua no con giup chung ta thc hien tot hn qua trnh thiet ke t trenxuong (top-down design) ca cho cau truc d lieu va ca cho chng trnh ng dung.

    2.3.Cac phng an hien thc ngan xepTrong phan nay chung ta se tm hieu cac phng an hien thc cho lp ngan

    xep. Cac u nhc iem cua cac cach hien thc khac nhau oi vi mot ac ta

    CTDL thng lien quan en nhng van e sau ay: Cho phep hay khong cho phep lu tr va thao tac vi lng d lieu ln. Toc o x ly cua cac phng thc.V ngan xep la mot trng hp ac biet cua danh sach, nen a en luc chung

    ta ban en cach lu tr cac phan t trong mot danh sach. Co hai phng an lutr chnh:

    Cac phan t nam ke nhau trong bo nh ma chung ta hay dung t lien tuc(contiguous) e noi en.

    Cac phan t khong nam ke nhau trong bo nh ma chung ta dung cong cu lacac bien kieu con tro (pointer) e quan ly, trng hp nay chung ta goi ladanh sach lien ket (linked list).

    Hien thc lien tuc n gian nhng b han che cho kch thc can c biettrc. Neu dung mang ln qua se b lang ph, nhng nho qua de b ay. Hien thclien ket linh ong hn, no ch b ay khi bo nh thc s khong con cho trong na.

    2.4.Hien thc ngan xep2.4.1.Hien thc ngan xep lien tuc

    e hien thc lp ngan xep lien tuc (contiguous stack), chung ta dung motmang (array trong C++) e cha cac phan t cua ngan xep va mot thuoc tnhcountcho biet so phan t hien co trong ngan xep.

    const int max = 10; // Dung so nho e kiem tra chng trnh.template

    class Stack {

    public:

    Stack();

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    23/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 23

    bool empty() const;

    ErrorCode pop();

    ErrorCode top(Entry &item) const;

    ErrorCode push(const Entry &item);

    private:

    int count;

    Entry entry[max];

    };

    Push, pop, va cac phng thc khacY tng chung cua cac phng thc nay nh sau:

    Viec them d lieu mi ch thc hien c khi ngan xep con cho trong. Viec loai phan t khoi ngan xep hoac xem phan t tren nh ngan xep ch

    thc hien c khi ngan xep khong rong. Do countla so phan t hien co trong ngan xep va ch so cua array trong

    C++ c bat au t 0, nen count-1chnh la ch so cua phan t tai nhngan xep khi can xem hoac can loai bo khoi ngan xep.

    Khi can them phan t mi, countla ch so ch en v tr con trong ngaytren nh ngan xep, cung la ch so cua phan t mi neu c them vao.

    Khi ngan xep c them hoac lay phan t th thuoc tnh countluon phaic cap nhat lai.

    Constructor tao oi tng ngan xep rong bang cach gan thuoc tnh countbang 0. Lu y rang chung ta khong can quan tam en tr cua nhng phant nam t v tr countcho en het mang (max -1), cac v tr t 0 encount-1 mi thc s cha nhng d lieu a c a vao ngan xep.

    template ErrorCode Stack::push(const Entry &item)

    /*

    post: neu ngan xep khong ay, item c them vao tren nh ngan xep, ErrorCode tra ve lasuccess; neu ngan xep ay, ErrorCode tra ve la overflow, ngan xep khong oi.

    */

    {

    ErrorCode outcome = success;

    if (count >= max)

    outcome = overflow;

    else

    entry[count++] = item;

    return outcome;

    }

    template

    ErrorCode Stack::pop()

    /*

    post: neu ngan xep khong rong, phan t tai nh ngan xep c lay i, ErrorCode tra ve lasuccess; neu ngan xep rong, ErrorCode tra ve la underflow, ngan xep khong oi.

    */

    {

    ErrorCode outcome = success;

    if (count == 0)

    outcome = underflow;

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    24/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 24

    else --count;

    return outcome;

    }

    template

    ErrorCode Stack::top(Entry &item) const

    /*post: neu ngan xep khong rong, phan t tai nh ngan xep c chep vao item, ErrorCodetra

    ve la success; neu ngan xep rong, ErrorCode tra ve la underflow; ca hai trng hpngan xep eu khong oi.

    */

    {

    ErrorCode outcome = success;

    if (count == 0)

    outcome = underflow;

    else

    item = entry[count - 1];

    return outcome;

    }

    template

    bool Stack::empty() const

    /*

    post: neu ngan xep rong, ham tra ve true; neu ngan xep khong rong, ham tra ve false, nganxep khong oi.

    */

    {

    bool outcome = true;

    if (count > 0) outcome = false;

    return outcome;

    }

    Hnh 2.2- Bieu dien cua d lieu trong ngan xep lien tuc.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    25/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 25

    Constructor se khi tao mot ngan xep rong.

    template

    Stack::Stack()

    /*

    post: ngan xep c khi tao rong.*/

    {count = 0;

    }

    2.4.2.Hien thc ngan xep lien ketCau truc lien ket c tao bi cac phan t , moi phan t cha hai phan: mot

    cha thong tin chnh la d lieu cua phan t, mot cha con tro tham chieu enphan t ke, va c khai bao trong C++ nh sau:template

    structNode {

    // data membersEntry entry;

    Node *next;

    // constructors

    Node();

    Node(Entry item, Node *add_on =NULL);

    };

    Va ay la hnh anh cua mot phan t trong cau truc lien ket:

    Hnh di ay bieu dien mot cau truc lien ket co con tro ch en phan t au

    la First_node.

    Van e at ra la chung ta nen chon phan t au hay phan t cuoi cua cau truclien ket lam nh cua ngan xep. Thoat nhn, dng nh viec them mot node mivao cuoi cau truc lien ket la de hn (tng t nh oi vi ngan xep lien tuc).Nhng viec loai mot phan t cuoi la kho bi v viec xac nh phan t ngay trc

    Hnh2.3- Cau truc Node cha con tro

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    26/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 26

    phan t b loai khong the thc hien nhanh chong. Ly do la cac con tro trong cautruc lien ket ch theo mot chieu. Khi loai i mot phan t cuoi cau truc lien ket,chung ta phai bat au t au, lan theo cac con tro, mi xac nh c phan tcuoi. Do o, cach tot nhat la viec them vao hay loai phan t eu c thc hien phan t au cua cau truc lien ket. nh cua ngan xep lien ketc chon la phant au cua cau truc lien ket.

    Moi cau truc lien ket can mot thanh phan con tro ch en phan t au tien.oi vi ngan xep lien ket, thanh phan nay luon ch en nh cua ngan xep. Domoi phan t trong cau truc lien ket co tham chieu en phan t ke nen t phan tau tien chung ta co the en moi phan t trong ngan xep lien ket bang cach lantheo cac tham chieu nay. T o, thong tin duy nhat can thiet e co the truy xuatd lieu trong ngan xep lien ket la a ch cua phan t tai nh. Phan t tai ayngan xep luon co tham chieu la NULL.

    template

    class Stack {

    public:

    Stack();

    bool empty() const;

    ErrorCode push(const Entry &item);

    ErrorCode pop();

    ErrorCode top(Entry &item) const;

    protected:

    Node *top_node;

    };

    Do lp Stack gi ay ch cha mot phan t d lieu, chung ta co the cho rangviec dung lp co the khong can thiet, thay vao o chung ta dung luon mot bien echa a ch cua nh ngan xep. Tuy nhien, ay co bon ly do e s dung lpStack.

    Ly do quan trong nhat la s duy tr tnh ong kn: neu chung ta khong sdung lp ngan xep, chung ta khong the xay dng cac phng thc cho nganxep.

    Hnh 2.4- Cau truc lien ket

    First node

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    27/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 27

    Ly do th hai la e duy tr s khac biet luan ly gia lp ngan xep, ma banthan c tao bi cac phan t la cac node, vitop cua ngan xep la mot contro tham chieu en ch mot node. Viec chung ta ch can nam gi top cuangan xep, la co the tm en moi phan t khac cua ngan xep tuy la hiennhien, nhng khong thch ang vi cau truc luan ly nay.

    Ly do th ba la e duy tr tnh nhat quan vi cac cau truc d lieu khac cungnh cac cach hien thc khac nhau cua mot cau truc d lieu: mot cau truc dlieu bao gom cac d lieu va mot tap cac thao tac.

    Cuoi cung, viec xem ngan xep nh mot con tro en nh cua no khong cphu hp vi cac kieu d lieu. Thong thng, cac kieu d lieu phai co khanang ho tr trong viec debug chng trnh bang cach cho phep trnh biendch thc hien viec kiem tra kieu mot cach tot nhat.

    Chung ta hay bat au bang mot ngan xep rong, top_node == NULL, va xemxet viec them phan t au tien vao ngan xep. Chung ta can tao mot node mi

    cha ban sao cua thong so item nhan vao b phng thc push. Node nay ctruy xuat bi bien con tro new_top. Sau o a ch cha trong new_top se cchep vao top_node cua Stack (hnh 2.5a):

    Node *new_top = new Node(item);

    top_node = new_top;

    Chu y rang ay, constructor khi tao mot nodemi a gan next cua no bangNULL, va chung ta hoan toan an tam v khong bao gi co con tro mang tr ngaunhien.

    Hnh 2.5- Them mot phan t vao ngan xep lien ket.b

    (a)

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    28/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 28

    Neu trung thanh vi nguyen tac Khong bao gi e mot bien con tro mang tr

    ngau nhien, chung ta se giam c ganh nang ang ke trong cong sc lap trnh

    v khong phai mat qua nhieu th gi va au au do nhng loi ma no gay ra.

    e tiep tuc, xem nh chung ta a co mot ngan xep khong rong. e a them

    phan t vao ngan xep, chung ta can them mot node vao ngan xep. Trc hetchung ta can tao mot node mi c tham chieu bi con tro new_top, node nayphai co d lieu la item va lien ket next tham chieu en top cu cua ngan xep.Sau o chung ta se thay oi top_node cua ngan xep tham chieu en node minay (hnh 2.5b). Th t cua hai phep gan nay rat quan trong: neu chung ta lamtheo th t ngc lai, viec thay oi top_nodesm se lam mat kha nang truy xuatcac phan t a co cua ngan xep. Chung ta co phng thc push nh sau:

    template

    ErrorCode Stack::push(const Entry &item)

    /*post: neu ngan xep khong ay, item c them vao tren nh ngan xep, ErrorCode tra ve la

    success; neu ngan xep ay, ErrorCode tra ve la overflow, ngan xep khong oi.*/

    {

    Node *new_top = new Node(item, top_node);

    if (new_top == NULL) return overflow;

    top_node = new_top;

    return success;

    }

    Khi thay oi cac tham chieu (cac bien con tro), th t cac phep gan luon can

    c xem xet mot cach ky lng.

    .

    Phng thc push tra ve ErrorCode la overflow trong trng hp bo nhong khong tm c cho trong e cap phat cho phan t mi, toan t new tra vetr NULL.

    Viec lay mot phan t ra khoi ngan xep thc s n gian:

    Hnh 2.6- Lay mot phan t ra khoi ngan xep lien ket.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    29/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 29

    template

    ErrorCode Stack::pop()

    /*

    post: neu ngan xep khong rong, phan t tai nh ngan xep c lay i, ErrorCode tra ve lasuccess; neu ngan xep rong, ErrorCode tra ve la underflow, ngan xep khong oi.

    */

    {

    Node *old_top = top_node;

    if (top_node == NULL) return underflow;top_node = old_top->next;

    delete old_top;

    return success;

    }

    Lu y rang trong phng thc pop, ch can gantop_node cua ngan xep thamchieu en phan t th hai trong ngan xep th phan t th nhat xem nh a cloai khoi ngan xep. Tuy nhien, neu khong thc hien viec giai phong phan t trennh ngan xep, chng trnh se gay ra rac. Trong ng dung nho, phng thc popvan chay tot. Nhng neu ng dung ln goi phng thc nay rat nhieu lan, solng rac se ln len ang ke dan en khong u vung nh e chng trnh chaytiep.

    Khi mot cau truc d lieu c hien thc, no phai c x ly tot trong moi

    trng hp e co the c s dung trong nhieu ng dung khac nhau.

    2.4.3.Ngan xep lien ket vi s an toanKhi s dung cac phng thc ma chung ta va xay dng cho ngan xep lien ket,

    ngi lap trnh co the vo tnh gay nen rac hoac pha v tnh ong kn cua cac oitng ngan xep. Trong phan nay chung ta se xem xet chi tiet ve cac nguy c lammat i tnh an toan va tm hieu them ba phng thc ma C++ cung cap e khacphuc van e nay, o la cac tac vu huy oi tng (destructor), tao oi tng bangcach sao chep t oi tng khac (copy constructor)va phep gan c nh nghalai (overloaded assignment). Hai tac vu au khong c goi tng minh bingi lap trnh, chung se c trnh bien dch goi luc can thiet; rieng tac vu thba c goi bi ngi lap trnh khi can gan hai oi tng. Nh vay, viec bo sungnham bao am tnh an toan cho lp Stack khong lam thay oi ve be ngoai cua

    Stack oi vi ngi s dung.

    2.4.3.1.Ham huy oi tng (Destructor)Gia s nh ngi lap trnh viet mot vong lap n gian trong o khai bao mot

    oi tng ngan xep co ten la small va a d lieu vao. Chang han chung ta xemxet oan lenh sau:

    for (int i=0; i < 1000000; i++) {

    Stack small;

    small.push(some_data);

    }

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    30/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 30

    Trong moi lan lap, oi tng small c tao ra, d lieu them vao thuoc vungbo nh cap phat ong, sau o oi tng small khong con ton tai khi ra khoi tamvc hoat ong cua no (scope). Gia s chng trnh s dung ngan xep lien ket chien thc nh hnh 2.4. Ngay khi oi tng smallkhong con ton tai , d lieutrong ngan xep tr thanh rac, v ban than oi tng small ch cha con trotop_node, vung nh ma con tro nay chiem se c tra ve cho he thong, con cacd lieu ma con tro nay tham chieu en thuoc vung nh cap phat ong van chac tra ve he thong. Vong lap tren c thc hien hang trieu lan, va rac se btch luy rat nhieu. Trong trng hp nay khong the buoc toi ngi lap trnh: dovong lap se chang gay ra van e g neu ngi lap trnh s dung hien thc nganxep lien tuc, moi vung nh danh cho d lieu trong ngan xep lien tuc eu c giaiphong khi ngan xep ra khoi tam vc.

    Mot ieu chac chan rang khi hien thc ngan xep lien ket, chung tacan phaicanh bao ngi s dung khong c e mot oi tng ngan xep khong rong ra

    khoi tam vc, hoac chung ta phai lam rong ngan xep trc khi no ra khoi tamvc.

    Ngon ng C++ cung cap cho lp phng thc destructore giai quyet van e nay. oi vi moilp, destructor la mot phng thc ac biet c thc thi cho oi tng cua lp ngay trc khi oitng ra khoi tam vc. Ngi s dung khong can phai goi destructor mot cach tng minh vatham ch cung khong can biet en s ton tai cua no. oi vi ngi s dung, mot l p co destructorco the c thay the mot cach n gian bi mot lp ma khong co no .

    Destructor thng c s dung e giai phong cac oi tng cap phat ong ma

    chung co the tao nen rac. Trong trng hp cua chung ta, chung ta nen bo sungthem destructor cho lp ngan xep lien ket. Sau hieu chnh nay, ngi s dung sekhong the gay ra rac khi e mot oi tng ngan xep khong rong ra khoi tam vc.

    Destructor c khai bao nh mot phng thc cua lp, khong co thong so vakhong co tr tra ve. Ten cua destructor la ten lp co them dau ~ pha trc.

    Stack::~Stack();

    Do phng thc pop c lap trnh e loai mot phan t ra khoi ngan xep,

    chung ta co the hien thc destructor cho ngan xep bang cach lap nhieu lan viecgoi pop:template

    Stack::~Stack() // Destructor

    /*

    post: ngan xep a c lam rong.*/

    {

    while (!empty())

    pop();

    }

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    31/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 31

    oi vi moi cau truc lien ket chung ta can viet destructor e don dep cac oi

    tng trc khi chung ra khoi tam vc.

    2.4.3.2.nh ngha lai phep ganNgay khi chung ta a bo sung destructor cho ngan xep lien ket, ngi s dungcung co the tao rac khi viet vong lap ta nh v du sau.

    Stack outer_stack;

    for (int i=0; i < 1000000; i++) {

    Stack inner_stack;

    inner_stack.push(some_data);

    inner_stack = outer_stack;

    }

    au tien la oi tng outer_stack c tao ra, sau o vong lap c thc hienMoi lan lap la mot lan tao mot oi tng inner_stack, a d lieu vaoinner_stack, gan outer_stack vao inner_stack. Lenh gan nay gay ra mot van enghiem trong cho hien thc ngan xep lien ket cua chung ta. Thong thng, C++thc hien phep gan cac oi tng bang cach chep cac thuoc tnh cua cac oi tng.Do o, outer_stack.top_node c ghi e len inner_stack.top_node, lam cho d lieucu tham chieu bi inner_stack.top_node tr thanh rac. Cung giong nh phantrc, neu hien thc ngan xep lien tuc c s dung th khong co van e g xayra. Nh vay, loi la do hien thc ngan xep lien ket con thieu sot.

    Hnh 2.7 cho thay tac vu gan khong c thc hien nh mong muon. Sau phepgan, ca hai ngan xep cung chia xe cac node. Cuoi moi lan lap, destructor cuainner_stack se giai phong moi d lieu cua outer_stack. Viec giai phong dlieu cua outer_stack con lam cho outer_stack.top_node tr thanh thamchieu treo, co ngha la tham chieu en vung nh khong xac nh.

    Hnh 2.7- ng dung chep ngan xep.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    32/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 32

    Van e sinh ra bi phep gan tren ngan xep lien ket la do no chep cac thamchieu ch khong phai chep cac tr. Phep gan trong trng hp nay c goi laphep gan co ng ngha tham chieu (reference semantics) . Ngc lai, khi phep ganthc s chep d lieu trong CTDL chung ta goi la phep gan co ng ngha tr (value

    semantics). Trong hien thc lp ngan xep lien ket, hoac chung ta phai canh baocho ngi s dung rang phep gan ch la phep gan co ng ngha tham chieu, hoac

    chung ta phai lam cho trnh bien dch C++ thc hien phep gan co ng ngha tr.

    Trong C++, chung ta hien thc mot phng thc ac biet goi la phep gan cnh ngha lai (overloaded assignment) e nh ngha lai cach thc hien phepgan. Khi trnh bien dch C++ dch mot phep gan co dang x = y, no u tien chonphep gan c nh ngha lai trc neu nh lp x co nh ngha. Ch khi khong cophng thc nay, trnh bien dch mi dch phep gan nh la phep gan tng bit oivi cac thuoc tnh cua oi tng (neu thuoc tnh la con tro th phep gan tr thanhphep gan co ng ngha tham chieu). Chung ta can nh ngha lai e phep gan cho

    ngan xep lien ket tr thanh phep gan co ng ngha tr.

    Co mot vai cach e khai bao va hien thc phep gan c nh ngha lai. Cachn gian la khai bao nh sau:

    void Stack::operator= ( const Stack &original );

    Phep gan nay co the c goi nh sau:x.operator = (y);

    hoac goi theo cu phap thng dung:

    x = y;

    Phep gan nh ngha lai cho ngan xep lien ket can lam nhng viec sau:

    Chep d lieu t ngan xep c truyen vao thong qua thong so. Giai phong vung nh chiem gi bi d lieu cua oi tng ngan xep ang

    c thc hien lenh gan. Chuyen cac d lieu va chep c cho oi tng ngan xep c gan.

    template

    void Stack::operator = (const Stack &original) // Overload assignment

    /*

    post: oi tng ngan xep c gan cha cac d lieu giong het ngan xep c truyen vao quathong so.

    */

    {

    Node *new_top, *new_copy, *original_node = original.top_node;

    if (original_node == NULL) new_top = NULL;

    else { // Tao ban sao cac node.new_copy = new_top = new Node(original_node->entry);

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    33/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 33

    while (original_node->next != NULL) {

    original_node = original_node->next;

    new_copy->next = new Node(original_node->entry);

    new_copy = new_copy->next;

    }

    }

    while (!empty()) // Lam rong ngan xep se c gan.pop();

    top_node = new_top; // Ngan xep c gan se nam gi ban sao.}

    Lu y rang trong phng thc tren chung ta tao ra mot ban sao t ngan xeporiginal trc, roi mi don dep ngan xep se c gan bang cach goi phngthc popnhieu lan. Nh vay neu trong ng dung co phep gan x = x th d lieucung khong b sai.

    Phep gan c nh ngha lai nh tren thoa yeu cau la phep gan co ng nghatr, tuy nhien e co the s dung trong trng hp:first_stack=second_stack=third_stack=..., phep gan phai tra veStack&(tham chieu en lp Stack).

    2.4.3.3. Copy constructorTrng hp cuoi cung ve s thieu an toan cua cac cau truc lien ket la khi trnh

    bien dch can chep mot oi tng. Chang han, mot oi tng can c chep khino la tham tr gi cho mot ham. Trong C++, tac vu chep mac nhien la chep cacthuoc tnh thanh phan cua lp. Cung giong nh minh hoa trong hnh 2.7, tac vuchep mac nhien nay se dan en viec cac oi tng cung chia xe d lieu. Noi mot

    cach khac, tac vu chep mac nh co ng ngha tham chieu khi oi tng co thuoctnh kieu con tro. ieu nay lam cho ngi s dung co the vo tnh lam mat dlieu:

    void destroy_the_stack (Stack copy)

    {

    }

    int main()

    {

    Stack vital_data;

    destroy_the_stack(vital_data);

    }

    Ham destroy_the_stack nhan mot ban sao copy cua vital_data. Ban saonay cung chia xe d lieu vi vital_data, do o khi ket thuc ham, destructor thchien tren ban sao copy se lam mat luon d lieu cua vital_data.

    C++ cho phep lp co them phng thc copy constructor e tao mot oitng mi giong mot oi tng a co. Neu chung ta hien thc copy constructor

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    34/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 34

    cho lp Stack th trnh bien dch C++ se u tien chon tac vu chep nay thay chotac vu chep mac nh. Chung ta can hien thc copy constructor e co c ngngha tr.

    oi vi moi lp, khai bao chuan cho copy constructor cung giong nh khai baoconstructor nhng co them thong so la tham chieu hang en oi tng cua lp:

    Stack::Stack ( const Stack &original );

    Do oi tng goi copy constructor la mot oi tng rong va c tao mi nenchung ta khong phai lo don dep d lieu nh trng hp oi vi phep gan cnh ngha lai. Chung ta ch viec chep node au tien va sau o dung vong lap echep tiep cac node con lai.

    template

    Stack::Stack(const Stack &original) // copy constructor

    /*post: oi tng ngan xep va c tao ra co d lieu giong vi ngan xep original*/

    {

    Node *new_copy, *original_node = original.top_node;

    if (original_node == NULL) top_node = NULL;

    else { // Tao ban sao cho cac node.top_node = new_copy = new Node(original_node->entry);

    while (original_node->next != NULL) {

    original_node = original_node->next;

    new_copy->next = new Node(original_node->entry);

    new_copy = new_copy->next;

    }

    a(}

    Mot cach tong quat, oi vi moi lp lien ket, hoac chung ta bo sung copyconstructor, hoac chung ta canh bao ngi s dung rang viec chep oi tng cong ngha tham chieu.

    2.4.4.ac ta ngan xep lien ket a hieu chnhChung ta ket thuc phan nay bang ac ta a c hieu chnh di ay cho ngan

    xep lien ket. Phan ac ta nay co c moi ac tnh an toan ma chung ta a phan

    tch.template

    class Stack {

    public:

    // Cac phng thc chuan cua lp Stack:Stack();

    bool empty() const;

    ErrorCode push(const Entry &item);

    ErrorCode pop();

    ErrorCode top(Entry &item) const;

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    35/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 35

    // Cac ac ta am bao tnh an toan cho cau truc lien ket:~Stack();

    Stack(const Stack &original);

    void operator =(const Stack &original);

    protected:

    Node *top_node;

    };

    Tren ay la phan trnh bay ay u nhat ve nhng yeu cau can co oi vi nganxep lien ket, nhng no cung ung vi cac cau truc lien ket khac. Trong cac phansau cua giao trnh nay se khong giai thch them ve 3 tac vu nay na, sinh vien tphai hoan chnh khi hien thc bat ky CTDL nao co thuoc tnh kieu con tro.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    36/425

    Chng 2 Ngan xep

    Giao trnh Cau truc d lieu va Giai thuat 36

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    37/425

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    38/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 38

    nh ngha: Mot hang cac phan t kieu T la mot chuoi noi tiep cac phan t cua T,kem cac tac vu sau:1. Tao mi mot oi tng hang rong.2. Them mot phan t mi vao hang, gia s hang cha ay (phan t d lieu mi

    luon c them vao cuoi hang).3. Loai mot phan t ra khoi hang, gia s hang cha rong (phan t b loai la phan

    t tai au hang, thng la phan t va c x ly xong).4. Xem phan t tai au hang (phan t sap c x ly).

    3.2.ac ta hange hoan tat nh ngha cua cau truc d lieu tru tng hang, chung ta ac ta

    moi tac vu ma hang thc hien. Cac ac ta nay cung tng t nh cac ac ta chongan xep, chung ta a ra ten, kieu tra ve, danh sach thong so, precondition,

    postcondition va uses cho moi phng thc. Entry bieu dien mot kieu tong quat

    cho phan t cha trong hang.

    template

    Queue::Queue();

    post: oi tng hang a ton tai va c khi tao la hang rong.

    template

    ErrorCode Queue::append(const Entry &item);

    post:neu hang con cho, itemc them vao tai rear, ErrorCode tra ve la success; ngc lai,

    ErrorCode tra ve la overflow, hang khong oi.

    template

    ErrorCode Queue::serve();

    post:neu hang khong rong, phan t tai front c lay i, ErrorCode tra ve la success; ngc

    lai, ErrorCode tra ve la underflow, hang khong oi.

    template

    ErrorCode Queue::retrieve(const Entry &item) const;

    post: neu hang khong rong, phan t tai front c chep vao item, ErrorCode tra ve la

    success; ngc lai, ErrorCode tra ve la underflow; ca hai trng hp hang eu khong

    oi.

    template

    bool Queue::empty() const;

    post:ham tra ve true neu hang rong; ngc lai, ham tra vefalse.

    T append (them vao hang) vaserve (a c phuc vu) c dung cho cac tac

    vu c ban tren hang e ch ra mot cach ro rang cong viec thc hien oi vi hang,

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    39/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 39

    va e tranh nham lan vi nhng t ma chung ta se dung vi cac cau truc d lieukhac.

    Chung ta co lp Queue nh sau:

    template

    class Queue {

    public:

    Queue();

    bool empty() const;

    ErrorCode append(const Entry &item);

    ErrorCode serve();

    ErrorCode retrieve(Entry &item) const;

    };

    Ngoai cac tac vu c ban nhappend, serve, retrieve, vaemptyoi khi

    chung ta can them mot so tac vu khac. Chang han nh tac vu fulle kiem tra

    xem hang a ay hay cha.

    Co ba tac vu rat tien li oi vi hang: clear e don dep cac phan t trong

    mot hang co san va lam cho hang rong, sizecho biet so phan t hien co tronghang, cuoi cung la serve_and_retrieve gom hai tac vu serve va retrievelam mot v ngi s dung thng goi hai tac vu nay mot luc.

    Chung ta co the bo sung cac tac vu tren vao lp hang a co tren. Tuy nhien,chung ta co the tao lp mi co the s dung lai cac phng thc va cach hien thccua cac lp a co. Trong trng hp nay chung ta xay dng lp Extended_Queue

    e bo sung cac phng thc them vao cac phng thc c ban cua lp Queue. Lp

    Extended_Queue c goi la lp dan xuat t lp Queue.

    Khai niem dan xuat cung cap mot cach nh ngha cac lp mi n gian bangcach bo sung them cac phng thc vao mot lp co san. Kha nang cua lp danxuat s dung lai cac thanh phan cua lp c s c goi la s tha ke. S tha ke(inheritance) la mot trong cac ac tnh c ban cua lap trnh hng oi tng.

    Chung ta minh hoa moi quan he gia lp Queue va lp dan xuat

    Extended_Queue bi s o tha ke (hnh 3.2a). Mui ten ch t lp dan xuat en

    lp c s ma no tha ke. Hnh 3.2b minh hoa s tha ke cac phng thc va cacphng thc bo sung.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    40/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 40

    Chung ta co lp Extended_Queue:template

    class Extended_Queue:public Queue {

    public:

    bool full() const;

    int size() const;

    void clear();

    ErrorCode serve_and_retrieve(Entry &item);

    };

    T khoa public trong khai bao tha ke co ngha la kha nang ngi s dungnhn thay oi vi cac thanh phan ma lp dan xuat co c qua s tha ke segiong het nh kha nang ngi s dung nhn thay chung lp c s.

    ac ta cua cac phng thc bo sung:

    template

    bool Extended_Queue::full() const;

    post: tra ve true neu hang ay, ngc lai, tra vefalse. Hang khong oi.

    template

    void Extended_Queue::clear();

    post:moi phan t trong hang c loai khoi hang, hang tr nen rong.

    template

    int Extended_Queue::size() const;

    post:tra ve so phan t hien co cua hang. Hang khong oi.

    Hnh 3.2- S tha ke va lp dan xuat

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    41/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 41

    template

    ErrorCode Extended_Queue::serve_and_retrieve(const Entry &item);

    post:neu hang khong rong, phan t tai front c chep vao item ong thi c loai khoi

    hang, ErrorCode tra ve la success; ngc lai, ErrorCode tra ve la underflow, hang

    khong oi.

    Moi quan he gia lp Extended_Queue va lp Queue thng c goi la moi

    quan he is-a v moi oi tng thuoc lp Extended_Queue cung la mot oi tng

    thuoc lp Queue ma co them mot so ac tnh khac, o la cac phng thc

    serve_and_retrieve, full, size va clear.

    3.3.Cac phng an hien thc hang3.3.1.Cac phng an hien thc hang lien tuc3.3.1.1. Mo hnh vat ly

    Tng t nh chung ta a lam vi ngan xep, chung ta co the tao mot hangtrong bo nh may tnh bang mot day (kieu d lieu array) e cha cac phan t

    cua hang. Tuy nhien, ay chung ta can phai nam gi c ca frontvarear.

    Mot cach n gian la chung ta gi front luon la v tr au cua day. Luc o, e

    them mi mot phan t vao hang, chung ta tang bien em bieu dien rear y het

    nh chung ta them phan t vao ngan xep. e lay mot phan t ra khoi hang,chung ta phai tra mot gia at cho viec di chuyen tat ca cac phan t hien co trong

    hang ti mot bc e lap ay cho trong tai front. Mac du cach hien thc nay rat

    giong vi hnh anh hang ngi sap hang i e c phuc vu, nhng no la motla chon rat d trong may tnh.

    3.3.1.2. Hien thc tuyen tnhe viec x ly hang co hieu qua, chung ta dung hai ch so e nam gi front va

    rear ma khong di chuyen cac phan t. Muon them mot phan t vao hang, n

    gian chung ta ch can tang rear len mot va them phan t vao v tr nay. Khi lay

    mot phan t ra khoi hang chung ta lay phan t tai v tr front va tang front

    len mot. Tuy nhien phng phap nay co mot nhc iem ln, o la front va

    rear luon luon tang ch khong giam. Ngay ca khi trong hang khong bao gi coqua hai phan t, hang van oi hoi mot vung nh khong co gii han neu nh cactac vu c goi lien tuc nh sau:

    append, append, serve, append, serve, append, serve, append,

    serve, append, ...

    Van e ay la khi cac phan t trong hang dch chuyen ti trong day th cacv tr au cua day se khong bao gi c s dung en. Chung ta co the hnh dung

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    42/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 42

    hang luc o trong nh mot con ran luon trn mnh ti. Con ran co luc dai ra, coluc ngan lai, nhng neu c trn ti mai theo mot hng th cung phai en luc nogap iem dng cua bo nh.

    Tuy nhien, cung can chu y rang trong cac ng dung ma co luc hang tr nenrong (khi mot loat cac yeu cau ang i a c giai quyet het tai mot thi iem

    nao o), th tai thi iem nay hang co the c sap xep lai, front va rear cgan tr lai ve au day. Trng hp nay cho thay viec s dung mot s o n giangom hai ch so va mot bo nh tuyen tnh nh va neu la mot cach hien thc cohieu qua cao.

    3.3.1.3. Day vongVe y niem, chung ta co the khac phuc tnh thieu hieu qua trong viec s dung

    bo nh bang cach hnh dung day co dang vong thay v tuyen tnh. Khi phan tc them vao hay lay ra khoi hang, iem au cua hang se uoi theo iem cuoi

    cua hang vong theo day, va nh vay con ran van co the trn ti vo han nhngvan b nhot trong mot vong co gii han. Tai cac thi iem khac nhau, hang sechiem nhng phan khac nhau trong day vong, nhng chung ta se khong bao giphai lo ve s vt gii han bo nh tr khi day that s khong con phan t trong,

    trng hp nay c xem nh hang ay, ErrorCode se nhan tr overflow.

    Hien thc cua day vong

    Van e tiep theo cua chung ta la dung mot day tuyen tnh e mo phong mot

    day vong. Cac v tr trong vong tron c anh so t 0 en max-1, trong o maxla tong so phan t trong day vong. e hien thc day vong, chung ta cung s dungcac phan t c anh so tng t day tuyen tnh. S thay oi cac ch so ch n

    gian la phep lay phan d trong so hoc: khi mot ch so tang vt qua gii han max-

    1, no c bat au tr lai vi tr 0. ieu nay tng t viec cong them gi trongong ho mat tron, cac gi c anh so t 1 en 12, neu chung ta cong them 4 givao 10 gi chung ta se co 2 gi.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    43/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 43

    Day vong trong C++

    Trong C++, chung ta co the tang ch soi trong mot day vong nh sau:

    i = ((i+1) == max) ? 0: (i+1);

    hoac if ((i+1) == max) i = 0; else i = i+1;

    hoac i = (i+1) % max;

    Cac ieu kien bien

    Trc khi viet nhng giai thuat them hoac loai phan t ra khoi hang, chung tahay xem xet en cac ieu kien bien (boundary conditions), o la cac dau hieu chobiet hang con rong hay a ay.

    Hnh 3.3- Hang trong day vong

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    44/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 44

    Neu trong hang ch co mot phan t th ca front va rear eu ch en phan t

    nay (hnh 3.4 a). Khi phan t nay c loai khoi hang, front se tang len 1. Do

    o hang la rong khi rear ch v tr ngay trc front (hnh 3.4 b).

    Do rear di chuyen ve pha trc moi khi them phan t mi, nen khi hang sap

    ay va bang cach di chuyen vong th rear cung se gan gap front tr lai (hnh

    3.3 c). Luc nay khi phan t cuoi cung c them vao lam cho hang ay th rear

    cung ch v tr ngay trc front (hnh 3.4 d).

    Chung ta gap mot kho khan mi: v tr tng oi cua front va rear giong

    het nhau trong ca hai trng hp hang ay va hang rong.

    Cac cach giai quyet co the

    Hnh 3.4- Hnh anh minh hoa hang rong va hang ay

    (c)

    (d)

    (a)

    (b)

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    45/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 45

    Co t nhat 3 cach giai quyet cho van e neu tren. Cach th nhat la danh

    lai mot v tr trong khi hang ay, rear se cach front mot v tr gia. Cach

    th hai la s dung them mot bien, chang han mot bien c kieu bool se co

    tr true khi rear nhch en sat front trong trng hp hang ay (chung

    ta co the tuy y chon trng hp hang ay hay rong), hay mot bien em e

    em so phan t hien co trong hang. Cach th ba la cho mot hoac ca hai chsofront va rear mang mot tr ac biet nao o e ch ra hang rong, v du

    nhrear se la -1 khi hang rong.

    3.3.1.4. Tong ket cac cach hien thc cho hang lien tuce tong ket nhng ieu a ban ve hang, chung ta liet ke di ay tat ca cac

    phng phap ma chung ta a thao luan ve cac cach hien thc hang.

    Mo hnh vat ly: mot day tuyen tnh co front luon ch v tr au tien tronghang va moi phan t cua hang phai di chuyen ti mot bc khi phan t taifront c lay i. ay la phng phap rat d trong may tnh noi chung.

    Mot day tuyen tnh co hai ch so front va rear luon luon tang. ay laphng phap tot neu nh hang co the c lam rong.

    Mot day vong co hai ch sofront,rear va mot v tr e trong. Mot day vong co hai ch sofront,rear va mot c cho biet hang ay (hoacrong).

    Mot day vong co hai ch sofront,rear va mot bien em so phan t hien cotrong hang. Mot day vong co hai ch sofront,rear ma hai ch so nay se mang tr acbiet trong trng hp hang rong.

    3.3.2.Phng an hien thc hang lien ketBang cach s dung bo nh lien tuc, viec hiec thc hangkho hn viec hien thc

    ngan xep rat nhieu do chung ta dung vung nh tuyen tnh e gia lap to chc vongva gap kho khan trong viec phan biet mot hang ay vi mot hang rong. Tuynhien, hien thc hang lien ket lai thc s de dang nh hien thc ngan xep lien

    ket. Chung ta ch can nam gi hai con tro, frontva reare tham chieu enphan t au va phan t cuoi cua hang. Cac tac vu them hay loai phan t trenhang c minh hoa trong hnh 3.5.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    46/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 46

    3.4.Hien thc hang3.4.1.Hien thc hang lien tucHien thc vong cho hang lien tuc trong C++

    Phan nay trnh bay cac phng thc cua cach hien thc hang bang day vong

    co bien em cac phan t. Chung ta co nh ngha lp Queue nh sau:

    const int maxQueue = 10; // Gia tr nho ch e kiem tra CTDL Queue.

    template

    class Queue {

    public:

    Queue();

    bool empty() const;

    ErrorCode serve();

    ErrorCode append(const Entry &item);

    ErrorCode retrieve(Entry &item) const;

    protected:

    int count;

    int front, rear;

    Entry entry[maxQueue];

    };

    Cac d lieu thanh phan trong lp Queue c khai baoprotected. oi vi ngi s dung sekhong co g thay oi, ngha la chung van khong c ngi s dung nhn thay va van am bao s

    che dau thong tin. Muc ch ay la khi chung ta xay dng lp Extended_Queue dan xuat t lp

    Queue th lp dan xuat se s dung c cac d lieu thanh phan nay. Khi cac d lieu thanh phan

    cua lp c s c khai bao laprivate th lp dan xuat cung se khong nhn thay chung.

    template

    Queue::Queue()

    /*

    post: oi tng hang a ton tai va c khi tao la hang rong.*/

    Hnh 3.5 Cac tac vu them va loai phan t tren hang lien ket

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    47/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 47

    {

    count = 0;

    rear = maxQueue - 1;

    front = 0;

    }

    template

    bool Queue::empty() const

    /*

    post:ham tra vetrueneu hang rong; ngc lai, ham tra ve false.*/

    { return count == 0;

    }

    template

    ErrorCode Queue::append(const Entry &item)

    /*

    post:neu hang con cho, itemc them vao tai rear, ErrorCode tra ve la success; ngc lai

    ErrorCode tra ve la overflow, hang khong oi.*/

    {if (count >= maxQueue) return overflow;

    count++;

    rear = ((rear + 1) == maxQueue) ? 0 : (rear + 1);

    entry[rear] = item;

    return success;

    }

    template

    ErrorCode Queue::serve()

    /*

    post:neu hang khong rong, phan t tai front c lay i, ErrorCode tra ve la success; ngc

    lai, ErrorCode tra ve launderflow, hang khong oi.*/

    {if (count

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    48/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 48

    Queue, neu nhcount c khai bao la private th phng thc sizecua lp

    Extended_Queue phai s dung hang loat cau lenh goi cac phng thc public

    cua Queue nhserve, retrieve, append mi thc hien c. Cac phng thc

    con lai cua Extended_Queue cung tng t, va chung ta danh lai phan bai tap.

    template

    int Extended_Queue::size() const/*

    post:tra ve so phan t hien co cua hang. Hang khong oi.*/

    {

    return count;

    }

    3.4.2.Hien thc hang lien ket3.4.2.1. Cac khai bao c ban

    Vi moi hang, chung ta dung kieu Entrycho kieu cua d lieu lu trong hang.

    oi vi hien thc lien ket, chung ta khai bao cac nodetng t nh a lam cho

    ngan xep lien ket trong chng 2. Chung ta co ac ta di ay:

    template

    class Queue {

    public:

    // Cac phng thc chuan cua hang

    Queue();bool empty() const;

    ErrorCode append(const Entry &item);

    ErrorCode serve();

    ErrorCode retrieve(Entry &item) const;

    // Cac phng thc bao am tnh an toan cho hang lien ket~Queue();

    Queue(const Queue &original);

    void operator =(const Queue &original);

    protected:

    Node *front, *rear;

    };

    Constructor th nhat khi tao mot hang rong:

    template

    Queue::Queue()

    /*

    post: oi tng hang a ton tai va c khi tao la hang rong.*/{

    front = rear = NULL;

    }

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    49/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 49

    Phng thc append them mot phan t vao au rear cua hang:

    template

    ErrorCode Queue::append(const Entry &item)

    /*

    post:neu hang con cho, itemc them vao tai rear, ErrorCode tra ve la success; ngc

    lai, ErrorCode tra ve laoverflow, hang khong oi.*/

    {

    Node *new_rear = new Node (item);

    if (new_rear == NULL) return overflow;

    if (rear == NULL) front = rear = new_rear; // trng hp ac biet: them vao hang

    ang rong.else {

    rear->next = new_rear;

    rear = new_rear;

    }

    return success;

    }

    Trng hp hang rong can phan biet vi cac trng hp bnh thng khac, do

    khi them mot nodevao mot hang rong can phai gan cafront varear tham

    chieu en nodenay, trong khi viec them mot nodevao mot hang khong rong ch

    corearla can c gan lai.

    Phng thc loai mot phan t ra khoi hang c viet nh sau:

    template

    ErrorCode Queue::serve()/*

    post:neu hang khong rong, phan t tai front c lay i, ErrorCode tra ve la success; ngc

    lai, ErrorCode tra ve launderflow, hang khong oi.*/

    {

    if (front == NULL) return underflow;

    Node *old_front = front;

    front = old_front->next;

    if (front == NULL) rear= NULL;// trng hp ac biet: loai phan t cuoi cung cua hangdelete old_front;

    return success;

    }

    Mot lan na trng hp hang rong can c xem xet rieng. Khi phan t cloai khoi hang khong phai la phan t cuoi trong hang, ch co front can c gan

    lai, ngc lai ca front va rear can phai gan ve NULL.

    Cac phng thc khac cua hang lien ket c danh lai cho phan bai tap.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    50/425

    Chng 3 Hang i

    Giao trnh Cau truc d lieu va Giai thuat 50

    Neu so sanh vi hang lien tuc, chung ta se thay rang hang lien ket de hieuhn ca ve mat khai niem ca ve cach hien thc chng trnh.

    3.4.3.Hang lien ket m rongHien thc lien ket cua lp Queue cung cap mot lp c s cho cac lp khac.

    nh ngha di ay danh cho lp dan xuat Extended_Queuehoan toan tng t

    nh hang lien tuc.

    template

    class Extended_queue: public Queue {

    public:

    bool full() const;

    int size() const;

    void clear();

    ErrorCode serve_and_retrieve(Entry &item);

    };

    Mac du lp Extended_Queuenay co hien thc lien ket, nhng no khong can cac phng thc

    nhcopy contructor, overloaded assignment, hoac destructor. oi vi mot trong cac phng thcnay, trnh bien dch se goi cac phng thc mac nh cua lp Extended_Queue. Phng thc mac

    nh cua mot lp dan xuat se goi phng thc tng ng cua lp c s. Chang han, khi mot oi

    tng cua lp Extended_Queue chuan b ra khoi tam vc, destructor mac nh cua lp

    Extended_Queuese goi destructor cua lp Queue: moi nodecap phat ong cua Extended_Queue

    eu c giai phong. Do lp Extended_Queuecua chung ta khong cha them thuoc tnh con tro

    nao ngoai cac thuoc tnh con tro tha ke t lp Queue,destructor ma trnh bien dch goi a lam

    c tat ca nhng ieu ma chung ta mong muon.

    Cac phng thc c khai bao cho lp Extended_Queuecan c viet lai cho

    phu hp vi cau truc lien ket cua hang. Chang han, phng thcsize can s dungmot con tro tam window e duyet hang (noi cach khac, con tro window se di

    chuyen doc theo hang va lan lt ch en tng node trong hang).

    template

    int Extended_queue::size() const

    /*

    post:tra ve so phan t hien co cua hang. Hang khong oi.*/

    {

    Node *window = front;

    int count = 0;

    while (window != NULL) {

    window = window->next;

    count++;

    }

    return count;

    }

    Cac phng thc khac cua Extended_Queuelien ketxem nh bai tap.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    51/425

    Chng 4 Danh sach

    Giao trnh Cau truc d lieu va Giai thuat 51

    Chng 4 DANH SACH

    Chung ta a lam quen vi cac danh sach han che nh ngan xep va hang, trongo viec them/ bt d lieu ch thc hien cac au cua danh sach. Trong chngnay chung ta tm hieu cac danh sach thong thng hn ma trong o viec them

    loai hoac truy xuat phan t co the thc hien tai bat ky v tr nao trong danh sach.

    4.1.nh ngha danh sachChung ta bat au bang viec nh ngha kieu cau truc d lieu tru tng goi la

    danh sach (list). Cung giong nh ngan xep va hang, danh sach bao gom mot chuoinoi tiep cac phan t d lieu. Tuy nhien, khac vi ngan xep va hang, danh sachcho phep thao tac tren moi phan t.

    nh ngha: Danh sach cac phan t kieu T la mot chuoi noi tiep hu han cacphan t kieu T cung cac tac vu sau:

    1. Tao mot danh sach rong.2. Xac nh danh sach co rong hay khong.3. Xac nh danh sach co ay hay cha.4. Tm so phan t cua danh sach.5. Lam rong danh sach.6. Them phan t vao mot v tr nao o cua danh sach.7. Loai phan t tai mot v tr nao o cua danh sach.8. Truy xuat phan t tai mot v tr nao o cua danh sach.

    9. Thay the phan t tai mot v tr nao o cua danh sach.10. Duyet danh sach, thc hien mot cong viec cho trc tren moi phan t.

    Ngoai ra con mot so tac vu khac co the ap len mot chuoi noi tiep cac phan t.Chung ta co the xay dng rat nhieu dang khac nhau cho cac kieu cau truc d lieutru tng tng t bang cach s dung cac goi tac vu khac nhau. Bat ky mot trongcac dang nay eu co the c nh ngha cho ten goi CTDL danh sach. Tuy nhienchung ta ch tap trung vao mot danh sach cu the ma cac tac vu cua no co the cxem nh mot khuon mau e minh hoa y tng va cac van e can giai quyet tren

    danh sach.

    4.2.ac ta cac phng thc cho danh sachKhi bat au tm hieu ngan xep, chung ta nhan manh viec che dau thong tin

    bang cach phan biet gia viec s dung ngan xep va viec lap trnh cho cac tac vutren ngan xep. oi vi hang, chung ta tiep tuc y tng nay va a nhanh chongtm c rat nhieu cach hien thc co the co. Cac danh sach thong dung cho pheptruy xuat va thay oi bat ky phan t nao. Do o nguyen tac che dau thong tin oi

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    52/425

    Chng 4 Danh sach

    Giao trnh Cau truc d lieu va Giai thuat 52

    vi danh sach cang quan trong hn nhieu so vi ngan xep va hang. Chung ta hayac ta cho cac tac vu tren danh sach:

    Constructor can co trc khi danh sach c s dung:template

    List::List();post:oi tng danh sach rong a c tao.

    Tac vu thc hien tren mot danh sach a co va lam rong danh sach:

    template void List::clear();

    post: Moi phan t cua danh sach a c giai phong, danh sach tr nen rong.

    Cac tac vu xac nh trang thai cua danh sach:

    template bool List::empty() const;

    post: tra ve true neu danh sach rong, ngc lai tra vefalse. Danh sach khong oi.

    template

    bool List::full() const;

    post: tra ve true neu danh sach ay, ngc lai tra vefalse. Danh sach khong oi.

    template

    int List::size() const;

    post: tra ve so phan t cua danh sach. Danh sach khong oi.

    Chung ta xem xet tiep cac tac vu truy xuat cac phan t cua danh sach. Tngt nh oi vi ngan xep va hang, cac tac vu nay se tra ve ErrorCode khi canthiet.

    Chung ta dung mot so nguyen e ch v tr (position) cua phan t trong danhsach. V tr ay c hieu la th t cua phan t trong danh sach. Cac v trtrong danh sach c anh so 0, 1, 2, ...Viec xac nh mot phan t trong danh

    sach thong qua v tr rat giong vi s s dung ch so trong day, tuy nhien van comot so iem khac nhau quan trong. Neu chung ta them mot phan t vao mot vtr nao o trong danh sach th v tr cua tat ca cac phan t pha sau se tang len 1.Neu loai mot phan t th v tr cac phan t pha sau giam 1. V tr cua cac phant trong danh sach c xac nh khong xet en cach hien thc. oi vi danhsach lien tuc, hien thc bang day, v tr phan t ro rang la ch so cua phan t trong day. Nhng chung ta cung van thong qua v tr e tm cac phan t trongdanh sach lien ket du rang danh sach lien ket khong co ch so.

    Su tm bi:www.daihoc.com.vn

    Smi t h N gu y en St u d

    ht t p:/ / gg.gg/ sns

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    53/425

    Chng 4 Danh sach

    Giao trnh Cau truc d lieu va Giai thuat 53

    Chung ta se ac ta chnh xac cac phng thc lien quan en ch mot phan t

    cua danh sach di ay.

    template

    ErrorCode List::insert(int position, const Entry &x);

    post: Neu danh sach cha ay va 0 position n, n la so phan t hien co cua danh sach,phng thc tra vesuccess: moi phan t tposition en cuoi danh sach se co v trtang len 1, x c them vao tai position; ngc lai, danh sach khong oi, ErrorCode secho biet loi cu the.

    Phng thc insert chap nhan position bang n v no chap nhan them phant mi ngay sau phan t cuoi. Tuy nhien, cac phng thc sau ch chap nhanposition

  • 7/31/2019 Slide Cau Truc Du Lieu Va Giai Thuat WK - Smith.N Studio

    54/425

    Chng 4 Danh sach

    Giao trnh Cau truc d lieu va