Luận văn tốt nghiệp: Cấu trúc dữ liệu mẫu với C++

257 1

Miễn phí

Tải về máy để xem đầy đủ hơn, bản xem trước là bản PDF

Tags: #luận án#luận văn tốt nghiệp#đồ án#tiểu luận

Mô tả chi tiết

1. Nội dung

1.1 Ngôn ngữ C++ và lập trình hướng đối tượng

Lập trình hướng đối tượng là gì?

Các ưu điểm của lập trình hướng đối tượng

Đối tượng

Các lớp đối tượng

Trừu tượng hóa dữ liệu và bao gói thông tin

Thừa kế

Tương ứng bội

Truyền thông báo

Những ứng dụng của lập trình hướng đối tượng

1.2 Thiết kế và cài đặt các lớp đối tượng

Định nghĩa lớp

  • Khai báo lớp tên đối tượng
  • Tạo lập các lớp đối tượng
  • Các thành phần dữ liệu

Tính tương ứng bội

  • Hàm tải bội
  • Chuyển đổi kiểu

Kế thừa và sự mở rộng các lớp

  • Kế thừa đơn
  • Kế thừa đa mức
  • Kế thừa phân cấp 
  • Kế thừa bội 
  • Kế thừa kép
  • Các lớp cơ sở ảo
  • Cấu tử trong các lớp dẫn xuất
  • Hàm ảo

1.3 Hàm và lớp mẫu

Hàm mẫu

  • Định nghĩa
  • Hàm mẫu có nhiều tham số hình thức
  • Hàm mẫu có nhiều tham số khác nhau

Lớp mẫu

  • Định nghĩa
  • Lớp mẫu có tham số

Kết luận

1.4 Cấu trúc dữ liệu và các lớp mẫu

Cấu trúc dữ liệu

  • Lớp chứa
  • Lớp chứa thần ảo
  • Ngăn xếp
  • Lưu trữ ngăn xếp bằng mảng
  • Xây dựng lớp ngăn xếp mẫu
  • Hàm đợi
  • Xây dựng lớp hàm đợi mẫu

Hàng quay tròn

Danh sách liên kết

  • Danh sách liên kết đơn
  • Danh sách liên kết đôi

Cây nhị phân

Nhận xét

2. Kết luận

Cùng với sự phát triển mạnh mẽ của công nghệ thông tin, thì cấu trúc dữ liệu như là nền tảng của sự phát triển này. Với sự ưu việt của phương pháp lập trình hướng đối tượng là tính kế thừa và sự linh động đối với các kiểu dữ liệu khác nhau của các lớp mẫu. Các lớp cấu trúc dữ liệu của C++ rất phù hợp để xây dựng các chương tình lớn và đa dạng. Tác giả mong ác lớp cấu trúc dữ liệu mẫu: ngắn xếp, hàng đợi, hàng quay tròn, danh sách liên kết đơn, liên kết đôi và cây nhị phân đã xây dựng được sử dụng hoặc có ích cho người lập trình. 

3. Tài liệu tham khảo

J.COURTIN & I.KOWARSKI Nhập môn thuật toán và cấu trúc dữ liệu (Tập II), Viện tin học – Khoa học Việt Nam 1993

LARRY NYHOFF & SANFORD LEEDSTMA – Lập trình nâng cao bằng PASCAL với các cấu trúc dữ liệu (Tập II), NXB Đà Nẵng 1998

Trần Văn Lăng – Lập trình hướng đối tượng C++ , NXB thống kê

Nguyễn Cẩn - C Tham khảo toàn diện, NXB Đồng Nai 1996....

Nội dung

CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Lêi c¶m ¬nTr­íc tiªn, t«i xin bµy tá lßng biÕt ¬n s©u s¾c tíi thÇy gi¸oh­íng dÉn TS §oµn V¨n Ban, phßng CSDL&LT ViÖn C«ng NghÖTh«ng Tin thuéc trung t©m Khoa Häc Tù Nhiªn vµ C«ng NghÖQuèc Gia ®· tËn t×nh gióp ®ì t«i hoµn thµnh bµi luËn v¨n nµy.T«ixin ch©n thµnh c¶m ¬n c¸c thÇy, c« gi¸o khoa C«ng NghÖTh«ng Tin tr­êng §HDL §«ng §« ®· gi¶ng d¹y vµ gióp ®ì emtrong qu¸ tr×nh häc tËp ë tr­êng.Cuèi cïng, xin ch©n thµnh c¶m ¬n nh÷ng ng­êi th©n tronggia ®×nh vµ b¹n bÌ ®· gióp ®ì, ®éng viªn trong qu¸tr×nh häc tËp.Hµ néi th¸ng 6 n¨m 2000CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Môc lôcLêi c¶m ¬nPhÇn ACh­¬ng I. Ng«n ng÷ C++ vµ lËp tr×nh h­íng ®èi t­îngI.1. LËp tr×nh h­íng ®èi t­îng lµ g×?.............................................................4I.2. C¸c ­u ®iÓm cña lËp tr×nh h­íng ®èi t­îng............................................5I.3. §èi t­îng ...............................................................................................6I.4. C¸c líp ®èi t­îng....................................................................................7I.5. Trõu t­îng ho¸ d÷ liÖu vµ bao gãi th«ng tin...........................................8I.6. Thõa kÕ....................................................................................................8I.7. T­¬ng øng béi.........................................................................................9I.8. TruyÒn th«ng b¸o..................................................................................10I.9. Nh÷ng øng dông cña lËp tr×nh h­íng ®èi t­îng....................................11Ch­¬ng II.ThiÕt kÕ vµ cµi ®Æt c¸c líp ®èi t­îngII.1. §Þnh nghÜa líp.....................................................................................13II.1.1.Khai b¸o líp tªn ®èi t­îng................................................................13II.1.2. T¹o lËp c¸c líp ®èi t­îng..................................................................14II.1.3. C¸c thµnh phÇn d÷ liÖu......................................................................15II.2. TÝnh t­¬ng øngbéi...............................................................................16II.2.1. Hµm t¶i béi.......................................................................................17II.2.2. ChuyÓn ®æi kiÓu................................................................................21II.3. KÕ thõa vµ sù më réng c¸c líp............................................................22II.3.1. KÕ thõa ®¬n.......................................................................................23II.3.2.KÕ thõa ®a møc.................................................................................27II.3.3. KÕ thõa ph©n cÊp...............................................................................28II.3.4. KÕ thõa béi........................................................................................28II.3.5. KÕ thõa kÐp.......................................................................................29II.3.6. C¸c líp c¬ së ¶o................................................................................29CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8II.3.7. CÊu tö trong c¸c líp dÉn xuÊt...........................................................30II.3.8. Hµm ¶o.............................................................................................32Ch­¬ng III.Hµm vµ líp mÉuIII.1. Hµm mÉu............................................................................................34III.1.1. §Þnh nghÜa.......................................................................................34III.1.2. Hµm mÉu cã nhiÒu tham sè h×nh thøc.............................................35III.1.3. Hµm mÉu cã nhiÒu tham sè kh¸c nhau...........................................36III.2. Líp mÉu.............................................................................................38III.2.1 §Þnh nghÜa.......................................................................................38III.2.2. Líp mÉu cã tham sè ......................................................................39III.3. KÕt luËn ............................................................................................39Ch­¬ng IVCÊu tróc d÷ liÖu vµ c¸c líp mÉuIV. CÊu tróc d÷ liÖu....................................................................................40IV.1.1. Líp chøa.........................................................................................41IV.1.2. Líp chøa thÇn ¶o............................................................................41IV.2.1. Ng¨n xÕp........................................................................................42IV.2.2. L­u tr÷ ng¨n xÕp b»ng m¶ng.........................................................42IV.2.3. X©y dùng líp ng¨n xÕp mÉu............................................................43IV.3.1. Hµm ®îi...........................................................................................44IV.3.2. X©y dùng líp hµm ®îi mÉu.............................................................45IV.4. Hµng quay trßn...................................................................................47IV.5. Danh s¸ch liªn kÕt..............................................................................48IV.6 Danh s¸ch liªn kÕt ®¬n........................................................................48IV.7 Danh s¸ch liªn kÕt ®«i.........................................................................56IV.8. C©y nhÞ ph©n.......................................................................................64IV.9. NhËn xÐt.............................................................................................74CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8PhÇn BI. Ch­¬ng tr×nh qu¶n lý sinh viªn................................................................76II. Ch­¬ng tr×nh thèng kª tõ tiÕng ViÖt.......................................................85KÕt luËn.......................................................................................................92Tµi liÖu tham kh¶o.......................................................................................93CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Ch­¬ng INg«n ng÷ C++vµ lËp tr×nh h­íng ®èi t­îngI.1. LËp tr×nh h­íng ®èi t­îng lµ g×?LËp tr×nh h­íng ®èi t­îng dùa trªn nÒn t¶ng lµ c¸c ®èi t­îng. §èit­îng ®­îc x©y dùng trªn c¬ së g¾n cÊu tróc d÷ liÖu víi c¸c phÐp to¸n sÏthÓ ®­îc ®óng c¸ch mµ chóng ta suy nghÜ, bao qu¸t vÒ thÕgiíi thùc. [3]LËp tr×nh h­íng ®èi t­îng cho phÐp chóng ta kÕt hîp nh÷ng tri thøcbao qu¸t vÒ c¸c qu¸ tr×nh víi nh÷ng kh¸i niÖm trõu t­îng ®­îc sö dôngtrong m¸y tÝnh .LËp tr×nh h­íng ®èi t­îng lµ ph­¬ng ph¸p lËp tr×nh lÊy ®èi t­îng lµmnÒn t¶ng ®Ó x©ydùng thuËt gi¶i, x©y dùng ch­¬ng tr×nh, lµ c¸ch tiÕp cËn ®Óph©n chia ch­¬ng tr×nh thµnh c¸c ®¬n thÓ (modul) b»ng c¸ch t¹o ra c¸cvïng bé nhí cho c¶ d÷ liÖu lÉn hµm vµ chóng sÏ ®­îc sö dông nh­ c¸c mÉu®Ó t¹o ra b¶n sao tõng ®¬n thÓ khi cÇn thiÕt. §èi t­îng ë ®©y ®­îc xem nh­lµ vïng ph©n chia chia bé nhí trong m¸y tÝnh ®Ó l­u tr÷ d÷ liÖu vµ tËp c¸chµm t¸c ®éng trªn d÷ liÖu g¾n víi chóng.Kh¸i niÖm H­íng ®èi t­îng  ®­îc x©y dùng trªn nÒn t¶ng cña kh¸iniÖm LËp tr×nh cã cÊu tróc  vµ Sù trõu t­îng ho¸ d÷liÖu  sù thay ®æi c¨nb¶n lµ ë chç mét ch­¬ng tr×nh h­íng ®èi t­îng ®­îc thiÕt kÕ xoay quanhc¸c d÷ liÖu mµ ta lµm viÖc trªn nã, h¬n lµ theo b¶n th©n chøc n¨ng cñach­¬ng tr×nh.LËp tr×nh h­íng ®èi t­îng ®Æt träng t©m vµo ®èi t­îng, yÕu tè quanträng trong qu¸ tr×nh ph¸t triÓn ch­¬ng tr×nh vµ nã kh«ng cho phÐp d÷ liÖuchuyÓn ®éng tù do trong hÖ thèng. D÷ liÖu ®­îc g¾n chÆt víi tõng hµmthµnh c¸c vïng riªng mµ c¸c hµm ®ã t¸c ®éng lªn vµ nã ®­îc b¶o vÖ cÊmc¸c hµm ngo¹i lai truy nhËp tuú tiÖn. Tuy nhiªn c¸c®èi t­îng cã thÓ trao®æi th«ng tin víi nhau th«ng qua viÖc trao ®æi th«ng b¸o.[5]CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Tãm l¹i, so s¸nh lËp tr×nh cÊu tróc lÊy ch­¬ng tr×nh con lµm nÒnt¶ng:Trong lËp tr×nh h­íng ®èi t­îng chóng ta cã :LËp tr×nh h­íng ®èi t­îng cã nh÷ng ®Æc tÝnh chñ yÕu sau:ð¨TËp trung vµo d÷ liÖu thay cho c¸c hµm.ð¨Ch­¬ng tr×nh ®­îc chia thµnh tËp c¸c líp ®èi t­îng.ð¨CÊu tróc d÷ liÖu ®­îc thiÕt kÕ sao cho ®Æc t¶ c¸c ®èi t­îng.ð¨C¸c hµm ®­îc x¸c ®Þnh trªn c¸c vïng d÷ kiÖu cña ®èi t­îng ®­îcg¾n víi nhau trªn cÊu tróc cña d÷ liÖu ®ã.ð¨D÷ liÖu ®­îc bao bäc, che dÊu vµ kh«ng cho phÐp c¸c hµm ngo¹ilai truy nhËp tù do.ð¨C¸c ®èi t­îng trao ®æi th«ng tin víi nhau qua c¸c hµm.ð¨D÷ liÖu vµ c¸c hµm míi cã thÓ dÔ dµng bæ xung vµo ®èi t­îng nµo®ã khi cÇn thiÕt.ð¨Ch­¬ng tr×nh ®­îc thiÕt kÕ theo c¸ch tiÕp cËn bottom-up.I.2. C¸c ­u ®iÓm cña lËp tr×nh h­íng ®èi t­îngð¨Th«ng qua nguyªn lý thõa kÕ, chóng ta cã thÓ lo¹i bá ®­îc nh÷ng®o¹n ch­¬ng tr×nh lÆp l¹i, d­ thõa trong qu¸ tr×nh m« t¶ c¸c líp vµkh¶ n¨ng sö dông c¸c líp ®· ®­îc x©y dùng.ð¨Ch­¬ng tr×nh ®­îc x©y dùng tõ c¸c ®¬n thÓ (module) trao ®æi víinhau nªn viÖc thiÕt kÕ vµ lËp tr×nh sÏ ®­îc thùc hiÖn theo quy tr×nhCh­¬ng tr×nh = CÊu tróc d÷ liÖu + Gi¶i ThuËt§èi t­îng =D÷ LiÖu + Hµnh vi cña d÷ liÖuCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8nhÊt ®Þnh chø kh«ng ph¶i dùa vµo kinh nghiÖm vµ kü thuËt nh­ tr­íc.§iÒu nµy ®¶m b¶o rót ng¾n ®­îc thêi gian x©y dùng hÖ thèng vµ t¨ngn¨ng xuÊt lao ®éng.ð¨Nguyªn lý che dÊu th«ng tin gióp ng­êi lËp tr×nh t¹o ra ®­îc nh÷ngch­¬ng tr×nh an toµn kh«ng bÞ thay ®æi bëi nh÷ng ch­¬ng tr×nh kh¸c.ð¨Cã thÓ x©y dùng ®­îc c¸c ¸nh x¹ ®èi t­îng cña bµi to¸n vµo ®èit­îng cña ch­¬ng tr×nh.ð¨C¸chtiÕp cËn thiÕt kÕ ®Æt träng t©m vµo d÷ liÖu gióp ta x©y dùng®­îc m« h×nh chi tiÕt vµ gÇn víi d¹ng cµi ®Æt h¬n.ð¨Nh÷ng hÖ thèng h­íng ®èi t­îng dÔ më réng, n©ng cÊp thµnh nh÷nghÖ thèng lín h¬n.ð¨Kü thuËt truyÒn th«ng b¸o trong viÖc tao trao ®æi th«ng tin gi÷a c¸c®èi t­îng gióp cho viÖc m« t¶ giao diÖn víi c¸c hÖ thèng bªn ngoµi®¬n gi¶n h¬n.ð¨Cã thÓ qu¶n lý ®é phøc t¹p cña nh÷ng s¶n phÈm phÇn mÒm.I.3. §èi t­îng§èi t­îng lµ thùc thÓ ®­îc x¸c ®Þnh trong thêi h¹n hÖ thèng h­íng®èi t­îng ho¹t ®éng.Nh­ vËy ®èi t­îng lµ con ng­êi, sù vËt, thiÕt bÞ, b¶ngd÷ liÖu cÇn xö lý trong ch­¬ng tr×nh. Mçi ®èi t­îng gåm cã: tËp c¸c thuéctÝnh (attribute) vµ tËp c¸c hµm (function) ®Ó xö lý c¸c thuéc tÝnh ®ã.[5]Mét ®èi t­îng cã thÓ ®­îc minh ho¹ nh­ sau :H×nh 1. CÊu tróc tæng qu¸t cña mét ®èi t­îng.§èi T­îngThuécTÝnhHµmCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Ch¼ng h¹n chóng ta xÐt ®èi t­îng h×nh ch÷ nhËt bao gåm c¸c thuéc tÝnh(x1,y1) to¹ ®é gãc trªn bªn tr¸i, d, r lµ chiÒu dµi chiÒu réng cña h×nh ch÷nhËt. C¸c hµm: nhËp sè liÖu cho h×nh ch÷ nhËt, hµm tÝnh diÖntÝch, chu vi vµhµm hiÓn thÞ. Nh­ vËy ®èi t­îng h×nh ch÷ nhËt cã thÓ ®­îc m« t¶ nh­ sau:I.4. C¸c líp ®èi t­îngMét tËp d÷ liÖu vµ c¸c hµm cña mét tËp ®èi t­îng cã thÓ ®­îc xemnh­ mét kiÓu d÷ liÖu ®­îc ®Þnh nghÜa bëi ng­êi sö dông. KiÓu d÷ liÖu ë ®©y®­îc gäi lµ líp (class), ®ã lµ mét tËp c¸c thuéc tÝnh vµ c¸c hµm m« t¶ thÕgiíi thùc, mét ®èi t­îng lµ thÓ hiÖn cña mét líp. Líplµ kh¸i niÖm trungt©m cña lËp tr×nh h­íng ®èi t­îng, nã lµ sù më réng cÊu tróc (struct) cña Cvµ b¶n ghi (record) cña Pascal. Trong lËp tr×nh h­íng ®èi t­îng, líp hÇunh­ ®ång nhÊt víi kiÓu d÷ liÖu trõu t­îng. Líp lµ kh¸i niÖm tÜnh, cã thÓnhËn biÕt ngaytõ v¨n b¶n ch­¬ng tr×nh. Ng­îc l¹i ®èi t­îng lµ kh¸i niÖm®éng, nã ®­îc x¸c ®Þnh trong bé nhí cña m¸y tÝnh n¬i ®èi t­îng chiÕm métvïng cña bé nhí lóc thùc hiÖn ch­¬ng tr×nh. §èi t­îng ®­îc t¹o ra ®Ó xö lýth«ng tin, thùc hiÖn nhiÖm vô ®­îc thiÕt kÕ vµ sau ®ã bÞ huû bá khi ®èit­îng ®ã hÕt vai trß. Khi mét líp ®­îc ®Þnh nghÜa, th× nã cã thÓ t¹o ra sè§èi t­îng:h×nh ch÷ nhËtThuéc tÝnh:x1, y1, d, rPh­¬ng thøc:NhËp sè liÖuDiÖn tÝchChu viHiÓn thÞH×nh 2. M« t¶ ®èi t­îng h×nh ch÷ nhËt.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8l­îng c¸c ®èi t­îng tuú ý cña líp ®ã. Nh­ vËy líp lµ tËp hîp c¸c ®èi t­îngcïng kiÓu. Sù kh¸c biÖt gi÷a líp vµ ®èi t­îng còng gièng nh­ sù kh¸c biÖtgi÷a tËphîp c¸c phÇn tö vµ mét phÇn tö trong tËp hîp.[5]I.5. Trõu t­îng ho¸ d÷ liÖu vµ bao gãi th«ng tinViÖc ®ãng gãi d÷ liÖu vµ c¸c hµm vµo mét ®¬n vÞ cÊu tróc ®­îc xemnh­ mét nguyªn t¾c (che dÊu) th«ng tin, d÷ ®­îc tæ chøc sao cho thÕ giíibªn ngoµi kh«ngtruy nhËp ®­îc vµo mµ chØ cho phÐp c¸c hµm trong cïnglíp hoÆc trong nh÷ng líp cã quan hÖ thõa víi nhau ®­îc quÒn truy nhËp.ChÝnh c¸c hµm thµnh phÇn cña líp sÏ ®ãng vai trß nh­ lµ giao diÖn gi÷a d÷liÖu cña ®èi t­îng vµ phÇn cßn l¹i cña ch­¬ng tr×nh. Nguyªn t¾c bao gãi d÷liÖu ®Ó ng¨n cÊm sù truy nhËp trùc tiÕp trong lËp tr×nh ®­îc gäi lµ che dÊuth«ng tin.Trõu t­îng ho¸lµ c¸ch biÓu diÔn nh÷ng ®Æc tÝnh chÝnh vµ bá quanh÷ng chi tiÕt vôn vÆt hoÆc nh÷ng gi¶i thÝch. §Ó x©y dùng c¸c líp chóng taph¶i sö dông kh¸i niÖm trõu t­îng ho¸. Trong lËp tr×nh h­íng ®èi t­îng líp®­îc sö dông nh­ d÷ liÖu trõu t­îng. VÝ dô nh­ chóng ta cã thÓ ®Þnh nghÜamét líp lµ danh s¸ch c¸c thuéc tÝnh trõu t­îng nh­ lµ kÝch th­íc, h×nh d¸ngmÇu vµ c¸c hµm x¸c ®Þnh trªn c¸c thuéc tÝnh nµy ®Ó m« t¶ c¸c ®èi t­îngtrong kh«ng gian h×nh häc.I.6. Thõa KÕThõa kÕ lµ qu¸ tr×nh trong ®ã c¸c ®èi t­îng cña líp nµy ®­îc quyÒnsö dông mét sè tÝnh chÊt cña c¸c ®èi t­îng cña c¸c líp kh¸c.Nguyªn lý thõa kÕ hç trî cho viÖc t¹o ra cÊu tróc ph©n cÊp c¸c líp.Nã ®­îc thùc hiÖn dùa trªn nguyªn lý tæng qu¸t ho¸ hoÆc chi tiÕt ho¸ c¸c®Æc tÝnh cña c¸c ®èi t­îng trong c¸c líp.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Trong lËp tr×nh h­íng ®èi t­îng, kh¸i niÖm thõa kÕ kÐo theo ý t­ëngsö dông l¹i. NghÜa lµ mét líp ®· ®­îc x©y dùng (líp cha hay líp c¬ së) cñachóng cã thÓ bæ sung thªm c¸c tÝnh chÊt míi ®Ó t¹o c¸c líp míi (líp conhay líp dÉn xuÊt) m« t¶ chi tiÕt h¬n vÒ mét nhãm ®èi t­îng cô thÓ (theonguyªn lý chi tiÕt ho¸) hoÆc tõ mét nhãm líp cã sè ®Æc tÝnh gièng nhau gépchung c¸c ®Æc tÝnh ®ã l¹i ®Ó t¹o ra mét líp míi, ®­îc gäi lµ líp trõu t­îng(nguyªn lý tæng qu¸t ho¸).Kh¸i niÖm kÕ thõa ®­îc hiÓu nh­ c¬ chÕ sao chÐp ¶o kh«ng ®¬n ®iÖu.Trong thùc tÕ, mäi viÖc x¶y ra tùa nh­ nh÷ng líp c¬ së ®Òu ®­îc sao vµotrong líp dÉn xuÊt mÆc dï ®iÒu nµy kh«ng ®­îc cµi ®Æt t­êng minh (gäi lµsao chÐp ¶o) vµ viÖc sao chÐp chØ ®­îc x¸c ®Þnh trong líp c¬ së (sao chÐpkh«ng ®¬n ®iÖu).Mét líp cã thÓ kÕ thõa c¸c tÝnh chÊt cña mét hay nhiÒu líp c¬ së ëc¸c møc kh¸c nhau, do ®ã cã n¨m d¹ng kÕ thõa ®­îc sö dông trong lËptr×nh h­íng ®èi t­îng lµ: kÕ thõa ®¬n, kÕ thõa béi, kÕ thõa ph©n cÊp, kÕthõa ®a møc vµ kÕ thõa phøc hîp (ch­¬ng sau sÏ nãi râ vÒ c¸c d¹ng kÕ thõanµy).[3]I.7. T­¬ng øng béiT­¬ng øng béi lµ mét kh¸i niÖm cã kh¶ n¨ng nh­ c¸c phÐp to¸n cãthÓ ®­îc thùc hiÖn ë nhiÒu d¹ng kh¸c nhau. Hµnh vi cña c¸c phÐp to¸nt­¬ng øng béi phô thuéc vµo kiÓu d÷ liÖu mµ nã sö dông ®Ó xö lý. T­¬ngøng béi ®ãng vai trß quan träng trong viÖc t¹o ra c¸c ®èi t­îng cã cÊu trócbªn trong kh¸c nhau nh­ng cã kh¶ n¨ng dïng chung mét giao diÖn bªnngoµi (nh­ tªn gäi). §iÒu nµy cã nghÜa lµ mét líp c¸c phÐp to¸n ®­îc ®ÞnhnghÜa theo nh÷ng thuËt to¸n kh¸c nhau, nh­ng cã kh¶ n¨ng sö dông theocïng mét c¸ch gièng nhau.T­¬ng øng béi lµ sù më réng kh¸i niÖm sö dôngl¹i trong nguyªn lý kÕ thõa. Liªn kÕt ®éng lµ d¹ng liªn kÕt c¸c hµm, thñ tôckhi ch­¬ng tr×nh thùc hiÖn c¸c lêi gäi tíi c¸c hµm, thñ tôc ®ã. Nh­ vËy,trong liªn kÕt ®éng néi dung cña ®o¹n ch­¬ng tr×nh øng víi thñ tôc, hµmcho ®Õn khi thùc hiÖn c¸c lêi gäi tíi c¸c thñ tôc vµ hµm ®ã. Nã cho phÐpchóng ta can thiÖp vµo sù ho¹t ®éng cña c¸c thùc thÓ mµ kh«ng cÇn biªndÞch l¹i toµn bé ch­¬ng tr×nh, chóng ta cã thÓ truyÒn vµ nhËn th«ng tin tõc¸c ®èi t­îng míi nµy gièng nh­ c¸c ®èi t­îng ®· cã. Liªn kÕt ®éng liªnCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8quan chÆt chÏ tíi t­¬ngøng béi vµ kÕ thõa, ®«i khi liªn kÕt ®éng cßn gäi lµliªn kÕt trÔhay liªn kÕt vµo lóc ch¹y (v× c¸c ph­¬ng thøc chØ ®­îc gäi vµolóc ch­¬ng tr×nh biªn dÞch ch­¬ng tr×nh biªn dÞch ra ng«n ng÷ m¸y).[3]Ch¼ng h¹n nh­ hµm VE() trong h×nh 3, theo nguyªn lý kÕ thõa th×mäi ®èi t­îng ®Òu cã thÓ sö dông hµm nµy ®Ó vÏ theo yªu cÇu. Tuy nhiªn,thuËt to¸n thùc hiÖn hµm VE() lµ duy nhÊt ®èi víi tõng ®èi t­îngH×nh_TRßn, §a_Gi¸c, §­¬ng_thvµ v× vËy hµm VE() sÏ ®­îc ®ÞnhnghÜa l¹i khi c¸c ®èi t­îng t­¬ng øng ®­îc x¸c ®Þnh.I.8. TruyÒn th«ng b¸oC¸c ®èi t­îng göi vµ nhËn th«ng tin víi nhau gièng nh­ con ng­êitrao ®æi th«ng tin víi nhau. ChÝnh nguyªn lý trao ®æi th«ng tin víi nhaub»ng c¸ch truyÒn th«ng b¸o cho phÐp chóng ta dÔ dµng x©y dùng ®­îc hÖthèng m« pháng gÇn nh÷ng hÖ thèng trong thÕ giíi thùc. TruyÒn th«ng b¸ocho mét ®èi t­îng tøc lµ b¸o cho nã ph¶i thùc hiÖn mét viÖc g× ®ã. C¸chøng xö c¶ ®èi t­îng sÏ ®­îc m« t¶ ë trong líp th«ng qua c¸c hµm (hay cßn®­îc gäi lµ líp dÞch vô). Th«ng b¸o truyÒn ®i ph¶i chØ ra ®­îc hµm cÇn thùcH×nh HäcVE()§A_GIACVE(§A_GIAC)§¦¥NG_THVE(§¦¥NG_TH)HINH_TRONNVE(TRON)H×nh 3. T­¬ng øng béi cña hµm VE().CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8hiÖn trong ®èi t­îng nhËn th«ng b¸o. H¬n thÕ n÷a th«ng b¸o truyÒn ®i ph¶ix¸c ®Þnh tªn ®èi t­îng, tªn hµm vµ th«ng tin truyÒn ®i.VÝ dô: Líp CONG_NHAN cã thÓ lµ ®èit­îng cô thÓ ®­îc x¸c ®Þnhbëi HO_TEN nhËn ®­îc th«ng b¸o cÇn TINH_LUONG ®· ®­îc x¸c ®Þnhtrong líp CONG_NHAN. Th«ng b¸o ®ã sÏ ®­îc xö lý nh­ sau:Mçi ®èi t­îng chØ tån t¹i trong mét thêi gian nhÊt ®Þnh. §èi t­îngt¹o ra khi nã ®­îckhai b¸o vµ sÏ bÞ huû bá khi ch­¬ng tr×nh ra khái miÒnx¸c ®Þnh cña ®èi t­îng ®ã. Sù trao ®æi th«ng tin chØ cã thÓ thùc hiÖn trongthêi gian ®èi t­îng tån t¹i.I.9. Nh÷ng øng dông cña lËp tr×nh h­íng ®èi t­îngLËp tr×nh h­íng ®èi t­îng lµ mét trong nh÷ng thuËt ng÷ ®­îc nh¾c®Õn nhiÒu nhÊt trong c«ng nghÖ phÇn mÒm vµ nã ®­îc øng dông ®Ó ph¸ttriÓn phÇn mÒm vµ nhiÒu lÜnh vùc kh¸c nhau. Trong sè ®ã cã øng dôngquan träng vµ næi tiÕng nhÊt hiÖn nay lµ lÜnh vùc thiÕt kÕ giao diÖn víing­êi sö dông. VÝ dô nh­Windows, hµng tr¨m hÖ thèng víi giao diÖnWindows ®· d­îc ph¸t triÓn dùa trªn kü thuËt lËp tr×nh h­íng ®èi t­îng.Nh÷ng hÖ th«ng tin doanh nghiÖp trong thùc tÕ rÊt phøc t¹p, chøa nhiÒu ®èit­îng, c¸c thuéc tÝnh vµ hµm. §Ó gi¶i quyÕt nh÷ng hÖ thèng phøc hîpnh­thÕ th× lËp tr×nh h­íng ®èi t­îng l¹i tá ra kh¸ hiÖu qu¶. Tãm l¹i nh÷ng lÜnhvùc øng dông cña kü thuËt lËp tr×nh h­íng ®èi t­îng bao gåm:ð¨Nh÷ng hÖ th«ng tin lµm viÖc theo thêi gian thùc.ð¨Trong lÜnh vùc m« h×nh ho¸ hoÆc m« pháng qu¸ tr×nh.ð¨C¸c c¬ së d÷liÖu h­íng ®èi t­îng.ð¨HÖ siªu v¨n b¶n vµ ®a ph­¬ng tiÖn.®èi t­îng th«ng b¸o th«ng tinCONG_NHAN.TINH_LUONG(HO_TEN)CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨LÜnh vùc trÝ tuÖ nh©n t¹o vµ c¸c hÖ chuyªn gia.ð¨LËp tr×nh song song vµ c¸c m¹ng n¬_ron.ð¨Nh÷ng hÖ tù ®éng ho¸ v¨n phßng vµ trî gióp quyÕt ®Þnh.ð¨Nh÷ng hÖ CAD/CAM.Víi nhiÒu ®Æc tÝnh cña lËp tr×nh h­íng ®èi t­îng nãi riªng, c¶ph­¬ng ph¸p ph¸t triÓn h­íng ®èi t­îng nãi chung, chóng ta hy väng nÒnc«ng nghiÖp phÇn mÒm sÏ c¶i tiÕn kh«ng nh÷ng vÒ chÊt l­îng mµ cßn giat¨ng nhanh vÒ sè l­îng trong t­¬ng lai. Kü nghÖ h­íng ®èi t­îng sÏ lµ thay®æi c¸ch suy nghÜ vµ c¸ch thùc hiÖn qu¸ t×nh ph©n tÝch, thiÕt kÕ vµ cµi ®Ætc¸c hÖ thèng, gãp phÇn gi¶i quyÕt nh÷ng vÊn ®Ò tån t¹i trong c«ng nghÖphÇn mÒm.C++lµ mét c«ng cô lËp tr×nh h­íng ®èi t­îngC++lµ c«ng cô lËp tr×nh h­íng ®èi t­îng. Ban ®Çu ®­îc gäi lµ "C withclass" (C víi c¸c líp) sau ®ã C++®­îc ph¸t triÓn vµo nh÷ng n¨m ®Çu thËp kØ80 ë AT&T Bell Laboratories. Nã ®­îc ph¸t triÓn trªn nÒn ng«n ng÷ C.C++lµ mét tËp më réng cña C, v× thÕ hÇu hÕt c¸c tÝnh chÊt cña C vÉn ®­îcsö dông trong C++. §iÒu nµy cã nghÜa lµ hÇu nh­ toµn bé c¸c ch­¬ng tr×nh®­îc viÕt b»ng C th× còng lµ ch­¬ng tr×nh cña C++. Tuy nhiªn còng cã métsè kh¸c biÖt lµm cho ch­¬ng tr×nh C kh«ng thùc ®­îc d­íi ch­¬ng tr×nhC++.Ba kh¸i niÖm quan träng cña C++®­îc bæ xung vµo C lµ: líp, hµm t¶ibéi vµ to¸n tö t¶i béi. Nh÷ng kh¸i niÖm cho phÐp chóng ta t¹o ra nh÷ngkiÓu d÷ liÖu trõu t­îng, kÕ thõa nhiÒu tÝnh chÊt cña nh÷ng kiÓu d÷ liÖu ®·x©y dùng vµ hç trî cho viÖc sö dông c¬ chÕ t­¬ng øng béi cho C++trë thµnhng«n ng÷ h­íng ®èi t­îng thùc sù. C¸c ®Æc tÝnh cña C++cho phÐp ng­êi lËptr×nh dÔ dµng x©y dùng ®­îc c¸c ch­¬ng tr×nh lín, cã tÝnh më, dÔ thÝchnghi, c«ng viÖc b¶o tr× Ýt tèn kÐm h¬n. C++lµ c«ng cô thÝch øng cho vÖc x©ydùng c¸c ch­¬ng tr×nh lín nh­ c¸c hÖ so¹n th¶o ch­¬ng, tr×nh dÞch,c¸c hÖc¬ së d÷ liÖu, nh÷ng hÖ thèng truyÒn tin vµ nhiÒu øng dông phøc t¹p kh¸c.C++hç trî cho viÖc t¹o ra cÊu tróc ph©n cÊp c¸c ®èi t­îng gióp chóngta cã thÓ x©y dùng nh÷ng th­ viÖn c¸c ®èi t­îng ®Ó cho nhiÒu ng­êi lËp söCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8dông ®­îc. Do C++lµ ng«n ng÷lËp tr×nh h­íng ®èi t­îng nªn tÊt nhiªn nãsÏ cã nh÷ng g× mµ "h­íng ®èi t­îng" cã.Ch¦¬ng iiThiÕt kÕ vµ cµi ®Æt c¸c líp ®èi t­îng trong c++II.1. §Þnh nghÜa lípII.1.1.Khai b¸o líp tªn ®èi t­îngKhai b¸o líp lµ m« t¶ kiÓu vµ nhiÒu miÒn x¸c ®Þnh c¸c thµnh phÇncña líp, khai b¸o líp còng nh­ khai b¸o c¸c kiÓu d÷ liÖu quen thuéc kh¸c,nã cã d¹ng nh­ sau:CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8class class_name{private: // vïng riªng (mÆc ®Þnh)... // khai b¸o d÷ liÖu vµ c¸c hµmpublic:// vïng c«ng céng... // khai b¸o d÷ liÖu vµc¸c hµm};// kÕt thóc b»ng dÊu ";"Tõ kho¸ class ®Þnh nghÜa mét kiÓu d÷ liÖu trõu t­îng cã tªn gäi lµclass_name. Trong néi dung líp cã c¸c biÕn vµ hµm, c¸c biÕn vµ hµm ®­îctæ chøc thµnh hai nhãm: dïng chung (public) vµ së h÷u riªng (private,protected).Nh÷ng thµnh phÇn ®­îc khai b¸o private, protected chØ ®­îctruy nhËp bëi c¸c hµm thµnh phÇn cña líp, riªng ®èi víi c¸c hµm kiÓuprotected th× cho phÐp c¸c hµm thµnh phÇn trong c¸c líp cã quan hÖ kÕ thõa(líp dÉn xuÊt) míi ®­îc truy nhËp. Ng­îc l¹i c¸c thµnh phÇn kiÓu public cãthÓ ®­îc truy nhËp tõ bªn ngoµi líp. Nguyªn lÝ che dÊu th«ng tin cña C++®­îc thùc hiÖn b»ng c¸ch sö dông d¹ng khai b¸o private hoÆc protected. Tõkho¸ private lµ tuú chän, nÕu mÆc ®Þnh th× nh÷ng thµnh phÇn kh«ng ®­îckhai b¸o lµ public sÏ lµ private.Nh÷ng biÕn ®­îc khai b¸o trong c¸c líp ®­îc gäi lµ d÷ liÖu thµnhphÇn, cßn c¸c hµm ®­îc gäi lµ hµm thµnh phÇn. C¸c hµm thµnh phÇn kiÓuprivate chØ cã thÓ truy nhËp ®­îc c¸c d÷ liÖu vµ hµm trong vïng private, cßnc¸c hµm thµnh phÇm kiÓu public th× truy nhËp ®­îc tÊt c¶ c¸c kiÓu d÷ liÖuvµ c¸c hµm trong cïng líp.Trong líp Point th× c¸c biÕn ®­îc khai b¸o trong vïng private (vïngriªng) lµ d÷ liÖu thµnh phÇn, cßn c¸c hµm trong vïng public (vïng chung) lµc¸c thµnh phÇn. D÷ liÖu thµnh phÇn cña líp kh«ng thÓ cã kiÓu cña chÝnh líp®ã, nh­ng cã thÓ lµ kiÓu con trá cña líp nµy, vÝ dô:class ACÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8{A x; // kh«ng cho phÐp, v× x kh«ng cã kiÓu líp AA *p; // cho phÐp v× p lµ con trá kiÓu líp A};d÷ liÖu thµnh phÇn cña líp còng cã thÓ lµ liÓu cña líp kh¸c.VÝ dô:class A{----};class B{A a:----};II.1.2. T¹o lËp c¸c ®èi t­îngTrong C++, mét ®èi t­îng lµ mét phÇn tö d÷ liÖu ®­îc khai b¸o kiÓulµ mét class. Trong vÝ dô trªn, khai b¸o líp Point míi chØ x¸c ®Þnh c¸cthµnh phÇn cña líp Point chøch­a t¹o ra mét ®èi t­îng cô thÓ. Líp lµ métkiÓu ®èi t­îng trõu t­îng, nªn sau khi ®Þnh nghÜa líp chóng ta cã thÓ khaib¸o c¸c biÕn gièng nh­ ®èi víi kiÓu ®­îc ®Þnh nghÜa bëi ng­êi sö dông.Khi c¸c ®èi t­îng ®­îc t¹o lËp th× sÏ cã mét chïm bé nhí ®­îc cÊpph¸t ®Ó chøa c¸c thµnh phÇn d÷ liÖu cña mçi ®èi t­îng. C¸c ®èi t­îng cñacïng mét líp cã thÓ ®­îc khëi ®Çu vµ g¸n cho mét ®èi t­îng kh¸c. theongÇm ®Þnh, viÖc sao mét ®èi t­îng lµ t­¬ng ®­¬ng víi viÖc sao mét thµnhphÇn cña nã.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8C¸c ®èi t­îng cßn cã thÓ ®­îc cÊp ph¸t ®éng trong heap, gièng nh­nh÷ng phÇn tö kh¸c.II.1.3. C¸c thµnh phÇn d÷ liÖuC¸c thµnh phÇn d÷ liÖu trong mét líp kh«ng thÓ ®­îc khai b¸o kiÓuauto, register, hay extern. Chóng cã thÓ lµ c¸c enum, nhãm bit vµ c¸c kiÓud÷ liÖu cã s½n hoÆc cñang­êi sö dông ®Þnh nghÜa. Thµnh phÇn d÷ liÖu còngcã thÓ lµ mét ®èi t­îng, tuy nhiªn chóng chØ cã thÓ lµ nh÷ng ®èi t­îng cñac¸c líp ®· ®­îc khai b¸o hoÆc ®· ®­îc ®Þnh nghÜa tr­íc ®ã.*D÷ liÖu thµnh phÇn kiÓu privateKhi c¸c thµnh phÇn d÷ liÖu mét líp ®­îc khai b¸o theo kiÓu privateth× chØ cã th¸nh phÇn cña chÝnh líp ®ã hoÆc c¸c líp b¹n cña nã míi ®­îctruy nhËp ®Õn c¸c thµnh phÇn nµy.*D÷ liÖu thµnh phÇn publicNÕu ta khai b¸o l¹i c¸c thµnh phÇn d÷ liÖu trong líp Point sang d¹ngpublic, tøc lµ: Lóc ®ã méi thµnh phÇn trong líp Point ®Òu cã thÓ ®­îc truynhËp tõ thÕ giíi bªn ngoµi.*D÷ liÖu thµnh phÇn protected§Ó sö dông ®­îc c¸c thµnh phÇn d÷ liÖu cña mét líp tõ c¸c líp kh¸cnh­ng ph¶i b¶o ®¶m nguyªn lý che dÊu th«ng tin th× chóng ta ph¶i khai b¸okiÓuprotected. C¸c thµnh phÇn d÷ liÖu trong protected chØ cho phÐp c¸cthµnh phÇn trong cïng líp vµ trong dÉn xuÊt truy nhËp ®Õn.*D÷ liÖu thµnh phÇn tÜnh staticD÷ liÖu thµnh phÇn tÜnh lµ d÷ liÖu ®­îc khai b¸o víi tõ kho¸ static ë®Çu. Khi d÷ liÖu thµnh phÇntÜnh th× tÊt c¶ c¸c thÓ hiÖn cña líp ®ã ®Òu ®­îcphÐp dïng chung thµnh phÇn d÷ liÖu nµy. D÷ liÖu theo kiÓu static ®­îc ph©nbè ë mét vïng bé nhí cè ®Þnh trong qu¸ tr×nh liªn kÕt còng gièng nh­ c¸cbiÕn ®­îc khai b¸o theo kiÓu tæng thÓ (global).BiÕn d÷ liÖu tÜnh cã nh÷ng tÝnh chÊt sau:CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨Khi ®èi t­îng ®Çu tiªn cña líp ®­îc t¹o lËp th× c¸c biÕn d÷ liÖutÜnh ®­îc g¸n lµ 0.ð¨ChØ cã mét b¶n sao cña biÕn tÜnh ®­îc t¹o ra cho c¶ líp vµ sÏ®­îc sö dông chung cho tÊt c¶ c¸c ®èi t­îng trong cïng líp.ð¨ChØ ®­îc sö dôngtrong líp, nh­ng nã tån t¹i trong suèt thêi gianho¹t ®éng cña ch­¬ng tr×nh.II.2. TÝnh t­¬ng øng béiNh­ trªn ®· nãi t­¬ng øng béi lµ kh¶ n¨ng sö dông mét tªn gäi d­íinhiÒu d¹ng kh¸c nhau. Hµm vµ to¸n tö t¶i béi lµ hai tr­êng hîp ®iÓn h×nhcña t­¬ng øng béi. Hµm, to¸n tö t¶i béi sÏ ®­îc ph©n tÝch ®Ó ®èi s¸nh vÒkiÓu, sè l­îng tham biÕn trong thêi gian dÞch ®Ó chän ra hµm, to¸n tö t­¬ngøng. Liªn kÕt ®­îc thùc hiÖn trong thêi gian biªn dÞch ®­îc gäi lµ thêi giantÜnh.ThÕ m¹nh cña t­¬ng øng béi cã hai cÊp:ð¨Cho phÐp chóng ta xö lý c¸c kh¸i niÖm cã liªn hÖ nhau theo métc¸ch gièng nhau, lµm cho ch­¬ng trÝnh tæng qu¸t h¬n vµ dÔ hiÓuh¬n.ð¨TÝnh t­¬ng øng béi cã thÓ ®­îc dïng ®Ó viÕt ch­¬ng tr×nh cã thÓmë réng nhiÒu h¬n. Khi mét lo¹i míi ®­îc thªm vµo cã liªnhÖvíi c¸c kiÓu ®ang cã th× b¶n chÊt t­¬ng øng béi cña nã sÏ lµm cholo¹i míi nµy thÝch hîp ngay vµo hÖ thèng mµ kh«ng ®ßi hái ph¶ithay phÇn cßn l¹i cña ch­¬ng tr×nh.C¬ chÕ thùc hiÖn t­¬ng øng béi:T­¬ng øng béiT­¬ng øng béitrong thêi gian dÞchT­¬ng øng béi trongthêi gian thùc hiÖnCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8II.2.1. Hµm t¶i béiNg«n ng÷ C kh«ng cho phÐp ng­êi lËp tr×nh sö dông cïng mét tªncho nhiÒu hµm trong mét ch­¬ng tr×nh. Tuy vËy trong C++, viÖc ®Þnh nghÜanµy lµ hoµn toµn hîp lÖ, c¸c hµm nµy kh¸c nhau vÒ sè l­îng hoÆc kiÓu cñac¸c ®èi sè cho hµm. C¸c hµm nh­ vËy ®­îc gäi lµ hµm t¶i béi (kÓ c¶ cÊutõ).II.2.2. To¸n tö t¶i béi.§· nhiÒu lÇn chóng ta kh¼ng ®Þnh r»ng trong C++chóng ta cã thÓ t¹ora nh÷ng kiÓu d÷ liÖu míi cã hµnh vi gièng nh­ c¸c kiÓu d÷ liÖu c¬ së. H¬nthÕ n÷a chóng ta cßn cã thÓ ®­a thªm ®Þnh nghÜa míi cho nh÷ng to¸n tö®­îc ®ÞnhnghÜa tr­íc. Nh÷ng to¸n tö cïng tªn thøc hiÖn ®­îc nhiÒu chøcn¨ng kh¸c nhau ®­îc gäi lµtoµn tö t¶i béi.Quy t¾c x©y dùng to¸n tö t¶i béi:1.ChØ cã thÓ x©y dùng nh÷ng to¸n tö ®· cã trong C++®Ó thµnh to¸n töbéi . Kh«ng thÓ tù ý t¹o ra nh÷ng to¸n tö míi .2.To¸n tö t¶i béi ph¶i cã Ýt nhÊt mét to¸n h¹ng cã kiÓu lµ kiÓu ®­îc®Þnh nghÜa bëi ng­êi sö dông .CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB83.Chóng ta kh«ng thÓ tù ý lµm thay ®æi ý nghÜa c¬ b¶n cña to¸n tö®· ®­îc ®Þnh nghÜa tr­íc . VÝ dô, chóng ta kh«ng thÓ ®Þnh nghÜa l¹i®­îc c¸c phÐp +,-®èivíi c¸c kiÓu c¬ së ( int, float).4.To¸n tö t¶i béi ®­îc x©y dùng vµ sö dông tu©n theo quy t¾c cóph¸p cña to¸n tö c¬ së nh­ ®· ®­îc ®Þnh nghÜa trong ng«n ng÷.5.Mét sè to¸n tö kh«ng thÓ ®Þnh nghÜa thµnh to¸n tö t¶i béi ®­îc (b¶ng 3-1).6.Mét sè to¸n tö kh«ng thÓ sö sông víi friend ®Ó thµnh hµm to¸n töt¶i béi( b¶ng 3-2), nh­ng cã thÓ sö dông hµm thµnh phÇn ®Ó ®æithµnh hµm to¸n tö t¶i béi.7.Hµm thµnh phÇn to¸n tö t¶i béi mét ng«i kh«ng cã tham biÕn vµ tr¶l¹i gi¸ trÞ t­êng minh. Hµm th©n thiÖn to¸n tö t¶i béimét ng«i cãtham biÕn lµ ®èi t­îng.8.Hµm thµnh phÇn lµ to¸n tö t¶i béi hai ng«i cã mét tham biÕn vµhµm th©n thiÖn lµ to¸n tö t¶i béi nhÞ nguyªn cã hai tham biÕn.9.Khi sö dông hµm thµnh phÇn lµ to¸n tö t¶i béi nhÞ nguyªn th× to¸nh¹ng bªn tr¸i cña to¸n tö ph¶i lµ ®èi t­îng trong líp chøa hµmthµnh phÇn ®ã .10.Nh÷ng to¸n tö sè häc nhÞ nguyªn +,-, *. Vµ / ph¶i tr¶ l¹i gi¸ trÞmét c¸ch t­êng minh.sizeofTo¸n tö x¸c ®Þnh kÝch th­íc.To¸n tö x¸c ®Þnh thµnh phÇn.*To¸n tö x¸c ®Þnh thµnh phÇn mµ con trá tíi::To¸n tö ph©n gi¶i miÒn x¸c ®Þnh?:To¸n tö ®iÒu kiÖnB¶ng 3-1. Nh÷ng to¸n tö kh«ng thÓ t¶i béiCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð=To¸n tö g¸n( )To¸n tö gäi thùc hiÖn mét hµm[ ]To¸n tö x¸c ®Þnh mét phÇn tö cña b¶ng->To¸n tö truy cËp tíi phÇn tö cña lípB¶ng 3-2. Nh÷ng to¸n tö kh«ng sö dông ®­îc víi friend§Þnh nghÜa to¸n tö t¶i béi§Ó ®­a thªm mét chøc n¨ng míi cho to¸n tö, chóng ta ph¶i biÕt ®­îcý nghÜa cña chøc n¨ng ®ã liªn quan nh­ thÕ nµo víi c¸c líp mµ to¸n tö ®ãsÏ ®­îc ¸p dông.§Þnh nghÜa tæng qu¸t cña to¸n tö t¶i béi lµ:return-type class-name::operator op(arg-list){------------;// phÇn th©n cña c¸c hµm to¸n tö}Trong ®ã return-type lµ kiÓu cña kÕt qu¶ thùc hiÖn c¸c phÐp to¸n, oplµ to¸n tö t¶i béi ®øng sau lµ tõ kho¸ operator op ®­îc gäi lµ hµm c¸c to¸ntö víi c¸c tham biÕn lµ arg-list.Hµm c¸c to¸n tö t¶i béi ph¶i lµ hµm thµnh phÇn (kh«ng ph¶i lµ hµmtÜnh) hoÆc lµ hµm th©n thiÖn (friendly). Sù kh¸c nhau c¬ b¶n gi÷a chóng lµ:ð¨Hµm thµnh phÇn t¶i béi kh«ng cã ®èi sè cho hµm to¸n tö mét ng«ivµ mét ®èi sè cho hµm to¸n tö hai ng«i .ð¨Hµm t¶i béi th©n thiÖn cã mét ®èi sè cho hµm to¸n tö mét ng«i ,hai ®èi sè cho hµm to¸n tö hai ng«i .CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Cã sù kh¸c nhau nµy bëi v× ®èi víi hµm thµnh phÇn th× ®èit­îng®­îc sö dông liªn quan ®Õn hµm thµnh phÇn ®ù¬c tù ®éng truyÒn vµo thamsè cho nã cßn hµm th©n thiÖn th× kh«ng lµm ®­îc ®iÒu ®ã.VÝ dô:class Vector{private:int v[100];public:openrator + (vector); // céng vector, hµm thµnh phÇn.openrator-(vector & a); // trõ vector, hµm thµnh phÇn.openratorð=(const vector & a); // phÐp g¸n vector, hµm thµnh phÇn.openrator-(); // ®æi dÊu vector, hµm thµnh phÇn.friend vector+(vector, vector);// céng vector hµm th©n thiÖn.int opratorð=ð=(vector);// so s¸nh hµm thµnh phÇn.friend intð=ð=(vector, vector);// so s¸nh, hµm th©n thiÖn.};Trong ®ã c¸c vector lµ líp c¸c ®èi t­îng.Qu¸ tr×nh x¸c ®Þnh c¸c hµm to¸n tö t¶i béi ®­îc thùc hiÖn nh­ sau:ð¨§Þnh nghÜa líp ®Ó x¸c ®Þnh kiÓu d÷ liÖu sÏ ®­îc x¸c ®Þnh trongphÐp to¸n t¶i béi.ð¨Khai b¸o hµm operator op trong vïng chung public cña líp. Nã cãthÓ lµ hµm thµnh phÇn, hoÆc lµ hµm th©n thiÖn.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨§Þnh nghÜa néi dung c«ng viÖc cÇn thùc hiÖn.Hµm thµnh phÇn op x (hoÆc x op) sÏ lµ:operator op(x) ®èi víi hµm th©n thiÖn. BiÓu thøc x op y sÏ ®­îcchuyÓn sang s¹ng:x.operator op(y) ®èi víi hµm thµnh phÇn vµ operator op(x,y) ®èi víi hµm th©n thiÖn.To¸n tö t¶i béi sö dông víi friend:§Ó sö dông hµm to¸n tö t¶i béi th©n thiÖn ta chØ viÖc khai b¸o tõ kho¸friend ë ®Çu, sau ®ã®Þnh nghÜa l¹i to¸n tö. Trong nhiÒu tr­êng hîp, kÕt qu¶cña viÖc sö dông hµm thµnh phÇn gièng hÖt nh­ hµm th©n thiÖn. Mét c©uhái ®Æt ra lµ t¹i sao ph¶i ph©n biÖt hai tr­êng hîp nh­ thÕ? HiÓn nhiªn lµ v×cã nh÷ng t×nh huèng ®ßi hái ph¶i sö dông hµm th©n thiÖn mµ kh«ng södông hµm thµnh phÇn ®­îc.II.2.2 ChuyÓn ®æi kiÓuChuyÓn ®æi kiÓu lµ mét trong nh÷ng ®Æc tÝnh m¹nh cña C mµ c¸cng«n ng÷ kh¸c hÇu nh­ kh«ng cã ®­îc. Mét biÓu thøc cã thÓ cã nh÷ngh»ng, biÕn ë nhiÒu kiÓu kh¸c nhau vµ khi thùc hiÖn sÏ ¸p dôngquy t¾cchuyÓn ®æi kiÓu tù ®éng ®­îc ch­¬ng tr×nh dÞch cµi ®Æt s½n, kiÓu d÷ liÖu ëbªn ph¶i phÐp g¸n sÏ tù ®éng chuyÓn ®æi sang kiÓu ë bªn tr¸i. Tuy nhiªn®iÒu nµy sÏ khã thùc hiÖn ®­îc ®èi víi kiÓu d÷ liÖu do ng­êi sö dông ®ÞnhnghÜa, b©y giê ta xÐt c¸cphÐp to¸n chuyÓn kiÓu trªn líp.ð¨Tõ kiÓu c¬ së sang kiÓu líp.§Ó thùc hiÖn ®æi kiÓu d÷ liÖu sanglíp chóng ta sö dông to¸n tö khëi t¹o ®èi t­îng.ð¨Tõ kiÓu líp sang kiÓu c¬ së. C++cho phÐp ®Þnh nghÜa to¸n tö quyhåi kiÓu t¶i béi ®Ó chuyÓn d÷ liÖu kiÓu líp sang d¹ng kiÓu c¬ së.D¹ng tæng qu¸t cña to¸n tö quy håi kiÓu t¶i béi ë d¹ng hµm:operator double() chuyÓn líp vector sang kiÓu double. Khi ®ãtrong ch­¬ng tr×nh chóng ta cã thÓ viÕt:double lenð=double(v1); // v1 lµ ®èi t­îng trong líp vector hoÆc:double lenð=v1;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Hµm to¸n tö kiÓu quy håi ph¶i tháa m·n nh÷ng tÝnh chÊt sau:-Nã ph¶i lµ hµm thµnh phÇn cña mét líp.-Nã kh«ng chØ ®Þnh kiÓu gi¸ trÞ quay trë l¹i.-Nã kh«ng cã ®èi sè.ð¨Tõ mét líp sang mét líp kh¸c:viÖc chuyÓn ®æi kiÓu gi÷a nh÷ng®èi t­îng ë nhiÒu líp kh¸c nhau ®­îc thùc hiÖn th«ng qua to¸n tökhëi t¹o ®èi t­îng hoÆc hµm ®æi kiÓu. Hµm ®æi kiÓu ph¶i lµ hµmthµnh phÇn: operator type_name0. ChuyÓn ®èi t­îng trong lípchøa nã sang kiÓu type_name. Type_name cã thÓ lµ kiÓu bÊt kú.NÕu chuyÓn kiÓu gi÷a c¸c ®èi t­îng th«ng qua cÊu tö th× thùc chÊtlµ sao chÐp d÷ liÖu gi÷a c¸c ®èi t­îng.II.3. KÕ thõa vµ sù më réng c¸c lípKh¶ n¨ng sö dông l¹i lµ ®Æc tÝnh quan träng cña lËp tr×nh h­íng ®èit­îng. ViÖc sö dông l¹i nh÷ng ®¬n thÓ ch­¬ng tr×nh, nh÷ng líp ®·®­îcph¸t triÓn tèt, ®· ®­îc kiÓm nghiÖm kh«ng nh÷ng tiÕp kiÖm ®­îc tiÒn cña,thêi gian mµ cßn lµm t¨ng thªm nh÷ng kh¶ n¨ng t­¬ng thÝch, ®é tin cËy cñahÖ thèng.C++hç trî rÊt m¹nh cho nh÷ng kh¸i niÖm vÒ sö dông l¹i. Líp ®­îcthiÕt kÕ trong C++lu«n lu«ncã thÓ ®­îc sö dông l¹i theo nhiÒu c¸ch kh¸cnhau. Khi mét líp ®· ®­îc ®Þnh nghÜa, ®­îc kiÓm nghiÖm th× ng­êi lËptr×nh kh¸c cã thÓ sö dông nã trong c¸c môc ®Ých riªng cña m×nh. Nh÷ng lípnµy lµ líp c¬ së ®Ó t¹o ra nh÷ng líp míi (líp dÉn xuÊt), sö dông l¹i nh÷ngtÝnh chÊt trong nh÷ng líp ®· ®­îc x¸c ®Þnh. C¬ chÕ dÉn xuÊt ra nh÷ng lípmíi tõ nh÷ng líp tr­íc gäi lµ sù kÕ thõa (hoÆc dÉn xuÊt).Líp dÉn xuÊt cã thÓ kÕ thõa mét sè hoÆc tÊt c¶ nh÷ng ®Æc tÝnh cñalíp c¬ së, vµ cã thÓ kÕ thõa mét hay nhiÒu líp ë c¸c møc kh¸c nhau. C++cung cÊp cho chóng ta 5 lo¹i kÕ thõa sau:[3]1.KÕ thõa ®¬n.2.KÕ thõa ®a møc.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB83.KÕ thõa ph©n cÊp.4.KÕ thõa béi.5.KÕ thõa kÐp (phøc hîp).C¸ch t¹o ra líp dÉn xuÊt (derrved_class_name) tõ mét líp c¬ së(base_class_name):class derrved_class_name: mode base_class_name{--------------------// c¸c thµnh phÇn cña líp dÉn xuÊt----------};DÊu ':' chØ ra r»ng líp derrved_class-name ®­îc dÉn ra tõbase_class_name. Tõ mode lµ thÓ khai b¸o tuú chän, cã thÓ lµ private hoÆclµ public. MÆc nhiªn lµ private (kh«ng cã mode).Khi líp dÉn xuÊt khai b¸o kÕ thõa theo kiÓu private th× tÊt c¶ nh÷ngthµnh phÇn chung public cña líp c¬ së trë thµnh phÇn riªng private cña lípdÉn xuÊt vµ v× vËy nh÷ng thµnh phÇn public cña líp c¬ së chØ cã thÓ truynhËp ®­îc th«ng qua hµm thµnh phÇn cña líp kÕ thõa.Ng­îc l¹i, khi khai b¸o kÕ thõa theo kiÓu public th× c¸c thµnh phÇnchung cña líp c¬ së còng trë thµnh phÇn chung cña líp dÉn xuÊt, nªn c¸c®èi t­îng cña líp dÉn xuÊt cã thÓ truy nhËp ®Õnthµnh phÇn public cña, lípc¬ së (h×nh 3-3).Trong c¶ hai tr­êng hîp, thµnh phÇn private cña líp c¬ së hoµn toµnkh«ng ®­îc kÕ thõa. V× thÕ nh÷ng thµnh phÇn private cña líp c¬ së kh«ngkhi nµo trë thµnh thµnh phÇn cña lãp dÉn xuÊt.II.3.1. KÕ thõa ®¬nKÕ thõa ®¬n lµ mét líp chØ kÕ thõa mét líp ®· cã.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Chóng ta cã thÓ m« t¶ nh­ sau:*Líp B kÕ thõa kiÓu public tõ líp A:class B: public A{---------// D÷ liÖu vµ hµm vïng privateABLíp c¬ sëLíp dÉn xuÊtclass AD÷ liÖu vµ hµmpublicD÷ liÖu vµ hµmprivateD÷ liÖu vµ hµmprotectedABLíp c¬ sëLíp dÉn xuÊtCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8---------// D÷ liÖu vµ hµm vïng protected---------// D÷ liÖu vµ hµm vïng public};líp B ®­îc m« t¶ nh­ sau:Líp B kÕ thõa nh÷ng thµnh phÇn chung cña A. Nh÷ng thµnh phÇnchung cña A kh«ng ®­îc kÕ thõa. §Ó truy nhËp ®­îc tíi thµnh private cñaA nh­ a (nh÷ng thµnh phÇn kh«ng ®­îc kÕ thõa) ë trong B th× chóng taph¶isö dông tíi hµm thµnh phÇn ®­îc kÕ thõatõ A lµ get_a().* Líp B kÕ thõa kiÓu private tõ líp A. Lóc ®ã d÷ liÖu vµ hµm cña lípB ®­îc m« t¶ nh­ trong h×nh trªn.Ta thÊy víi c¬ chÕ kÕ thõa kiÓu private th× ®èi t­îng X cña líp Bkh«ng thÓ sö dông trùc tiÕp nh÷ng thµnh phÇn public cña A. do vËy cã lÖnh:X.get_ab();X.get_a();X.show_a();®Òu kh«ng thùc hiÖn ®­îc, bëi v× chóng ®· trë thµnh private cña líp B.Vïng publicD÷ liÖu vµhµm public BVïng privateD÷ liÖu vµ hµmpublic AD÷ liÖu vµ hµmprivate Bclass BVïng protectedVïng puclicD÷ liÖu vµ hµmpublic AD÷ liÖu vµ hµmpublic Bclass BVïng privateD÷ liÖu vµhµm private BD÷ liÖu vµhµmprotected AD÷ liÖu vµ hµmprotected BVïng privateD÷ liÖu vµhµm private BCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8H×nh 3-5 Bæ sung thµnh phÇn kÕ thõa vµo vïng private.Chóng ta thÊy r»ng, nh÷ng thµnh phÇn khai b¸o ë vïng private cñalíp c¬ së kh«ng ®­îc kÕ thõa. Do vËy mµ líp kÕ thõa cña líp dÉn xuÊtkh«ng sö dông ®­îc nh÷ng thµnh phÇn mµ nã kÕ thõa. Chóng ta sÏ thùchiÖn nh­ thÕ nµo khi trong líp dÉn xuÊt cã nhu cÇu kÕ thõa nh÷ng thµnhphÇn d÷ liÖuprivate cña líp c¬ së. §iÒu nµy cã thÓ thùc hiÖn ®­îc b»ngc¸ch chuyÓn d÷ kiÖu thµnh phÇn ®Æc khai b¸o trong vïng private sang vïngpublic. Nh­ng khi ®ã th× d÷ liÖu ®ã l¹i cã thÓ truy nhËp bëi tÊt c¶ nh÷ngthµnh phÇn kh¸c trong ch­¬ng tr×nh. §iÒu nµy ph¸vì nguyªn lý che dÊuth«ng tin mµ chóng ta cÇn thùc hiÖn.§Ó gi¶i quyÕt vÊn ®Ò trªn, C++®­a thªm thÓ khai b¸o protected (®­îcb¶o vÖ) cho nh÷ng thµnh phÇn cña líp c¬ së cÇn ®­îc kÕ thõa chØ trongnh÷ng líp dÉn xuÊt trùc tiÕp. Nh÷ng thµnh phÇn ®­îc khai b¸o protected cãthÓ ®­îc truy nhËp bëi nh÷ng thµnh phÇn trong cïng líp vµ trong nh÷ng lípdÉn xuÊt trùc tiÕp tõ líp c¬ së. Nh­ vËy, ®Ó cã nh÷ng thµnh phÇn protectedta chØ cÇn khai b¸o nh­ sau:class A{private:_ _ _ _ _protected:_ _ _ _ _public:CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8_ _ _ _ _};Mèi quan hÖ gi÷a c¸c thµnh phÇn cña líp c¬ së vµ líp dÉn xuÊt ®­îc m« t¶ trong b¶ng 3-3 vµ h×nh 3-7.Líp c¬ sëLíp dÉn xuÊtKiÓu dÉn xuÊt publicKiÓu dÉn xuÊt privateprivateprotectedpublicKh«ng ®­îc kÕ thõaprotectedpublicKh«ng ®­îc kÕ thõaprivateprivateB¶ng 3-3. Nh÷ng thµnh phÇn ®­îc kÕ thõa.class X: public D1: public D2privateprotectedpublicprivateprotectedpublicprivateprotectedpublicKh«ng ®­îc thõa kÕKh«ng ®­îc thõa kÕclass D1:public Bclass D2:private Bclass BCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8H×nh 3-6 Sù t­¬ng øng trong kÕ thõaII.3.2. KÕ thõa ®a møcTrong kÕ thõa ®a møc, c¸c líp ®­îc tæ chøc nh­sau:Líp dÉn xuÊt cña kÕ thõa ®a møc ®­îc khai b¸o nh­ sau:class A {. . .};// líp c¬ sëclass B: public A {. . .};// B dÉn xuÊt tõ Aclass C: public B {. . . }// C dÉn xuÊt tõ BQu¸ tr×nh kÕ thõa cã thÓ ®­îc më réng tuú ý, nghÜa c¸c líp kÕ thõanhau víi sè møc tuú ý. Trong kÕ thõa ®a møc th× nguyªn t¾c truy nhËp cñac¸c líp dÉn xuÊt ®èi víi c¸c líp c¬ së còng gièng nh­ trong kÕ thõa ®¬n vµnã kh«ng bÞ h¹n chÕ bëi c¸c líp trung gian. Cã nghÜa lµ líp B truy nhËp®­îc ®Õn thµnh phÇn (d÷ liÖu vµ hµmtrong vïng protected vµ public) cñalíp A, líp C truy nhËp ®­îc ®Õn thµnh phÇn cña líp B vµ còng truy nhËptrùc tiÕp ®­îc ®Õn c¸c thµnh phÇn cña líp A mµ kh«ng cÇn ph¶i th«ng qualíp B.II.3.3. KÕ thõa ph©n cÊpKÕ thõa lµ sù ph©n cÊp c¸c líp, c¸c líp kÕ thõa nhau theo mét cÊutróc ph©n cÊp ®­îc gäi lµ kÕ thõa ph©n cÊp. C++hç trî cho viÖc sö dông c¬chÕ kÕ thõa ®Ó ph©n cÊp c¸c líp m« t¶ nh÷ng cÊu tróc ®­îc thiÕt kÕ theoc¸ch tiÕp cËn ph©n cÊp. Cã thÓ m« t¶ tæng qu¸ nh­ sau:ABCLíp «ngLíp chaLíp conLíp dÉn xuÊttrung gianLíp dÉn xuÊtH×nh 3-7 KÕ thõa ®a møcCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8II.3.4. KÕ thõa béiMétlíp cã thÓ kÕ thõa thuéc tÝnh cña nhiÒu líp ®­îc gäi lµ kÕ thõabéi. KÕ thõa béi cho phÐp chóng ta kÕt hîp ®Æc tr­ng cña mét sè líp t¹o ralíp míi.Mét líp ®­îc dÉn xuÊt tõ nhiÒu líp c¬ së ®­îc khai b¸o nh­ sau:class B: mode A1, mode A2, ..., modeAn{----};víi mode lµ kiÓu khai b¸o: public hoÆc private, vµ c¸c líp c¬ së ph¶i ®­îckhai b¸o tr­íc.II.3.5. KÕ thõa kÐpKÕ thõa kÐp lµ sù kÕt hîp cña kÕ thõa ®a thøc vµ kÕ thõa béi. NghÜalµ mét líp dÉn xuÊt cã thÓ kÕ thõa nhiÒu líp c¬ së vµ ë nhiÒu møc kh¸cnhau.A1A2An.............................BH×nh 3-9. KÕ thõa béiAA2A3A111A33A32A31A22A21A11H×nh 3-8 KÕ thõa ph©n cÊpCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8II.3.6. C¸c líp c¬ së ¶oTrong thøc tÕ ®«i khi chóng ta gÆp t×nh huèng ®ßi hái ph¶i sö dôngkÕt hîp c¶ ba lo¹i kÕ thõa: kÕ thõa béi, ®a møc vµ ph©n cÊp gäi lµ kÕ thõalai ghÐp.VÝ dô:Líp kÕ thõa trùc tiÕp hai líp con CHAvµ MÑ.Ngoµi ra nã cßn kÕthõa tõ«ng bµtheo hai ®­êng kh¸c nhau. Nã kÕ thõa trùc tiÕp, mét sè®Æc tÝnh cña«ng bµ(theo ®­êng---) vµ g¸n tiÕp quacha, mÑ( hailíp c¬ së trung gian). Nh­ vËy nh÷ng thµnh phÇn public vµ protected cña«ng bµsÏ ®­îc kÕthõa ®óp ë lípcon, lÇn thø nhÊt lµ kÕ thõa tõcha,lÇn thø hai kÕ thõa tõmÑ. NghÜa lµ lípconsÏ cã hai tËp c¸c thµnh phÇnkÕ thõa gièng nhau. Do vËy chóng ta ph¶i lo¹i bá d­ thõa. Trong C++chophÐp lo¹i bá nh÷ng thµnh phÇn d­ thõa nµy b»ng c¸ch khai b¸o líp c¬ së ¶o(virtual base class). Lóc ®ã chóng ta khai b¸o nh­ sau:«ng_bµmÑchaconH×nh 3-11 KÕ thõa lai kÐpABCDH×nh 3-10. KÕ thõa kÐpCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8class ONG_BA{------};class CHA: virtual ONG_BA // hoÆc public virtual{------};class ME: virtual public ONG_BA{------};class CON: public CHA, public ME{------};Lóc nµy chØ cã mét b¶n sao cña ONG_BA sÏ ®­îc kÕ thõa ë lípCON.Khi mét líp ®­îc khai b¸o kÕ thõa tõ c¸c líp c¬ së ¶o th× chØ cã métb¶n sao cña nh÷ng thµnh phÇn kÕ thõa ®­îc chuyÓn cho líp dÉn xuÊt, bÊtluËn bao nhiªu ®­êng kÕ thõa còng thÕ.II.3.7 CÊu tö trongc¸c líp dÉn xuÊtCÊu tö ®­îc sö dông ®Ó t¹o lËp c¸c ®èi t­îng. Nh­ng viÖc t¹o lËp c¸c®èi t­îng trong nh÷ng líp kÕ thõa ®­îc thùc hiÖn nh­ thÕ nµo? Chóng tathÊy cã nh÷ng ®iÓm kh¸c biÖt nh­ sau: nÕu trong líp c¬ së kh«ng cã métcÊu tö nµo cã tham biÕn th×trong líp dÉn xuÊt kh«ng ph¶i cã hµm cÊu tö.Song nÕu mét líp c¬ së nµo ®ã cã chøa cÊu tö cã tham biÕn th× líp dÉn xuÊtcòng ph¶i cã cÊu tö vµ c¸c tham sè thùc sù sÏ ®­îc truyÒn t­¬ng øng choc¸c cÊu tö cã tham biÕn trong c¸c líp c¬ së. C¶ hai líp c¬ së vµdÉn xuÊt®Òu cã cÊu tö th× cÊu tö cña líp c¬ së thùc hiÖn tr­íc råi sau ®ã ®Õn líp cÊutö cña líp dÉn xuÊt. Trong tr­êng hîp kÕ thõa béi th× c¸c cÊu tö cña líp®­îc thùc hiÖn lÇn l­ît theo thø tù mµ chóng ®­îc khai b¸o trong líp dÉnxuÊt.Trong tr­êng hîpkÕ thõa ®a møc th× c¸c cÊu tö ®­îc thùc hiÖn theothø tù kÕ thõa theo ®a møc.CÊu tö cña líp dÉn xuÊt ®­îc ®Þnh nghÜa nh­ sau:Ph­¬ng_thøc_thiÕp_lËp_dÉn_xuÊt (DS1, DS2, ..., DSn, DSDX):C¬_së_1 (DS1),C¬_së_1 (DS2),-------------------C¬_së_1 (DSn),{------// Néi dung cÊu tö ë líp dÉn xuÊtCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Trong ®ã phÇn ®Çu cña ph­¬ng_thøc_thiÕt_lËp_tö_dÉn_xuÊt bao gåmhai thµnh phÇn c¸ch nhau b»ng hai dÊu chÊm : .§Çu tiªnlµ khai b¸o danhs¸ch nh÷ng tham biÕn sÏ ®­îc truyÒn cho c¸c cÊu tö ë líp dÉn xuÊt lµph­¬ng_thøc_thiÕt_lËp_dÉn_xuÊt (DS1, DS2, ...,DSn, DSDX), sau ®ã lµ c¸clêi gäi tíi c¸c hµm cÊu tö ®· ®­îc ®Þnh nghÜa ë nh÷ng líp c¬ së lµC¬_së_1(DS1), ..., C¬_së_n(DSn). Trong ®ã DS1, DS2, ...., DSn lµ nh÷ngdanh s¸ch tham biÕn ®­îc sö dông ®Ó t¹o lËp c¸c ®èi t­îng. VÝ dô:D (int a1, a2, float b1, float b2, int d1):A(a1, a2), // gäi cÊu tö A trong líp AB(b1, b2), // gäi cÊu tö B trong líp B{d = d1;}CÊutö D() cung cÊp c¸c gi¸ trÞ a1, a2 vµ b1, b2 ®Ó thùc hiÖn cÊu töA(a1, a2) trong líp A, B(b1, b2) trong líp B.II.3.8. Hµm ¶oT­¬ng øng béi lµ cÊu tróc cho phÐp nh÷ng ®èi t­îng cña nhiÒu lípkh¸c nhau cã kh¶ n¨ng xö lý cïng mét th«ng tin gièng nhau nh­ngë nhiÒud¹ng kh¸c nhau. Mét nhu cÇu ®Æt ra lµ lµm thÕ nµo xö lý ®­îc c¸c ®èi t­îng®ã mµ kh«ng cÇn chó ý ®Õn c¸c líp cña chóng. ®Ó thùc hiÖn ®­îc yªu cÇutrªn ®èi víi t­¬ng øng béi ta cã thÓ sö dônghµm ¶o(virtual function).CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8C¸ch ®Þnh nghÜa hµm ¶oGi¶ söA lµ líp c¬ së, c¸c líp B, C, D dÉn xuÊt ( trùc tiÕp hoÆc gi¸ntiÕp) tõ A. gi¶ sö trong 4 líp trªn ®Òu cã ph­¬ng thøc trïng tªn, kiÓu, c¸c®èi sè. ®Ó ®Þnh nghÜa c¸c ph­¬ng thøc nµy lµ ph­¬ng thøc ¶o, ta chØ cÇn:ð¨HoÆc thªm tõ kho¸ virtual vµo dßng tiªu ®Òcña ph­¬ng thøc bªntrong ®Þnh nghÜa cña líp c¬ së.ð¨HoÆc thªm tõ kho¸ virtual vµo dßng tiªu ®Ò bªn trong ®Þnh nghÜacña tÊt c¶ c¸c líp A, B, C, D.Quy t¾c gäi ph­¬ng thøc ¶oPh­¬ng thøc ¶o ®­îc gäi th«ng qua mét con trá cña líp c¬ së, lóc ®ãph­¬ng thøc cña líp nµo ®­îc gäi phô thuéc vµo ®èi t­îng mµ con trá ®angtrá tíi.Víi c¸c líp A, B, C, D ®· ®­îc ®Þnh nghÜa, ®Ó truy nhËp ®Õn hµmhiÓn_thÞ() cña c¸c líp ta khai b¸o nh­ sau:A*p; // p lµ con trá kiÓu AA a; B b; Cc; Dd; //khai b¸o c¸c ®èi t­îngp=&a;// p trá tíi ®èi t­îng a cña líp Ap->hiÓn_thÞ(); // gäi tíi A:: hiÓn_thÞ()p=&b; // p trá tíi ®èi t­îng b cña líp Bp->hiÓn_thÞ(); // gäi tíi B::hiÓn_thÞ()p=&c;// p trá tíi ®èi t­îng c cña líp Cp->hiÓn_thÞ(); // gäi tíi C::hiÓn_thÞ()Hµm ¶o ph¶i tu©n theo nh÷ng quy t¾c sau:1.Hµm ¶o ph¶i lµ hµm thµnh phÇn cña líp.2.Nh÷ng thµnh phÇn tÜnh kh«ng thÓ khai b¸o ¶o ®­îc.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB83.Sö dông con trá ®Ó truy nhËp ®Õn c¸c hµm ¶o.4.Hµm ¶o cã thÓ lµ hµm th©n thiÖn (friend) cña líp kh¸c.5.Hµm ¶o ph¶i ®­îc ®Þnh nghÜa trong líp c¬ së hoÆc c¶ trong líp c¬së vµ líp dÉn xuÊt, ngay c¶ khi kh«ng sö dông nã.6.MÉu cña tÊt c¶ c¸c phiªn b¶n (líp c¬ së vµ líp dÉn xuÊt) ph¶igièng nhau. NÕu hai hµm cïng tªn nh­ng gièng nhau th× C++xemlµ to¸n tö t¶i béi.7.Kh«ng ®­îc t¹o ra to¸n tö ¶o, nh­ng cã thÓ t¹o ra ®­îc ph­¬ngthøc huû bá ¶o.8.Con trá kiÓu líp c¬ së cã thÓ dïng ®Ó x¸c ®Þnh ®èi t­îng líp dÉnxuÊt, nh­ng ng­îc l¹i th× kh«ng.9.Kh«ng dïng ®­îc phÐp t¨ng gi¶m gi¸ trÞ con trá ®èi víi líp dÉnxuÊt, mµ chØ cã t¸c dông víi líp c¬ së.Ch­¬ng IIIHµm vµ líp mÉuCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8III.1. Hµm mÉuIII.1.1. §Þnh nghÜaKhi chóng ta muèn t¹o ra mét ch­¬ng tr×nh C++thùc hiÖn c¸c c«ngviÖc nµo ®ã cho tÊt c¶ c¸c kiÓu d÷ liÖu tÊt nhiªn ta sÏ sö dông hµm n¹pchång (function overloading). Ch¼ng h¹n ta muèn t¹o c¸c hµm tÝnh b×nhph­¬ng sè int vµ float, ta sÏ ph¶i t¹o hai hµm:int Square(int x){return x*x;}vµfloat Square(float x){return x*x;}T­¬ng tù nh­ vËy, cho mçi kiÓu d÷ liÖu kh¸c nhau ph¶i t¹o ra méthµm Square míi. Ta nhËn thÊy r»ng m· lÖnh kh«ng ®æi chØ cã kiÓu d÷ liÖulµ kh¸c nhau. ChÝnh v× vËy, ng«n ng÷ lËp tr×nh h­íng ®èi t­îng C++chophÐp cµi ®Æt hµm tæng qu¸t vÒ d÷ liÖu, khi sö dông sÏ chØ ®Þnh cô thÓ ®Ótr×nh biªn dÞch hiÓu ®­îc. Hµm nh­ vËy ®­îc gäi lµ hµm mÉu (template)nh­ vÝ dôtrªn ta cã thÓ viÕt l¹i nh­ sau:template <class T>T Square (T x){return x*x;}Trong ®ã T lµ tªn gäi mÉu cña kiÓu d÷ liÖu sö dông trong hµm. Víic¸ch viÕt nµy, cã thÓ sö dông mét kiÓu d÷ liÖu bÊt kú nµo kh¸c.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8VÝ dô:void main(){cout << Square(2)= <<Square(2)<< endl;cout << Square(7.1)= <<Square(7.1)<< endl;}Trong lÇn gäi thø nhÊt, hµm Square cã tham sè lµ int nªn tr×nh biªndÞch sÏ t¹o ra hµm int Square (int), lÇn hai t¹o ra hµm cã d¹ng float Square(float).III.1.2. Hµm mÉu cã nhiÒu thamsè h×nh thøcTr­êng hîp hµm mÉu cã nhiÒu tham sè cïng kiÓu, khi tr×nh biªn dÞchbiÕt ®­îc kiÓu thø nhÊt th× c¸c tham sè cßn l¹i mang cïng kiÓu mÉu sÏ nhËnkiÓu cña tham sè thø nhÊt.VÝ dô:template <class T>T max <T a, T b>{return (a>b)?a:b;}void main(){float a,b;cout <<  Vµo 2 sè: <<endl;cin >> a>>b>>endl;cout <<  Sè lín h¬n: << max(a,b);CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8}Trong tr­êng hîp nµy tr×nh biªn dÞch t¹o ra hµm float max(float,float) theo d¹ng cña mÉuIII.1.3. Hµm mÉu cã nhiÒu tham sè kh¸c nhauHµm template cã nhiÒu tham sè víi kiÓu kh¸c nhau. Tuy nhiªn nãvÉn mang ®Çy ®ñ tÝnh chÊt cña hµm mÉu ®¬n gi¶n.VÝ dô:template <class A, class B>A factorial (B n){if (n>0) return n*factorial(n-1);else return 1;}void main(){float f;f=factorial(20);cout << 20!= << f<< endl;}Chó ý:ð¨Trong viÖc t¹o ra hµm mÉu, chóng ta cã thÓ sö dông bÊt kú kiÓud÷ liÖu nµo kÓ c¶ do ng­êi sö dông t¹o ra.ð¨Chóng ta vÉn cã thÓ x©y dùng hµm trïng tªn víi hµm templatenh­ hiÖn t­¬ng n¹p chång.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8template <class T>T abs (T a){return (a<0)?-a:a;}float abs(float a){for (int i=0,float s=0;i<5;i++)s+=abs(a[i]);return s;}void main(){float a[5]={2,-4,-3,5,-6};cout << chuÈn cña vecto a lµ: <<abs(a);cout << abs(-5.3)= <<abs(-5.3)<<endl;}§Çu tiªn ch­¬ng tr×nh sÏ t×m hµm cã tham sè phï hîp nÕukh«ng t×m thÊy nã sÏ gäi hµm mÉu. Trong ch­¬ng tr×nh cã hai hµmabs nh­ng do c¸ch truyÒn tham sè thùc vµ sù hiÖn diÖn cña hµm floatabs(float). Ch­¬ng tr×nh dÞch sÏ lùa chän ®óng ®Ó thùc hiÖn vµ biªndÞch.ð¨Mét hµm mÉu ra lÖnh cho ch­¬ng tr×nh dÞch c¸ch t¹o ra mét tËpc¸c hµm n¹p chång. Ch­¬ng tr×nh dÞch chØ sinh ra m· cho c¸ckiÓu d÷ liÖu khi nã gäi hµm mÉu.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8III.2. Líp mÉuIII.2.1. §Þnh nghÜaCòng gièng nh­ hµm mÉu, líp mÉu còng mang ®Çy ®ñ tÝnh chÊt, t­t­ëng cña hµm mÉu b»ng c¸ch cµi ®Æt mét líp chung tæng qu¸t nµo ®ã. Khisö dông cho tõng tr­êng hîp cô thÓ líp sÏ mang kiÓu d÷ liÖu x¸c ®Þnh.§©ylµ c«ng cô m¹nh ®Ó x©y dùng c¸c líp chøa.Vi dô:Template<class K ,class D>class Record {K key ;D data;public:Record(K kx,D dx);K GetKey(){return key;}DgetData(){return data;}}template<class K ,class D>Record <K,D>::Record(K kx,D dx){key=kx;data=dx;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8}L­u ý:ð¨Khi néi dung cña ph­¬ng thøc viÕt bªn ngoµi líp chóng ta ph¶i m« t¶l¹i khai b¸o template <class K, class D> phÝa tr­íc tÊt c¶ kÓ c¶ kiÓutr¶ vÒ cña ph­¬ng thøc. Cßn c¸c tham chiÕu bªn trong líp mÉu kh«ngph¶i khai b¸o.ð¨C¸c líp mÉu cã thÓ thõa kÕ tõ c¸c líp mÉu kh¸c.VÝ dô:template <class D>class Object: Record<int, D>{...}ð¨Líp mÉu cã thÓ lµ tham sè cho mét líp mÉu kh¸c:Record <int, Object<string>> rec;III.2.2. Líp mÉu cã tham sèNg«n ng÷ lËp tr×nh h­íng ®èi t­îng C++ cho phÐp t¹o ra c¸c lípmÉulinh ®éng b»ng c¸ch cho phÐp thay ®æi gi¸ trÞ cña c¸c thµnh phÇn bªn tronglíp. Khi ®ã líp cã d¹ng cña mét hµm víi tham sè h×nh thøc.template <class T, size_t MAX>class Stack{...}Chó ý:Khi ®Þnh nghÜa mét líp mÉu, mçi líp mÉu cã ph­¬ng thøc vµ d÷ liÖuriªng cña nã. Cho nªn cµng nhiÒu líp mÉu th× ch­¬ng tr×nh cµng cÇn nhiÒubé nhí. PhÇn lín c¸c mÉu sÏ ®­îc ®Þnh nghÜa trong c¸c tÖp chøa khai b¸ovµ sÏ ®­îc dÞch gép (include) khi sö dông líp ®ã.III.3. KÕt luËnCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8C¸c hµm vµ líp mÉu cho phÐp t¹o ra mét hä c¸c hµm vµ c¸c líp ®Ót¸c ®éng ®Õn c¸c kiÓu d÷ liÖu kh¸c nhau. Víi nh÷ng ®Æc ®iÓm næi bËt nµy,ch­¬ng tr×nh h­íng ®èi t­îng hoµn toµn linh ®éng vµ mang tÝnh kÕ thõacao. §ång thêi nã gióp cho ng­êi lËp tr×nh kh«ng ph¶i viÕt l¹i nh÷ng ®o¹nm· gièng nhau, còng nh­ lµm thiÓu m· nguån mét c¸ch ®¸ng kÓ.Ch­¬ng IVCÊu tróc d÷ liÖu & C¸c líp mÉuIV. CÊu tróc d÷ liÖuC¸c ch­¬ng tr×nh th­êng chøa hai phÇn: gi¶i thuËt vµ cÊu tróc d÷liÖu. Mét ch­¬ng tr×nh tèt lµ ch­¬ng tr×nh hoµ hîp ®­îc c¶ hai vÊn ®Ò nµy.Sùchän lùa vµ thi hµnh cña mét cÊu tróc d÷ liÖu ®­îc xem lµ quan trängngang víi c¸c tr×nh vËn dông nã. Do ®ã, viÖc cã ph­¬ng ph¸p ®óng l­u vµtruy xuÊt d÷ liÖu trong mét sè tr­êng hîp lµ rÊt quan träng.CÊu tróc d÷ liÖu ®­îc xem nh­ mét tËp c¸c dÞch vô cung cÊp cho thÕgiíi bªn ngoµi, Ng­êi sö dông kh«ng quan t©m ®Õn viÖc l­u tr÷ cô thÓ trªnc¸c thiÕt bÞ vËt lý nh­ thÕ nµo,mµ chØ quan t©m ®Õn viÖc truy cËp tøc lµl­u vµo vµ phôc håi nh­ thÕ nµo.C¸c kiÓu cÊu tróc d÷ liÖu c¬ b¶n sau mµ t«i ®Ò cËp trong cuèn tiÓuluËn nµy:ð¨Hµng ®îi (Queue).ð¨Hµng quay trßn (Circle).ð¨Ng¨n xÕp (Stack).ð¨Danh s¸ch liªn kÕt ®¬n (Simple List).CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨Danh s¸ch liªn kÕt ®«i (double List).ð¨C©y nhÞ ph©n (Binary Tree).IV.1.1. Líp chøaDo c¸c tÝnh chÊt chung c¬ b¶n cña c¸c biÓu cÊutróc d÷ liÖu tuyÕntÝnh ng¨n xÕp hµng vµ hµng xoay nªn t«i ®· x©y dùng líp chøa thuÇn ¶oSequence v× c¸c lý do sau:ð¨Sö dông ®­îc sù thõa kÕ, tr¸nh ph¶i viÕt l¹i c¸c ph­¬ng thøc d÷liÖu ë c¸c líp kh¸c nhau.ð¨TËn dông ®­îc søc m¹nh còng nh­ tÝnh linh ho¹t cña ph­¬ng thøc¶o vµo c¸c øng dông ®a d¹ng sau nµy.IV.1.2. Líp chøa thuÇn ¶o// SEQUENCEtemplate<class T,int size>class Sequence{SequenceQueueStackCircleH×nh Líp chøa thuÇn ¶o SequenceCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8protected:size_t count;T data[size];void Copy(const Sequence<T,size> & seq);public:Sequence(){ count=0;}Sequence(const Sequence<T,size> & seq){ Copy(seq);}virtual int Put(const T & item)=0;//ph­¬ng thøc ¶ovirtual int Get(T & item)=0;virtual int See(T & item,int i)=0;//xem phÇn tö thø isize_t GetSize() { return size;}size_t GetCount() { return count;}void Flush() { count=0;}};//-----------------------------------------------------------------------template<class T,int size>void Sequence<T,size>::Copy(const Sequence<T,size> & seq){count=seq.count;for(int i=0;i<size;i++) data[i]=seq.data[i];}IV.2.1. Ng¨n xÕpNg¨n xÕp lµ mét cÊu tróc tuyÕn tÝnh ®Æc biÖt nã sö dông c¸ch truyxuÊt vµo sau ra tr­íc, th­êng ®­îc gäi lµ LIFO(Last In First Out). Nãichung ng¨n xÕp kh«ng ®­îc sö dông ®Ó l­u tr÷ d÷ liÖu tÜnh. Khi th«ng tin®­îc lÊy ra nã sÏ bÞ xo¸ khái ng¨n xÕp. Mét ng¨n xÕp cã thÓ rçng hoÆc cãc¸c phÇn tö.Cã thÓ h×nh dung ng¨n xÕp nh­ mét chång ®Üa. C¸i ®Æt lªn bµn ®Çutiªn sÏ ®­îc sö dông sau cïng. Cßn ®Üa cuèi cïng n»m trªn ®Çu chång ®­îcsö dông ®Çu tiªn. Ng¨n xÕp th­êng ®­îc dïng ®Ó truyÒn tham sè cho hµm.IV.2.2. L­u tr÷ ng¨n xÕp b»ng m¶ngCã thÓ l­u tr÷ ng¨n xÕp vµo mét m¶ng (vÐc t¬) gåm n phÇn tö nhíliªn tiÕp. Khi bæ xung mét phÇn tö sè l­îng c¸c phÇn tö b»ng lªn mét, cßnkhi lÊy ra mét phÇn tö sè l­îng phÇn tö cña ng¨n xÕp gi¶m ®i mét, ®iÒu nµy®­îc minh ho¹ trong h×nh sau:CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Chó ý:ð¨V× khèi l­îng l­u tr÷ cña ng¨n xÕp lµ h÷u h¹n (b»ng n) nªn khi tabæ sung thªm mét phÇn tö cÇn ph¶i kiÓm tra sè l­îng ®· ®¹t ®Õngiíi h¹n ch­a.ð¨Ng­îc l¹i, khi lÊy ra mét phÇn tö tõ ng¨n xÕp, ta ph¶i kiÓm tracßn phÇn tö nµo trong ng¨n xÕp kh«ng.IV.2.3. X©y dùng líp ng¨n xÕp mÉuLíp d÷ liÖu mÉu ng¨n xÕp gåm mét sè ph­¬ng thøc c¬ b¶n nh­:ð¨LÊy mét phÇn tö Get().ð¨L­u tr÷ mét phÇn tö Put().ð¨Sè phÇn tö cña ng¨n xÕp Getcount().ð¨Cì cña ng¨n xÕp Getsize().Ngoµi ra cßn cã mét sè ph­¬ng thøc tiÖn Ých kh¸c hç trî cho c¸ctr­êng hîp ®Æc biÖt:ð¨Xo¸ ng¨n xÕp Flush().ð¨Xem phÇn tö thø i mµ kh«ng ¶nh h­ëng ®Õn trËt tù cña ng¨n xÕpSee().Líp ng¨n xÕp ®­îc thõa kÕ tõlíp chøa Sequence.Put(A)Put(B)Get()Get()AABACÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8//STACKtemplate<class T,int size>class Stack:public Sequence<T,size>{public:Stack():Sequence<T,size>() {}Stack(const Stack<T,size> & sta):Sequence<T,size>(sta){}virtual int Put(const T & item);virtual int Get(T & item);virtual int See(T & item,int i);void operator =(const Stack<T,size> & sta){ Copy(sta);}};//------Ghi mét phÇn tö vµo------------------------------------------template<class T,int size>int Stack<T,size>::Put(constT & item){if( count==size) return 1;// Trµn Stackdata[count++]=item;return 0;}//-------LÊy mét phÇn tö---------------------------------------------template<class T,int size>int Stack<T,size>::Get(T & item){if (!count) return1;//Stack rçngitem=data[--count];return 0;}//-------Xem mét phÇn tö bÊt kú-----------------------------------template<class T,int size>int Stack<T,size>::See(T & item,int i){if(!i || i>count) return 1;item=data[--i];return 0;}IV.3. Hµng ®îiNg­îc l¹i víi ng¨n xÕp, hµng ®îi cho phÐp truy nhËp theo c¬ chÕ vµotr­íc ra sau, th­êng gäi lµ FIFO (first in first out), tøc lµ bæ sung d÷ liÖu ëmét ®Çu, vµ lÊy d÷ liÖu ra ë ®Çu kh¸c. Khi d÷ liÖu ®­îc lÊy ra nã sÏ bÞ xo¸khái hµng ®îi v× vËy mét hµng ®îi cã thÓ rçng hoÆc cã nhiÒu phÇn tö.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Hµng ®îi ®­îc sö dông nhiÒu trong lËp tr×nh, mét tr­êng hîp th«ngth­êng lµ viÖc m« pháng c¸c hµng ®îi còng ®­îc dïng bëi bé ®Þnh lÞch choc¸c t¸c vô cña hÖ ®iÒu hµnh vµ xuÊt nhËp.IV.3.1. L­utr÷ hµng ®îi b»ng m¶ngCòng gièng nh­ ng¨n xÕp, hµng ®îi ®­îc l­u tr÷ trong m¶ng cã kÝchcì n. Ngoµi ra cßn cÇn hai biÕn chØ sè ®Ó ghi vÞ trÝ ®Çu (head) mµ mét phÇntö cã thÓ ®­îc lÊy ra, vµ vÞ trÝ ®u«i (tail) n¬i phÇn tö cuèi cã thÓ ®­îc bæsung. VÞ trÝ®u«i ®­îc t¨ng lªn khi bæ sung mét phÇn tö míi vµ khi lÊy ramét phÇn tö th× ®Çu (head) t¨ng lªn mét. Cø nh­ vËy vÞ trÝ ®Çu ®uæi theo vÞtrÝ ®u«i. NÕu vÞ trÝ ®u«i v­ît qua chØ sè lín nhÊt cña m¶ng nã sÏ quay vÒ chØsè nhá nhÊt. T­¬ng tù nh­ vËy víi vÞ trÝ®Çu.headtailheadtailAPut(A)headtailABPut(B)headtailBGet()...headtailBECDPut(E)H×nh M« t¶ c¸ch ho¹t ®éng cña SequenceCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Chó ý:Tr­íc khi lÊy ra mét phÇn tö ph¶i kiÓm tra hµng cã rçng kh«ng,ng­îc l¹i khi thªm vµo mét phÇn tö ph¶i kiÓm tra hµng ®· ®Çy ch­a.IV.3.2 X©y dùng líp hµng ®îi mÉuCòng gièng nh­ ng¨n xÕp, hµng ®îi cã nh÷ng ph­¬ng thøc c¬ b¶n vµmét sè ph­¬ng thøc tiÖn Ých ®Æc biÖt kh¸c, ®­îc thõa kÕ tõ líp chøaSequence.//QUEUEtemplate<class T,int size>class Queue:public Sequence<T,size>{protected:int head;int tail;public:Queue():Sequence<T,size>(){ head=tail=0;}Queue(const Queue<T,size> & que);virtual int Put(const T & item);virtual int Get(T & item);virtual int See(T & item,int i);void operator = (const Queue<T,size> & que);};//---------Ph­¬ng thø thiÕt lËp sao chÐp-------------------------------template<class T,int size>Queue<T,size>::Queue(const Queue<T,size> & que):Sequence<T,size>(que){head=que.head;tail=que.tail;}//----------Ghi mét phÇn tö vµo-----------------------------------------template<class T,int size>int Queue<T,size>::Put(const T & item){if(count==size) return 1;//trµn hµngif(!count){head=tail=0;data[0]=item;}else{tail++;if(tail==size) tail=0;data[tail]=item;}count++;return 0;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8}//---------LÊy mét phÇn tö-----------------------------------------template<class T,int size>int Queue<T,size>::Get(T & item){if(!count) return 1;//hµng rçngitem=data[head];count--;if(count){head++;if(head==size) head=0;}return 0;}//-------Xem mét phÇn tö-----------------------------------------template<class T,int size>int Queue<T,size>::See(T & item,int i){if(i>count || !count) return 1;i--;int ind=i+head;if(ind>=size) ind-=size;item=data[ind];return 0;}//---------To¸n tö g¸n------------------------------------------template<class T,int size>void Queue<T,size>::operator = (const Queue<T,size> & que){head=que.head;tail=que.tail;Copy(que);}IV.4. Hµng quay trßnHµng quay trßn lµ mét cÊu tróc ®Æc biÖt khi mµ ®¹t ®Õn vÞ trÝ cuèicïng th× nã lÆp l¹i ë vÞ trÝ ®Çu tiªn.Hµng quay trßn th­êng ®­îc sö dông trong c¸c hÖ ®iÒu hµnh, trongc¸c ch­¬ng tr×nh øng dông thêi gian thùc.//CIRCLEtemplate<class T,int size>CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8class Circle:public Sequence<T,size>{protected:int current;public:Circle():Sequence<T,size>(){ current=0;}Circle(const Circle<T,size> & cir):Sequence<T,size>(cir){ current=cir.current;}virtual int Put(const T & item);virtual int Get(T & item);virtual int See(T & item,int i);void operator = (const Circle<T,size> & cir);};//---------Ghi mét phÇn tö-----------------------------------------template<class T,int size>int Circle<T,size>::Put(const T & item){if(count==size) return 1;data[count++]=item;return 0;}//-----------LÊy mét phÇn tö---------------------------------------template<class T,int size>int Circle<T,size>::Get(T & item){if(!count) return 1;item=data[current++];if(current==size) current=0;return 0;}//------Xem mét phµn tö----------------------------------------template<class T,int size>int Circle<T,size>::See(T & item,int i){if(!count) return 1;if(i>count) i%=count;if(!i) i=count;item=data[--i];current=i;return 0;}//----------To¸n tö g¸n------------------------------------------template<class T,int size>void Circle<T,size>::operator = (const Circle<T,size> & cir){current=cir.current;Copy(cir);}IV.5. Danh s¸ch liªn kÕtCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Nh­ chóng ta ®· biÕt, m¶ng (sö dông c¸c vïng bé nhí liªn tôc) ®­îcsö dông réng r·i trong nhiÒu øng dông. Tuy nhiªn nã cã h¹n chÕ: kÝchth­íc ph¶i biÕt tr­íc, thêi giandÞch, d÷ liÖu trong m¶ng ®­îc chia víinh÷ng kho¶ng c¸ch nh­ nhau trong bé nhí. §iÒu nµy cã nghÜa lµ viÖc chÌnmét phÇn tö vµo m¶ng th× ph¶i dÞch chuyÓn c¸c phÇn tö kh¸c trong m¶ng,ngoµi ra cßn l·ng phÝ bé nhí khi kh«ng cßn sö dông. Sù giíi h¹n nµy ®­îckh¾c phôc b»ng viÖc sö dông cÊu tróc liªn kÕt. CÊu tróc liªn kÕt lµ mét tËpc¸c nót (node), l­u tr÷ d÷ liÖu vµ c¸c liªn kÕt (links) bëi c¸c nót kh¸c. B»ngc¸ch nµy, c¸c nót cã thÓ ®Æt bÊt kú n¬i nµo trong bé nhí vµ viÖc ®i qua tõnót nµy sang nót kh¸c ®­îcthùc hiÖn b»ng l­u tr÷ c¸c ®Þa chØ cña nót kh¸ctrong danh s¸ch.IV.6. Danh s¸ch liªn kÕt ®¬nDanh s¸ch liªn kÕt ®¬n yªu cÇu mçi nót chøa mét liªn kÕt ®Õn phÇntö kÕ tiÕp trong danh s¸ch. Riªng nót cuèi cïng kh«ng cã phÇn tö ®øng saunªn con trá cña nótnµy chøa gi¸ trÞ ®Æc biÖt ®Ó ®¸nh dÊu kÕt thóc danh s¸chgäi lµ nót rçng (NULL).§Ó truy nhËp ®­îc tÊt c¶ c¸c nót trong danh s¸ch th× cÇn truy nhËpnót ®Çu tiªn.Theo quan niÖm danh s¸ch liªn kÕt ®¬n gièng nh­ h×nh minh ho¹sau:IV.6.1. Thªm mét phÇntö vµo danh s¸chCã hai c¸ch ®Ó x©y dùng mét danh s¸ch liªn kÕt ®¬n:ð¨Mçi phÇn tö míi vµo cuèi danh s¸ch.InforLinkInforLinkInforLinkCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨Thªm phÇn tö míi vµo mét vÞ trÝ ®Æc biÖt trong danh s¸ch.Cã ba tr­êng hîp khi chÌn thªm mét phÇn tö míi vµo mét danh s¸chliªn kÕt ®¬n:ð¨Nót míi trë thµnh phÇn tö ®Çu tiªn míi.ð¨§øng gi÷a hai phÇn tö kh¸c nhau.ð¨Trë thµnh phÇn tö cuèi cïng.Chó ý:ð¨Khi thay ®æi phÇn tö ®Çu tiªn hoÆc cuèi cïng, ta ph¶i thay ®æi ®ÞachØ míi cho c¸c biÕn l­u tr÷ t­¬ng øng.ð¨§Ó dÔ h×nh dung t«i sÏ minh ho¹ b»ng h×nh ¶nh c¸c tr­êng hîpnµy:InfoInfoInfoNew0InfoInfoInfoNew0headheadH×nhNót trë thµnh phÇn tö ®Çu tiªn míiCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.6.2. Xo¸ mét phÇn tö khái danh s¸chT­¬ng tù nh­ thªm mét phÇn tö cã ba tr­êng hîp:ð¨Xo¸ phÇn tö ®Çu tiªn.ð¨Xo¸ phÇn tö gi÷a.ð¨Xo¸ phÇn tö ë cuèi danh s¸ch.InfoInfoInfoNew0InfoInfoInfoNew0headH×nh Nót chÌn gi÷a hai nót kh¸cheadInfoInfoInfoNew0InfoInfoInfoNew0H×nh Nót trë thµnh phÇn tö cuèi cïngheadInfoDelInfoInfoInfoInfo0H×nh Xo¸ phÇn tö ®Çu tiªn0CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.6.3. X©y dùng líp danh s¸ch liªn kÕt ®¬n mÉuNgoµi c¸c ph­¬ng thøc c¬ b¶n nh­ thªm vµ xo¸ phÇn tö nh­ ®· tr×nhbµy ë trªn. Líp danh s¸ch liªn kÕt ®¬n mÉu cßn cã mét sè ph­¬ng thøc vµd÷ liÖu kh¸c ®Ó tiÖn cho viÖc qu¶n lý còng nh­ sö dông. §Æc biÖt lµ ph­¬ngthøc Find() t×m kiÕm vµ Sort() s¾p xÕp, ®©ylµ hai ph­¬ng thøc t×m kiÕm vµs¾p xÕp ®¬n gi¶n, dÔ hiÓu. Nã ho¹t ®éng tèt víi d÷ liÖu c¬ b¶n nh­: int,float, char,... cßn ®èi víi kiÓu d÷ liÖu tù ®Þnh nghÜa nÕu muèn dïng c¸cph­¬ng thøc nµy, ph¶i ®Þnh nghÜa c¸c to¸n tö: <, >, == cho kiÓu d÷ liÖu.VÝ dô:struct String{private:char *txt;public:headInfoInfoDelInfoInfoInfo0H×nh Xo¸ phÇn tö ë gi÷a0headDelInfoInfoInfoInfoInfo0H×nh Xo¸ phÇn tö ë cuèi0CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8operator > (coust String & str);operator < (coust String & str);operator == (coust String & str);};*Líp danh s¸ch liªn kÕt ®¬n mÉu/*SLIST*/enum direct {ASC,DESC};//h­íng s¾p xÕptemplate<classT>class SList{protected:struct Node { //®Þnh nghÜa mét phÇn tö cña danh s¸chT data;Node * next;} * head,* tail,*current;size_t counter;public:SList() {SetNull();}SList(const SList<T> & sli) {SetNull();Copy(sli);}~SList() { Erase();}int operator = (const SList<T> & sli);int Append(const T & item);int Append(const SList<T> & sli);int Insert(const T & item);int Insert(const SList<T> & sli);void Erase();int Delete();int Get(T & item);size_t Count() { return counter;}int Next();void ToHead() { current = head;}int AtTail() { return current==tail;}int Find(const T & item);void Sort(direct dir= ASC);private:void SetNull();int Copy(const SList<T> & sli);};//---------------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8template<class T>inline void SList<T>::SetNull(){head=tail= current=NULL;counter=0;}//---------------------------------------------------template<class T>int SList<T>::Copy(const SList<T> & sli){if(!sli.counter) return 1;Node * tmp=sli.head;do{if(Append(tmp->data)) return 1;tmp=tmp->next;}while(tmp);current = sli->current;return 0;}//-----to¸n tö g¸n--------------------------------------------template<class T>int SList<T>::operator = (const SList<T> & sli){Erase();if(Copy(sli))return 1;return 0;}//------Ph­¬ng thøc xo¸-------------------------------------template<class T>void SList<T>::Erase(){current=head;while(current){head=current->next;delete current;current=head;}SetNull();}//-------Thªm mét phÇn tö-----------------------------------template<class T>int SList<T>::Append(const T & item){Node * tmp=new Node;if(!tmp) return 1;tmp->data=item;tmp->next=NULL;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8if(!tail){head=tail=tmp;current=tmp;}else{tail->next=tmp;tail=tmp;}counter++;return 0;}//---------ghÐp danh s¸ch---------------------------------------template<class T>int SList<T>::Append(const SList<T> & sli){const Node * tmp=sli.head;while(tmp){if(Append(tmp->data)) return 1;tmp=tmp->next;}return 0;}//--------chÌn mét phÇn tö--------------------------------------template<class T>int SList<T>::Insert(const T & item){if(!current) return 2;Node * tmp=new Node;if(!tmp) return 1;tmp->data=item;tmp->next=current->next;current->next=tmp;current=tmp;counter++;return 0;}//-----chÌn mét danh s¸ch----------------------------------------template<class T>int SList<T>::Insert(const SList<T> & sli){if(!current) return 2;Node * tmp;tmp=sli.head;while(tmp){if(Insert(tmp->data)) return 1;tmp=tmp->next;}return 0;}CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8//------Xo¸ mét phÇn tö------------------------------------------template<class T>int SList<T>::Delete(){if(!current) return 2;if(current==head){if(AtTail()){delete current;SetNull();return 0;}else{head=current->next;delete current;current=head;}}else{Node * tmp=head;while(tmp->next != current) tmp=tmp->next;tmp->next=current->next;if(AtTail()) tail=tmp;delete current;current=tmp->next;}counter--;return 0;}//-------LÊy gi¸ trÞ cña phÇn tö hiÖn t¹i------------------------------template<class T>inline int SList<T>::Get(T &item){if(!current) return 1;item =current->data;return 0;}//------chuyÓn ®Õn phÇn tö kÕ tiÕp----------------------------------template<class T>inline int SList<T>::Next(){if(!current) return 2;current=current->next;return 0;}//------Tim kiÕm---------------------------------------------template<class T>int SList<T>::Find(const T & item){Node * tmp=head;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8while(tmp){if(tmp->data==item){current=tmp;return 1;}tmp=tmp->next;}return 0;}//-------S¾p xÕp--------------------------------------------template<class T>void SList<T>::Sort(direct dir=ASC){Node *lap,*tmp;T buf;int exchange=0;ToHead();while(current){lap=current->next;buf=current->data;exchange=0;while(lap){if((buf > lap->data && dir ==ASC) ||(buf < lap->data && dir ==DESC)){buf=lap->data;tmp=lap;exchange=1;}lap=lap->next;}if(exchange){tmp->data=current->data;current->data=buf;}Next();}ToHead();}IV.7. Danh s¸ch liªn kÕt ®«iDanh s¸ch liªn kÕt ®«i chøa d÷ liÖu vµ c¸c liªn kÕt ®Õn phÇn tö kÕtiÕp vµ ®Õn phÇn tö tr­íc nã. ¦u ®iÓm h¬n so víi liªn kÕt ®¬n lµ cã thÓ ®äcc¶ hai chiÒu, ®¬n gi¶n ho¸ viÖc qu¶n lý danh s¸ch lµm cho viÖc chÌn vµ xo¸dÔ h¬n.Info0InfoInfo0CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.7.1. Thªm mét phÇn tö míiCòng gièng nh­ danh s¸ch liªn kÕt ®¬n cã ba c¸ch thªm mét phÇn tömíi:ð¨§Çu danh s¸ch.ð¨Gi÷a danh s¸ch.ð¨Cuèi danh s¸ch.Info0InfoInfo0NewInfo000Info0Info0NewH×nh Thªm vµo gi÷a hai phÇn tö0Info0InfoInfo0NewInfo000Info0Info0New0H×nh Thªm vµo ®Çu danh s¸chCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.7.2. Xo¸ mét phÇn töCã ba tr­êng hîp xo¸ mét phÇn tö khái danh s¸ch liªn kÕt ®«i:ð¨PhÇn tö ®Çu tiªn.ð¨PhÇn tö gi÷a.ð¨PhÇn tö cuèi.Info0InfoInfo0NewInfo000Info0InfoNew0H×nh Thªm vµo cuèi danh s¸chInfo0InfoInfo0DelInfoInfo0H×nh Xo¸ phÇn tö ë ®Çu danh s¸ch0Info0InfoInfo0InfoDelInfo0H×nh Xo¸ phÇn tö ë gi÷a.0CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.7.3. X©y dùng líp danh s¸ch liªn kÕt ®«i mÉuCòng gièng nh­ danh s¸ch liªn kÕt ®¬n hai ph­¬ng thøc Find() vµSort() cÇn ph¶i®­îc ®Þnh nghÜa c¸c phÐp to¸n >, <, == ®èi víi c¸c kiÓu d÷liÖu do ng­êi sö dông ®Þnh nghÜa./*DLIST*/enum direct {ASC,DESC};template <class T>class DList{protected:struct DNode { //®Þnh nghÜa phÇn tö cña danh s¸chT data;DNode * next,* prev;} *head,* tail,* current;size_t counter;public:DList() { SetNull();}DList(const DList<T> & dls) { SetNull(); Copy(dls);}~DList() {Erase();}int operator = (const DList<T> & dls);int Append(const T & item);int Append(const DList<T> & dls);int Insert(const T & item);int Insert(const DList<T> & item);int InsertBefore(const T & item);int InsertBefore(const DList<T> & dls);void Erase();int Delete();int Get(T & item);size_t Count(){ return counter;}int AtHead() ;int AtTail() ;void ToHead(){current=head;}void ToTail { current=tail;}Info0InfoInfo0InfoDelH×nh Xo¸ phÇn tö ë cuèi danh s¸chInfo00CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8int Prev();int Next();int Find(const T & item);void Sort(direct dir=ASC);private:void SetNull();int Copy(const DList<T> & dls);};//-------------------------------------------------------template <class T>void DList<T>::SetNull(){head=tail=current=NULL;counter=0;}//-------------------------------------------------------template <class T>int DList<T>::Copy(const DList<T> & dls){if(!dls.counter)return 1;const DNode *tmp=dls.head;do{if(Append(tmp->data)) return 1;tmp=tmp->next;}while(tmp);current=dls.current;return 0;}//------xo¸ danh s¸ch-------------------------------------------template <class T>void DList<T>::Erase(){ToHead();while(current){head=current->next;delete current;current=head;}SetNull();}//---------To¸n tö g¸n---------------------------------------------template <class T>int DList<T>::operator = (const DList<T> & dls){Erase();return Copy(dls);}//------thªm mét phÇn tö--------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8template <class T>int DList<T>::Append(const T & item){DNode *tmp= new DNode;if(!tmp) return 1;tmp->data=item;tmp->next=NULL;tmp->prev=tail;if(!Count()) head=tail=current=tmp;else {tail->next=tmp;tail=tmp;}counter++;return 0;}//---------GhÐp mét danh s¸ch---------------------------------------------template <class T>int DList<T>::Append(const DList<T> & dls){const DNode *tmp=dls.head;while(tmp){if(Append(tmp->data)) return 1;tmp=tmp->next;}return 0;}//---------chÌn mét phÇn tö---------------------------------------------template <class T>int DList<T>::Insert(const T & item){if(!current)return 2;DNode *tmp=new DNode;if(!tmp)return 1;tmp->data=item;if(current==tail){tmp->next=NULL;tmp->prev=tail;tail->next=tmp;tail=tmp;}else {current->next->prev=tmp;tmp->next=current->next;tmp->prev=current;current->next=tmp;}counter++;return 0;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8}//-------------chÌn mét danh s¸ch-----------------------------------------template <class T>int DList<T>::Insert(const DList<T> & dls){if(!current) return 2;const DNode *tmp=dls.tail;while(tmp){if(Insert(tmp->data)) return 1;tmp=tmp->prev;}return 0;}//------------chÌn tr­íc vµo vÞ trÝ hiÖn t¹i-------------------------------------------template <class T>int DList<T>::InsertBefore(const T & item){if(!current) return 2;DNode * tmp=new DNode;if(!tmp) return 1;tmp->data=item;if(current==head){tmp->next=head;tmp->prev=NULL;head->prev=tmp;head=tmp;}else{current->prev->next=tmp;tmp->prev=current->prev;tmp->next=current;current->prev=tmp;}counter++;return 0;}//----------chÌn tr­íc vÞ trÝ hiÖn t¹i mét danh s¸ch------------------------template <class T>int DList<T>::InsertBefore(const DList<T> & dls){if(!current) return 2;const DNode * tmp= dls.head;while(tmp){if(InsertBefore(tmp->data))return 1;tmp=tmp->next;}return 0;}//--------Xo¸ mét phÇn tö---------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8template <class T>int DList<T>::Delete(){if(!current)return 2;if(current==head){if(!current->next){delete current;SetNull();}else{head=current->next;head->prev=NULL;delete current;current=head;}}else{if(current==tail){if(!current->prev){delete current;SetNull();}else{tail=current->prev;tail->next=NULL;delete current;current=tail;}}else{DNode * tmp=current->next;current->prev->next=current->next;current->next->prev=current->prev;delete current;current=tmp;}}counter--;return0;}//---------lÊy gi¸ trÞ----------------------------------------------template <class T>int DList<T>::Get(T & item){if(!current)return 2;item=current->data;return 0;}CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8//-------------------------------------------------------template <class T>inline int DList<T>::AtHead(){if(current==head) return 1;return 0;}//-------------------------------------------------------template <class T>inline int DList<T>::AtTail(){if(current==tail)return 1;return0;}//-------------------------------------------------------template <class T>inline int DList<T>::Next(){if(!current)return 2;current=current->next;return 0;}//-------------------------------------------------------template <class T>inline int DList<T>::Prev(){if(!current)return 2;current=current->prev;return 0;}//-------------------------------------------------------template <class T>int DList<T>::Find(const T & item){const DNode *tmp= head;while(tmp){if(tmp->data==item)return 1;tmp=tmp->next;}return 0;}//-------------------------------------------------------template <class T>void DList<T>::Sort(direct dir=ASC){T item;DNode *lap,*tmp;ToHead();CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8while(current){// lap=current->next;lap=head;while(lap!=current){if((lap->data>current->data) && (dir==ASC) ||(lap->data<current->data) && (dir==DESC)) break;lap=lap->next;}if(lap!=current){item=current->data;Delete();tmp=current;current=lap;InsertBefore(item);current=tmp;}else Next();}}IV.8. C©y nhÞ ph©nC©y nhÞ ph©n gåm mét tËp h÷u h¹n c¸c nót (hay ®Ønh) vµ mét tËp h÷uh¹n c¸c c¹nh nèi c¸c cÆp nót víi nhau. Mçi nót cña c©y bao gåm th«ng tinvíi mét liªn kÕt ®Õn phÇn tö bªn tr¸i vµ mét liªn kÕt víi phÇn tö bªn ph¶i.ð¨Trong ®ã cã mét nót ®Æc biÖt gäi lµ nót gèc (root) lµ nót kh«ng cãc¹nh nµo h­íng tíi nã.ð¨C¸c nót l¸ (leaf) lµ nh÷ng nót ë ®ã kh«ng cã c¹nh nµo®i ra.inforinforinforinforinforinforLeaf nodeRoot nodeRight subtreeLeft subtreeCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨Nót truy cËp ®Õn nót kh¸c lµ nót bè (parent) vµ nót ®­îc truy cËplµ nót con (child).ð¨Mét c©y nhÞ ph©n ®Çy ®ñ lµ c©y mçi nót ®Òu cã hai con (trõ l¸).ð¨B¶n th©n mét nót vµ con cña nã còng lµ mét c©y gäi lµ c©y con(subtree).ð¨Møc cña nót lµsè cung ®i tõ gèc ®Õn l¸ céng thªm mét. Gèc cñac©y cã sè møc lµ mét.ð¨ChiÒu cao mét c©y lµ s« møc lín nhÊt cña nót cã trªn c©y ®ã.ð¨Sè con cña mét nót cã bèn tr­êng hîp: cã hai con, kh«ng cã connµo (l¸), cã mét con tr¸i vµ mét con ph¶i.IV.8.1. Gi¸ trÞ kho¸C©y nhÞ ph©n cã trËt tù (ordered binary tree) mçi nót ®Òu cã métkho¸ tu©n theo nguyªn t¾c:ð¨C¸c gi¸ trÞ kho¸ kh«ng trïng nhau.ð¨§èi víi mét nót: gi¸ trÞ kho¸ cña nã lín h¬n gi¸ trÞ kho¸ cña c¸cnót con tr¸i cña nã vµ ng­îc l¹i nhá h¬n so víi c¸c nót conph¶icña nã.IV.8.2. T×m kiÕmCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ViÖc t×m kiÕm dùa trªn kho¸ chøa trong c¸c nót:ð¨NÕu kho¸ phï hîp víi kho¸ t×m kiÕm dõng--> ®· t×m thÊy.ð¨NÕu kho¸ nhá h¬n kho¸ cña nót--> t×m nót con tr¸i cña nã.ð¨NÕu kho¸ lín h¬n kho¸ cña nót--> t×m nót con ph¶i cña nã.ð¨Quay l¹i b­íc mét.ViÖc t×m kiÕm b¾t ®Çu tõ gèc vµ lÆp theo qu¸ tr×nh ë trªn cho ®Õn khit×m thÊy hoÆc nót con lµ rçng lµ kh«ng t×m thÊy.IV.8.3. Thªm mét nót míiThªm mét nót míi vµo c©y rçng nã trë thµnh gèc cña c©y. Qu¸ tr×nht×m vÞ trÝ thÝch hîp thªm vµo c©y còng gièng nh­ viÖc t×m kiÕm. NÕu kho¸cña nót míi kh«ng cã trong c©y. ViÖc t×m kiÕm kÕt thóc ë vÞ trÝ rçng(NULL) nµo ®ã. Khi ®ã ta nèi nót míi vµo vÞ trÝ nµy vµ trë thµnh l¸ cña c©y.RNIPMHOJNH×nh T×m N trong c©y nhÞ ph©nCCRCRACRAKCRAKDH×nh minh ho¹ qu¸ tr×nh t¹o mét c©yCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.8.4. Xo¸ mét nótXo¸ mét nót trªn c©y nhÞ ph©n cã ba tr­êng hîp: nót cÇn xo¸ cã haicon, mét con vµ kh«ng cã con nµo. ViÖc xo¸ ph¶i ®¶m b¶o tÊt c¶ c¸c nótvÉn theo quy t¾c cña c©y nhÞ ph©n cã thø tù.EGHDLVMKAWRH×nh xo¸ mét l¸EGDLVMKAWRH×nh xo¸ nót cã mét conDEALVMKWRH×nh xo¸ mét nót cã hai conCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8IV.8.5. C¸c ph­¬ng ph¸p duyÖt c©yCã ba c¸ch duyÖt c©y: trung tè (Inorder), tiÒn tè (Preorder) vµ hËu tè(Postorder).DuyÖt c©y trung tè: duyÖt c©y con tr¸i tr­íc, duyÖt gèc, duyÖt c©ycon ph¶i.DuyÖt c©y tiÒn tè: duyÖt gèc tr­íc, duyÖt c©y con tr¸i, duyÖt c©y conph¶i.DuyÖt c©y hËu tè: duyÖt con tr¸i tr­íc, duyÖt con ph¶i, duyÖtgèc.VÝ dô:DEALVRKWH×nh kÕt qu¶BCAEGFDH×nh minh ho¹CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8DuyÖt trung tè: ABCDEFG.DuyÖt tiÒn tè: DBACFEG.DuyÖt hËu tè: ACBEGFD.IV.8.6. Líp d÷ liÖu mÉuenum TravType{inord,preord,postord};//----------------------------------------template<class K,class D>struct TNode{K key;D data;TNode<K,D> *parent,*lchild,*rchild;TNode(const K & k,const D & d);TNode(const TNode<K,D> & node) {NCopy(node);}void operator = (const TNode<K,D> & node) {NCopy(node);}private:void NCopy(const TNode<K,D> & node);};//-----------------------------------------------template<class K,class D>TNode<K,D>::TNode(const K & k,const D & d){key=k;data=d;parent=lchild=rchild=NULL;}//-----------------------------------------------template<class K,class D>void TNode<K,D>::NCopy(const TNode<K,D> & node){key=node.key;data=node.data;parent=node.parent;lchild=node.lchild;rchild=node.rchild;}CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8//-----------------------------------------------//TREE//-----------------------------------------------template<class K,class D>class BTree{protected:TNode<K,D> *root;int Copy(TNode<K,D>* node);void Erase(TNode<K,D> * node);void (*Travfunc)(const K & key,const D & data);void Inorder(TNode<K,D> * node);void Preorder(TNode<K,D> * node);void Postorder(TNode<K,D> * node);public:BTree() {root=NULL;}BTree(const BTree<K,D> & tree);~BTree() {Erase(root);}int operator =(const BTree<K,D> & tree);int Insert(const K & key,const D & data);int Delete(constK & key);void Traverse(void(*func)(const K & key, const D & data),const TravType &ord=inord);int Change(const K & key,const D & data);int Search(const K & key,D & data);};//---------------------------------------------------------------------template<class K,class D>int BTree<K,D> ::Copy(TNode<K,D> * node){if(node){if(Insert(node->key,node->data))return 1;Copy(node->lchild);Copy(node->rchild);}return 0;}//---------------------------------------------------------------------template<class K,class D>void BTree<K,D>::Erase(TNode<K,D> * node){if(node){Erase(node->lchild);Erase(node->rchild);delete node;}}//---------------------------------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8template<class K,class D>BTree<K,D> ::BTree(const BTree<K,D> & tree){root=NULL;Copy(tree.root);}//---------------------------------------------------------------------template<class K,class D>int BTree<K,D> ::operator=(const BTree<K,D> & tree){Erase(root);root=NULL;if(Copy(tree.root))return 1;return 0;}//---------------------------------------------------------------------template<class K,class D>int BTree<K,D> ::Insert(const K & key,const D & data){TNode<K,D>* newnode= new TNode<K,D>(key,data);if(!newnode) return 1;if(!root) root=newnode;else{TNode<K,D> * node=root;while(1){if(node->key < newnode->key){if(!node->rchild){node->rchild=newnode;newnode->parent=node;return 0;}else node=node->rchild;}else{if(!node->lchild){node->lchild=newnode;newnode->parent=node;return 0;}else node=node->lchild;}}}return 0;}//---------------------------------------------------------------------template<class K,class D>int BTree<K,D>::Search(const K & key,D & data)CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8{TNode<K,D> * node=root;while(node){if(key==node->key){data=node->data;return 0;}if(key>node->key) node=node->rchild;else node=node->lchild;}return 1;}//---------------------------------------------------------------------template<class K,class D>int BTree<K,D> ::Change(const K & key,const D & data){TNode<K,D> * node=root;while(node){if (key==node->key) break;if(key > node->key) node=node->rchild;else node=node->lchild;}if(node) {node->data= data;return 0;}else return 1;}//---------------------------------------------------------------------template<class K,class D>void BTree<K,D> ::Traverse(void (*func)(const K & key,const D & data),constTravType & ord){Travfunc=func;switch(ord){case preord:Preorder(root);break;case postord:Postorder(root);break;default :Inorder(root);break;}}//---------------------------------------------------------------------template<class K,class D>CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8void BTree<K,D> ::Inorder(TNode<K,D> * node){if(node){Inorder(node->lchild);Travfunc(node->key,node->data);Inorder(node->rchild);}}//---------------------------------------------------------------------template<class K,class D>void BTree<K,D> ::Preorder(TNode<K,D> * node){if(node){Travfunc(node->key,node->data);Preorder(node->lchild);Preorder(node->rchild);}}//---------------------------------------------------------------------template<class K,class D>void BTree<K,D> ::Postorder(TNode<K,D> * node){if(node){Postorder(node->lchild);Postorder(node->rchild);Travfunc(node->key,node->data);}}//---------------------------------------------------------------------template<class K,class D>int BTree<K,D>::Delete(const K & key){TNode<K,D> * node=root;while (node){if(key==node->key) break;if(key > node->key) node=node->rchild;else node=node->lchild;}if(!node) return 1;if(!node->rchild){if(!node->lchild){if(node==root) root=NULL;else{if(node->parent->lchild==node) node->parent->lchild=NULL;else node->parent->rchild=NULL;}}else{if(node==root) root=node->lchild;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8elseif(node->parent->lchild==node) node->parent->lchild=node->lchild;else node->parent->rchild=node->lchild;}}else{if(!node->lchild){if(node==root) root=node->rchild;else{if(node->parent->lchild==node)node->parent->lchild=node->rchild;else node->parent->rchild=node->rchild;}}else{TNode<K,D> *temp=node->rchild;while(temp->lchild) temp=temp->lchild;if(temp->parent->lchild==temp) temp->parent->lchild=temp->rchild;else temp->parent->rchild=temp->rchild;node->key=temp->key;node->data=temp->data;if(temp->rchild) temp->rchild->parent=temp->parent;node=temp;}}delete node;return 0;}IV.9. NhËn xÐtPh­¬ng ph¸p biÓu diÔn mãc nèi nãi chung cångkÒnh h¬n ph­¬ngph¸p biÓu diÔn liªn kÕt vµ viÖc truy nhËp tíi c¸c phÇn tö còng chËm h¬n.Ng­îc l¹i, viÖc cËp nhËt kh«ng yªu cÇu c¸c ®éng t¸c sao chÐp nªn Ýt tènkÐm h¬n so víi ph­¬ng ph¸p biÓu diÔn liªn tôc. Ta th­êng chän ph­¬ngph¸p biÓu diÔn mãc nèi khi vÉn ®Ó cËp nhËt trë nªn quan träng h¬n vÊn ®Òtruy nhËp vµ ng­îc l¹i.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8PhÇn BC¸c ch­¬ng tr×nh øng dôngCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8I. Qu¶n lý sinh viªnNh­ ®· biÕt, c«ng viÖc qu¶n lý sinh viªn lµ rÊt quan träng ®èi víi bÊtkú mét nhµ tr­êng nµo. §ã lµc«ng viÖc phøc t¹p, ®ßi hái tÝnh chÝnh x¸c.Tuy nhiªn t«i kh«ng muèn ®i s©u vµo chi tiÕt, ch­¬ng tr×nh t«i x©y dùng chØmang tÝnh m« pháng, nh­ng vÉn mang ®Çy ®ñ nh÷ng chøc n¨ng c¬ b¶n cÇnthiÕt.D÷ liÖu bao gåm: m· sè, hä tªn, ngµy sinh, líp, ®iÓm trung b×nh vµghi chó.Ch­¬ng tr×nh nµy ®­îc x©y dùng trªn hai líp cÊu tróc d÷ liÖu ®· ®­îcthiÕt kÕ ë phÇn tr­íc ®ã lµ: Danh s¸ch liªn kÕt ®«i vµ ng¨n xÕp. Danh s¸chliªn kÕt ®«i dïng ®Ó l­u tr÷ vµ xö lý nh÷ng b¶n ghi, cßn ng¨n xÕp ®Ó l­u tr÷nh÷ng b¶n ghi ®· bÞxo¸ vµ cã thÓ phôc håi khi cÇn thiÕt. Nh­ ®· biÕt ng¨nCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8xÕp ho¹t ®éng theo nguyªn t¾c Vµo sau ra tr­íc  tøc lµ nã sÏ phôc håinh÷ng b¶n ghi tuÇn tù theo thêi gian gÇn nhÊt.Ch­¬ng tr×nh cã mét sè chøc n¨ng chÝnh sau:ð¨Thªm míi mét b¶n ghi, sö dông ph­¬ngthøc thªm danh s¸ch liªn kÕt®«i (Append). ViÖc trïng khãa trong d÷ liÖu kh«ng ®­îc phÐp. V× vËy,tr­íc khi thªm míi ph¶i kiÓm tra ®· cã kho¸ (m· sinh viªn) cã trong d÷liÖu ch­a. NÕu cã ®­a ra th«ng b¸o, ng­îc l¹i b¶n ghi ®­îc cËp nhËttrong danh s¸ch. Chøc nµy sö dông ph­¬ng thøc t×m kiÕm (Find) cñadanh s¸ch liªn kÕt ®«i.ð¨ChÌn mét b¶n ghi sö dông ph­¬ng thøc chÌn (Insert) còng gièng nh­viÖc thªm míi, tr­íc khi chÌn mét b¶n ghi ph¶i kiÓm tra ®· cã kho¸ nµytrong d÷ liÖu ch­a b»ng ph­¬ng thøc t×m kiÕm Find.ð¨ChuyÓn ®Õn b¶n ghi kÕ tiÕp sö dông ph­¬ng thøc di chuyÓn (Next). ViÖcdi chuyÓn sÏ bÞ huû bá nÕu ®ang ë cuèi danh s¸ch. Ph­¬ng thøc AtTailcho biÕt cã ph¶i ®ang ë cuèi danh s¸ch kh«ng.ð¨ChuyÓn ®Õn b¶n ghi tr­íc sö dông ph­¬ng thøc Prev cña danh s¸ch liªnkÕt ®«i. ViÖc di chuyÓn kh«ng ®­îc thùc hiÖn nÕu ®ang ë ®Çu danh s¸ch.Ph­¬ng thøc AtHead cho biÕt cã ph¶i ®ang ë ®Çu danh s¸ch kh«ng.ð¨Trë vÒ b¶n ghi ®Çu tiªn sö dông ph­¬ng thøc Tohead.ð¨Trë vÒ b¶n ghi cuèi sö dông ph­¬ng thøc ToTail.ð¨Xo¸ b¶n ghi hiÖn t¹isö dông ph­¬ng thøc Delete. Ngoµi ra b¶n ghi bÞxo¸ ®­îc l­u tr÷ vµo ng¨n xÕp b»ng ph­¬ng thøc ®­a vµo (Put). Giíi h¹ncña ng¨n xÕp b»ng 50. NÕu trµn ng¨n xÕp ®­îc tù ®éng lµm rçng b»ngph­¬ng thøc Flush.ð¨Xo¸ hÕt danh s¸ch sö dông ph­¬ng thøc Erase. C¸cb¶n ghi bÞ xo¸ l­utr÷ vµo ng¨n xÕp.ð¨S¾p xÕp danh s¸ch t¨ng hoÆc gi¶m theo tªn sinh viªn sö dông ph­¬ngthøc Sort.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ð¨T×m kiÕm mét b¶n ghi theo m· hoÆc theo tªn sinh viªn. ViÖc t×m kiÕmtheo hä tªn cã thÓ sö dông *  ®Ó thay cho c¸c ký tù bÊt kú. ViÖc t×mkiÕm ®­îc sö dông ph­¬ng thøc Find.ð¨Phôc håi c¸c b¶n ghi ®· bÞ xo¸ sö dông ph­¬ng thøc lÊy d÷ liÖu cñang¨n xÕp (Get). ViÖc lÊy d÷ liÖu ra ®­îc thùc hiÖn khi ng¨n xÕp kh«ngrçng, tøc ph­¬ng thøc GetCount kh¸c kh«ng.Ngoµi ra cßn cã mét sè chøc n¨ng kh¸c nh­: më tÖp, ghi vµo tÖp, trîgióp, th«ng b¸o, sö dông chuét,...M· nguån cña ch­¬ng tr×nh cã trong ®Üa mÒm kÌm theo bµi luËn v¨nnµy.Sau ®©y lµ mét sè hµm chÝnh:void Menu();void Show();void Hide();void Info();int AddNew();void Key();void File();void Open(int name=0);void SaveAs();void Save();void Find();void SortAsc();void SortDesc();int Exit();void Begin();void Next();void Prev();void End();void New();void Ins();void Del();void Erase();void Fresh();void Act();void Total();int View();char * Table( const SV & view );char * Vert(char *txt,int len);void InitMouse();void ShowMouse();void HideMouse();void SetMousePos(int x,int y);void MouseSpeed(int sp);void GetPos(int & x,int & y);CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8int Click(int & x,int & y);int Process(char ch);char Select(int & x,int & y);void Store(SV & sta);void Restore();void Help();DList<SV> list;SV tmp;const int STK_LEN = 50;Stack<SV,50> stack;char filename[50];FILE *f;//---------------------------------------------------void main(){Menu();InitMouse();ShowMouse();// HideMouse();char ch;int flag=1;int x,y;while(flag){if(kbhit()){ch=getch();ch=toupper(ch);if(Process(ch)) flag=0;//ket thuc chuong trinh}if(Click(x,y)==1){ch=Select(x,y);if(Process(ch)) flag=0;}}}//---------------------------------------------------int Process(char ch) //tra lai 1 khi EXIT{int flag=0;ch=toupper(ch);switch(ch){case 'V':ch=View();case 'B':Begin();break;case 'N':Next();break;case 'P':Prev();break;case 'E':End();break;case 'W':New();break;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8case 'I':Ins();break;case 'D':Del();break;case 'L':Erase();break;case 'R':Restore();break;case'O':File();break;case 'S':Save();break;case 'A':SaveAs();break;case 'F':Find();break;case '0':SortAsc();break;case '1':SortDesc();break;case 'H':Help();break;case 'X':if(Exit()) flag=1;break;}return flag;}void Store(SV & sta){if(stack.GetCount()==STK_LEN) stack.Flush();if(strlen(sta.ma)) stack.Put(sta);}//---------------------------------------------------void Restore(){SV sv;char txt[100];if( !stack.GetCount())msg="Khong con ban ghi nao de phuc hoi...";if(stack.Get(sv))return;Input ques(10,10,"Ban co muon hoi phuc(C\\K) ");strcat(ques.disp,sv.hoten);strcat(ques.disp,"(ma so: ");strcat(ques.disp,sv.ma);strcat(ques.disp,")");char *str=ques.Text(1);if(str[0]=='c' || str[0]=='C'){list.Append(sv);list.ToTail();}else stack.Put(sv);ques.Hide();Act();}//---------------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8void Key(){char *txt;Display guide(10,2,"Chon cach tim kiem",LIGHTGREEN);Display guid1(10,3,"1: Theo ma hoc sinh",YELLOW);Display guid2(10,4,"2: Theo ten hoc sinh",YELLOW);guide.Show();guid1.Show();guid2.Show();Display choice(10,6,"Chon : ",MAGENTA);choice.Show();char ch='0';int mx,my;while(ch=='0'){if(kbhit()){ch=getch();ch=toupper(ch);}if(Click(mx,my)){my-=2;if((my==3)&&(mx>10)&&(mx<10+strlen("1: Theo ma hoc sinh")))ch='1';if((my==4)&&(mx>10)&&(mx<10+strlen("1: Theo ten hoc sinh")))ch='2';}}txt[0]=ch;txt[1]='\0';strcat(choice.disp,txt);choice.Show();Input input(10,9,"La : ",LIGHTCYAN);if(ch=='1'){txt=input.Text();strcpy(tmp.ma,txt);}if(ch=='2'){Display guid3(10,8,"Co the dung '*'cho ki tu bat ky",CYAN);guid3.Show();txt=input.Text();strset(tmp.ma,NULL);strcpy(tmp.hoten,txt);}clrscr();}//---------------------------------------------------void Find(){clrscr();Hide();Key();if(!strlen(tmp.ma) && !strlen(tmp.hoten)){Act();return;}if(list.Find(tmp)){CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Act();return;}else{msg=" Khong tim thay !";list.ToHead();Act();}}//---------------------------------------------------void SortAsc(){if(!list.Count())return;Hide();clrscr();list.Sort();list.ToHead();Act();}//---------------------------------------------------void SortDesc(){if(!list.Count()) return;list.Sort(DESC);Hide();clrscr();list.ToHead();Act();}//---------------------------------------------------void Begin(){Hide();list.ToHead();Act();}//---------------------------------------------------void Next(){// Hide();if(list.AtTail()){msg="Da den cuoi danh sach! ";Show();return;}list.Next();Act();}//---------------------------------------------------void Prev(){Hide();if(list.AtHead()){msg="Da den dau danh sach! ";Show();CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8return;}list.Prev();Act();}//---------------------------------------------------void End(){Hide();list.ToTail();Act();}//---------------------------------------------------int AddNew(){char * txt;//[100];txt=nhapma.Text();if(!txt) return 1;strncpy(tmp.ma,txt,MA_LEN-1);if(list.Find(tmp)){msg="Da co ma hoc sinh nay trong du lieu! ";return 1;}txt=nhapten.Text();strncpy(tmp.hoten,txt,TEN_LEN-1);txt=nhaplop.Text();strncpy(tmp.lop,txt,LOP_LEN-1);txt=nhapdiem.Text();strncpy(tmp.dtb,txt,DTB_LEN-1);txt=nhapngay.Text();strncpy(tmp.ngaysinh,txt,NGAY_LEN-1);txt=nhapchu.Text();strncpy(tmp.ghichu,txt,GHI_LEN-1);return 0;}//---------------------------------------------------void New(){Hide();if(AddNew()){clrscr();Act();return;}if(!strlen(tmp.ma)){Act();return;}list.Append(tmp);list.ToTail();Act();Total();}//---------------------------------------------------CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8void Ins(){Hide();if(AddNew()){clrscr();Act();return;}if(!strlen(tmp.ma)){Act();return;}list.Insert(tmp);Act();Total();}//---------------------------------------------------void Del(){Hide();char ques[100];strcpy(ques,"Ban co muon xoa(C\K) :");strcat(ques,tmp.hoten);strcat(ques,"( ");strcat(ques,tmp.ma);strcat(ques," )");Input input(10,10,ques);char *txt=input.Text(1);if(txt[0]=='c' || txt[0]=='C'){Store(tmp);list.Delete();}clrscr();Act();// Total();}//---------------------------------------------------void Erase(){Hide();Input flu(10,10,"Ban muon xoa het?(C/K) ",RED);char *txt=flu.Text(1);strcat(flu.disp,txt);flu.Hide();strcpy(flu.disp,flu.caption);if(*txt=='c' || *txt=='C'){list.ToHead();while(!list.Get(tmp)){stack.Put(tmp);list.Next();}list.Erase();CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8tongso="0";Fresh();Show();Total();}}//---------------------------------------------------II. Thèng kª tõ tiÕng ViÖtTrong c¸c nghµnh khoa häc, kinh tÕ, còng nh­ ®èi víi tin häc. Thèngkª lµ mét c«ng viÖc v« cïng quan träng, viÖc thèng kª cã bao nhiªu tõ tiÕngViÖt còng nh­ sè lÇn xuÊt hiÖn cña nã kh«ng chØ cã Ých cho c¸c nhµ ng«nng÷ häc, mµ cßn gióp cho nh÷ng ng­êi lµm tin häc cã ®­îc c¸ch m· ho¸ tèi­u vµ phï hîp nhÊt.Trong ch­¬ng tr×nh. T«i dùa vµo tÝnh ®¬n ©m tiÕt cöa tiÕng ViÖt ®Ó lo¹ibá nh÷ng tõ kh«ng phï hîp. Sau khi thèng kª cã thÓ t×m kiÕm vµ lo¹i bá nètnh÷ng tõ kh«ng ph¶i lµ tiÕng ViÖt. KÕt qu¶ ®­îc l­u vµo ®Üa theo thø tùb¶ng ch÷ c¸i hoÆctheo sè lÇn xuÊt hiÖn.Ch­¬ng tr×nh ®­îc x©y dùng dùa trªn c¸c líp d÷ liÖu mÉu: c©y nhÞph©n vµ danh s¸ch liªn kÕt ®¬n.C©y nhÞ ph©n lµ cÊu tróc d÷ liÖu cã tèc ®é t×m kiÕm nhanh nhÊt, rÊtthÝch hîp ®Ó l­u tr÷ mét l­îng d÷ liÖu lín. Danh s¸ch liªn kÕt ®¬n®­îc södông ®Ó s¾p xÕp c¸c tõ theo thø tù gi¶m dÇn. KÕt qu¶ thèng kª ®­îc l­u vµotÖp ®Ó nghiªn cøu.ThuËt to¸n, khi ph©n t¸ch mét tõ vµ ph©n tÝch tõ ®ã tho¶ m·n lµ tõtiÕng ViÖt tõ ®ã sÏ tiÕp tôc ®­îc xö lý nh­ sau: KiÓm tra trong c©y nhÞ ph©n®· cã tõnµy ch­a b»ng ph­¬ng thøc Search. NÕu cã sÏ t¨ng sè lÇn xuÊt hiÖncña tõ nµy lªn mét b»ng ph­¬ng thøc Change, ng­îc l¹i nÕu ch­a cã th×thªm tõ nµy vµo c©y nhÞ ph©n vµ g¸n sè lÇn xuÊt hiÖn cña tõ nµy b»ng métb»ng ph­¬ng thøc Append. Sau khi thèng kª cãthÓ xem kÕt qu¶ vµ nh÷ngtõ nµo kh«ng phï hîp cã thÓ xo¸ b¨ng c¸c ph­¬ng thøc duyÖt c©y nhÞ ph©nvµ ph­¬ng thøc Delete.ViÖc ghi kÕt qu¶ vµo tÖp theo hai c¸ch. C¸ch thønhÊt ghi sè tõ xuÊt hiÖn theo thø tù ch÷ c¸i b»ng ph­¬ng thøc duyÖt trungthø tù. C¸ch thø hai g¸n kÕt qu¶ vµo mét danh s¸ch liªn kÕt ®¬n, sau ®ã s¾pCÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8xÕp theo thø tù gi¶m dÇn theo sè lÇn xuÊt hiÖn b»ng ph­¬ng thøc Sort vµ l­uvµo tÖp.Ngoµi ra cßn cã mét sè chøc n¨ng kh¸c nh­: më tÖp, ghi vµo tÖp, trîgióp, th«ng b¸o, sö dông chuét,...M· nguån cña ch­¬ng tr×nh cã trong ®Üa mÒm kÌm theo bµi luËn v¨nnµySau ®©y lµ mét sè hµm quan träng cña ch­¬ng tr×nh nµy://------------------------------------------------------void Menu();void Open(int name=0);void Save();void TravAlpha(const String & txt,const size_t & num);void SaveFre(const String & txt,const size_t & num);void SaveFre();void TravFre(const String & txt,const size_t & num);void Find();void Del();void View();void TravView(const String & txt,const size_t & num);int Exit();void InitMouse();void ShowMouse();void HideMouse();void SetMousePos(int x,int y);void MouseSpeed(int sp);void GetPos(int & x,int & y);int Click(int & x,int & y);int Process(char ch);char Select(int & x,int & y);void Help();void File();BTree<String,size_t> tree;SList<Freq> list;char filename[100];//------------------------------------------void main(){Menu();InitMouse();ShowMouse();// HideMouse();char ch;int flag=1;int x,y;while(flag){if(kbhit()){CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8ch=getch();ch=toupper(ch);if(Process(ch)) flag=0;//ket thuc chuong trinh}if(Click(x,y)==1){ch=Select(x,y);if(Process(ch)) flag=0;}}}//---------------------------------------------------int Process(char ch){ch=toupper(ch);switch(ch){case 'O': File();clrscr();break;case 'S': Save();clrscr();break;case 'V': View();clrscr();break;case 'F': Find();clrscr();break;case 'D': Del(); clrscr();break;case 'H': Help();break;case 'E':if(Exit()) return 1;}return 0;}//---------------------------------------------------void Open(int name){clrscr();Input esc(3,5,"Ban muon dung chuong trinh ?(C/K) ",YELLOW);Display title(10,4,"Thong ke tu",LIGHTGREEN);title.Show();ActDisp dict(10,7,"Tu dien : ");ActDisp cou(10,8,"So tu da xu ly: ");ActDisp comp(10,9,"Hoan thanh : ");if(!name){Input path(10,4," Ten tep:",YELLOW);char *txt=path.Text();strcat(path.disp,txt);strcpy(filename,txt);}FILE *f,*ftmp;ftmp=fopen("temp.dat","wb");if((f=fopen(filename,"rb"))==NULL){Msg msg(10,7,"");msg="Khong mo duoc tep !";clrscr();return;}Display guide(10,14,"An ESC de thoat",YELLOW);CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8guide.Show();const size_t MAXLEN=9;const size_t MAXBUF=3000;String tmp(MAXLEN);char buf [ MAXBUF ];size_t pos,numread,count;int flag=0,l=0;unsigned long sum=0;//,amount=0;char *p;fseek(f,sizeof(char),SEEK_END);unsigned long filesize;filesize = ftell(f);rewind(f);while (!feof(f)){flag=1;pos=0;numread=fread(buf,sizeof(char),MAXBUF,f);while(pos<numread){p=(char *)tmp;l=0;count=0;if(buf[pos]==10){pos++;continue;}while(IsChar(buf[pos]) && pos<numread){if(l<MAXLEN-2) *(p+l)=buf[pos];l++;pos++;}*(p+l)=NULL;p=tmp;Lower(p);if(l && l<MAXLEN-1 && IsVNWord(tmp)){if(!tree.Search(tmp,count))tree.Change(tmp,++count);else{tree.Insert(tmp,1);String test;//err la bien kiem traif(test.Err()){Msg over(5,10,"",LIGHTRED);over="Tran bo nho";fseek(f,filesize, SEEK_SET);break;}}fwrite(tmp,sizeof(char),l,ftmp);fputc(' ',ftmp);CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8sum++;flag=1;}elseif(flag){fputc(10,ftmp);flag=0;}pos++;cou=sum;comp = ftell(f)*100/filesize;dict=tree.Count();char ch;ch='\0';if(kbhit()){ch=getch();if(ch==27) ch='C';}int x,y;if(Click( x,y)){// Display guide(10,14,"An ESC de thoat",YELLOW);y-=2;if((y==14) && ((x>10) &&(x< 10+strlen("An ESC de thoat"))))ch='C';}if(ch=='C') {char * choice=esc.Text(1);if(choice[0]=='C'||choice[0]=='c'){fseek(f,filesize, SEEK_SET);esc.Hide();break;}esc.Hide();}}}fclose(f);fclose(ftmp);Msg suc(10,20,"",YELLOW);suc= " Da hoan thanh ";}//--------------------------------------FILE *f;//--------------------------------------void Save(){Input path(10,5,"Ghi vao tep: ");char *txt=path.Text();if((f=fopen(txt,"wb"))==NULL){Msg msg(10,7,"");msg="Khong mo duoc tep! ";return;CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8}Display guide(10,2,"Chon mot trong hai cachghi sau:",LIGHTGREEN);Display guid1(10,3,"1: Ghi theo thu tu chu cai",YELLOW);Display guid2(10,4,"2: Ghi theo so lan xuat hien",YELLOW);Display esc(3,2," An ESC de thoat",YELLOW);esc.Show();clrscr();guide.Show();guid1.Show();guid2.Show();Display choice(10,6,"Chon : ",MAGENTA);choice.Show();char ch='0';int mx,my;while(ch=='0'){if(kbhit()){ch=getch();ch=toupper(ch);}if(Click(mx,my)){my-=2;if((my==3)&&(mx>10)&&(mx<10+strlen("1: Ghi theothu tu chucai"))) ch='1';if((my==4)&&(mx>10)&&(mx<10+strlen("2: Ghi theo so lan xuathien"))) ch='2';if((my==2)&&(mx>3)&&(mx<10+strlen("an ESC de thoat"))) ch='2';}}txt[0]=ch;txt[1]='\0';strcat(choice.disp,txt);choice.Show();Input input(10,9,"La : ",LIGHTCYAN);if(txt[0]=='1') tree.Traverse(TravAlpha);if(txt[0]=='2') SaveFre();Msg succ(10,20,"",YELLOW);succ="Da hoan thanh";fclose(f);list.Erase();}//----------------------------------------------------int overflow;void SaveFre(){Freq tmp;char str[10];overflow=0;tree.Traverse(TravFre);ActDisp warning(10,14,"",YELLOW);ActDisp over(10,15,"Trao bo nho",YELLOW);if(list.Count() !=tree.Count()){int num=tree.Count()-list.Count();if(overflow) over.Show();warning.CharNum("Du lieu co the bi mat khoang: ",num);}list.Sort(ASC);CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8list.ToHead();if(!list.Count()) return ;while(1){if(list.Get(tmp))break;fputs(tmp.txt,f);ltoa(tmp.count,str,10);fputs(" ",f);fputs(str,f);fputc(10,f);}}//----------------------------------------------------void TravFre(const String & str,const size_t & num){Freq fre(str,num);if(!fre.Err())return;fre.txt=str;fre.count=num;list.Append(fre);}//----------------------------------------------------void TravAlpha(const String & str,const size_t & num){static char tmp[10];long l=long(num);ltoa(l,tmp,10);fputs(str,f);fputs(" ",f);fputs(tmp,f);fputc(10,f);}//----------------------------------------------------void Del(){clrscr();Msg msg(10,7,"",LIGHTCYAN);Input input(10,5,"Nhap tu can xoa: ");String str;str=input.Text();// strcat(input.disp,str);if( !tree.Delete(str)) msg="Da xoa...";else msg="Khong xoa duoc";}//--------------------------------------void Find(){clrscr();Input input(10,5,"Tim tu: ");ActDisp act(10,7,"So lan xuat hien: ");Msg msg(10,8,"",MAGENTA);char * txt=input.Text();size_t num;String str;str=txt;if(tree.Search(str,num)) msg="Khong tim thay";else{CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8act=num;msg=" ";}}//--------------------------------------KÕt luËnCïng víi sù ph¸t triÓn m¹nh mÏ cña c«ng nghÖ th«ng tin, th× cÊu tróc d÷liÖu nh­ lµnÒn t¶ng cña sù ph¸t triÓn nµy. Víi sù ­u viÖt cña ph­¬ng ph¸plËp tr×nh h­íng ®èi t­îng lµ tÝnh kÕ thõa vµ sù linh ®éng ®èi víi c¸c kiÓu d÷liÖu kh¸c nhau cña c¸c líp mÉu. C¸c líp cÊu tróc d÷ liÖu mÉu cña C++rÊtphï hîp ®Ó x©y dùng c¸c ch­¬ng tr×nh lín vµ ®a d¹ng.C¸c líp cÊu tróc d÷ liÖu mÉu: ng¨n xÕp, hµng ®îi, hµng quay trßn, danhs¸ch liªn kÕt ®¬n, liªn kÕt ®«i vµ c©y nhÞ ph©n mµ t«i ®· x©y dùng ë trªn.T«i hy väng c¸c líp cÊu tróc d÷ liÖu mÉu nµy ®­îc sö dông hoÆc cã Ých chonh÷ng ng­êi lËp tr×nh. Tuy r»ng ®· cè g¾ng x©y dùng x©y dùng c¸c líp métc¸ch tæng qu¸t vµ chi tiÕt nhÊt nh­ng do thêi gian vµ kh¶ n¨ng cßn h¹n chÕnªn kh«ng tr¸nh khái nh÷ng thiÕu sãt. Ngoµi c¸c kiÓu cÊu tróc ®· tr×nh bµycßn cã mét sè kiÓu cÊu tróc d÷ liÖu kh¸c: b¶ng b¨m, c©y nph©n, ... mµtrong khu«n khæ cña mét bµi luËn v¨n tèt nghiÖp t«i kh«ng cã ®iÒu kiÖn ®Ótr×nh bµy. T«i sÏ cè g¾ng hoµn thiÖn vµ nghiªn cøu ®Ó lµm giµu thªm kiÕnthøc cña m×nh. Vµ t«i hy väng trong t­¬ng lai cã thÓ x©y dùng ®­îc c¸cch­¬ng tr×nh cã gi¸ trÞ sö dông thùc tÕ, gãp phÇn thóc ®Èy sù ph¸t triÓn nÒnc«ng nghÖ th«ng tin n­íc ta.CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8Tµi liÖu tham kh¶o[1]J.COURTIN & I.KOWARSKINhËp m«n thuËt to¸n vµ cÊu tróc d÷ liÖu(TËp II), ViÖn tin häc Khoa häc ViÖt Nam 1993[2]LARRY NYHOFF & SANFORD LEEDSTMA-LËp tr×nh n©ng cao b»ngPASCAL víi c¸c cÊu tróc d÷ liÖu (TËp II), NXB §µ N½ng 1998[3]TrÇn V¨n L¨ng-LËp tr×nh h­íng ®èi t­îngC++ , NXB thèng kª[4]nguyÔn cÈn-CTham kh¶o toµn toµn diÖn, NXB §ång Nai 1996[5]ng« trung viÖt-Ng«n ng÷ lËp tr×nh C & C++, nhµ xuÊt b¶n Giaoth«ng vËn t¶i 1996[6]scoot robert ladd-C++ Components And Algosithms. M&TBooks 1994[7]scoot robert ladd-C++ Template And Tools. M&T Books 1995CÊu tróc d÷ liÖu mÉu víi C++more information and additional documentsconnect with me here:http://facebook.com/ngphutien/fileÓ án kèm theo:Cau truc du lieu voi C++.rar259 KBhttps://mega.co.nz/#!FgU3nAKa!-VgkoAGeGZtP3Q2LwN2LKMQXE4Uj67Q4nbAJrT4aGB8

- Xem thêm -

Tài liệu liên quan

Bình luận