UỶ BAN NHÂN DÂN THÀNH PHà â CHÍ MINH TR¯àNG CAO ĐÀNG BÁCH KHOA NAM SÀI GÒN GIÁO TRÌNH MÔN HàC/MÔ ĐUN: CÂU TRÚC Dþ LIàU NGÀNH/NGHÀ: TIN HàC ĀNG DĀNG TRÌNH Đà : CAO ĐÀNG Ban hành kèm theo Quyết định số: 459/QĐ-NSG, ngày 31 tháng 08 năm 2022 của Hiệu trưởng Trường Cao Đẳng Bách Khoa Nam Sài Gòn Tp.Hã Chí Minh, năm 2022 TUYÊN Bà BÀN QUYÀN Tài liáu này thuộc lo¿i sách giáo trình nên các nguãn thông tin có thể đ°ợc phép dùng nguyên bÁn quyÃn hoặc trích dùng cho các mục đích và đào t¿o và tham khÁo. Mọi mục đích khác mang tính lách l¿c hoặc sÿ dụng vßi mục đích kinh doanh thiÁu lành m¿nh s¿ bị nghiêm cÃm. LÞI NÓI ĐÄU Để đáp āng nhu cầu học t¿p cÿa các b¿n sinh viên, nhÃt là sinh viên chuyên ngành tin học, Khoa Công Nghá Thông Tin Tr°áng CAO ĐÀNG BÁCH KHOA NAM SÀI GÒN chúng tôi đã tiÁn hành biên so¿n các giáo trình, bài giÁng chính trong ch°¡ng trình học. Giáo trình này cũng đ°ợc biên so¿n dựa trên kinh nghiám giÁng d¿y nhiÃu năm môn CÃu Trúc Dā Liáu và GiÁi Thu¿t.
Tài liáu này đ°ợc so¿n theo đà c°¡ng chi tiÁt môn CÃu Trúc Dā Liáu cÿa sinh viên chuyên ngành tin học cÿa Khoa Công Nghá Thông Tin. Mục tiêu giúp các b¿n sinh viên chuyên ngành có một tài liáu cô đọng dùng làm tài liáu học t¿p, nh°ng chúng tôi cũng không lo¿i trừ toàn bộ các đái t°ợng khác tham khÁo. Mặc dù đã rÃt cá gÁng nhiÃu trong quá trình biên so¿n giáo trình nh°ng chÁc chÁn giáo trình s¿ còn nhiÃu thiÁu sót và h¿n chÁ. RÃt mong nh¿n đ°ợc sự đóng góp ý kiÁn quý báu cÿa sinh viên và các b¿n đọc để giáo trình ngày một hoàn thián h¡n.
Bá cục cuán sách gãm các bài nh° sau Ch°¡ng 1: TäNG QUAN V CÂU TRÚC DĀ LIàU VÀ THU¾T GIÀI Ch°¡ng 2: Kþ THU¾T TÌM KIÀM Ch°¡ng 3: Kþ THU¾T SÀP XÀP (SORTING) Ch°¡ng 4: DANH SÁCH Trong quá trình giÁng d¿y và biên so¿n giáo trình này, chúng tôi đã nh¿n đ°ợc sự động viên cÿa các thầy trong Ban Giám Hiáu nhà tr°áng cũng nh° nhāng ý kiÁn cÿa các đãng nghiáp trong khoa Công Nghá thông Tin. Chúng tôi xin chân thành cÁm ¡n và hy vọng r¿ng giáo trình này s¿ giúp cho viác d¿y và học môn c¡ sở dā liáu cÿa tr°áng chúng ta ngày càng tát h¡n. Xin chân thành cÁm ¡n Ban Giám hiáu Tr°áng Cao ĐÁng Bách Khoa Nam Sài Gòn, Hội đãng khoa học tr°áng, tác giÁ cÿa nhāng tài liáu tham khÁo, các đãng nghiáp, các b¿n sinh viên đã giúp đỡ và đóng góp rÃt nhiÃu ý kiÁn bå ích để nhóm tác giÁ hoàn thành cuán sách này và xin trân trọng gißi thiáu vßi quý b¿n đọc. Mọi góp ý xin gÿi và địa chỉ: xuanhuong2561@gmail.Hã Chí Minh, ngày 31 tháng 08 năm 2022 Tham gia biên so¿n 1.
Chÿ biên: Đào Thị Xuân H°áng 2. MĀC LĀC Contents Ch°¡ng 1. Tầm quan trọng cÿa CTDL và thu¿t giÁi trong một đà án tin học. Tầm quan trọng cÿa cÃu trúc dā liáu và giÁi thu¿t trong một đà án tin học.
Xây dựng cÃu trúc dā liáu. Xây dựng giÁi thu¿t. Mái quan há giāa cÃu trúc dā liáu và giÁi thu¿t. Đánh giá cÃu trúc dā liáu và giÁi thu¿t.
Các tiêu chuẩn đánh giá cÃu trúc dā liáu. Đánh giá độ phāc t¿p cÿa thu¿t toán. Khái niám và kiểu dā liáu. Các kiểu dā liáu c¡ sở.
Kiểu dā liáu con trß. Kiểu dā liáu t¿p tin. Khái quát và tìm kiÁm. Các giÁi thu¿t tìm kiÁm nội (Tìm kiÁm trên dãy/mÁng).
Các giÁi thu¿t tìm kiÁm ngo¿i (Tìm kiÁm trên t¿p tin). Tìm kiÁm theo chỉ mục (Index Search). Kþ THU¾T SÀP XÀP (SORTING). SÁp xÁp b¿ng ph°¡ng pháp đåi chỗ (Exchange Sort).
SÁp xÁp b¿ng ph°¡ng php chọn (Selection Sort). SÁp xÁp b¿ng ph°¡ng pháp chèn (Insertion Sort). Các giÁi thu¿t sÁp xÁp ngo¿i (SÁp xÁp trên t¿p tin). SÁp xÁp b¿ng ph°¡ng pháp trộn (Merge Sort).
SÁp xÁp theo chỉ mục (Index Sort). Khái niám và danh sách. Các phép toán trên danh sách. Danh sách đặc (Condensed List).
Biểu dißn danh sách đặc. Các thao tác trên danh sách đặc. ¯u nh°ợc điểm và Āng dụng. Danh sách liên kÁt (Linked List).
Danh sách liên kÁt đ¡n (Singly Linked List). Danh sách liên kÁt kép (Doubly Linked List). ¯u nh°ợc điểm cÿa danh sách liên kÁt. Danh sách h¿n chÁ.
Āng dụng cÿa danh sách h¿n chÁ. 157 GIÁO TRÌNH MÔN CÂU TRÚC Dþ LIàU Tên môn hác: CÃu Trúc Dÿ Liáu và GiÁi thu¿t Mã sá môn hác: MH11 Thßi gian thực hián môn hác: 30 giá, (Lý thuyÁt: 29 giá; Thực hành, thí nghiám, thÁo lu¿n, bài t¿p: 0 giá; Kiểm tra: 1 giá) I. Vß trí, tính chÃt cÿa môn hác: - Vị trí: Môn học này thuộc khái kiÁn thāc c¡ sở trong ch°¡ng trình đào t¿o b¿c cao đÁng ngành Tin học āng dụng. - Tính chÃt: Môn học này gißi thiáu các thu¿t toán và cÃu trúc dā liáu c¡ bÁn.
Môn học chú trọng cụ thể vào các thu¿t toán tìm kiÁm, sÁp xÁp, xÿ lý xâu ký tự và các cÃu trúc dā liáu t°¡ng āng. Môn học t¿p trung vào viác cài đặt, hiểu các đặc điểm và hiáu năng thu¿t toán, và °ßc tính hiáu năng cÿa thu¿t toán trong các āng dụng. Māc tiêu môn hác: Sau khi học xong môn học này, ng°ái học có thể đ¿t chuẩn kÿ năng, cụ thể: 1. VÁ ki¿n thāc: - Nh¿n dián đ°ợc l¿p trình h°ßng đái t°ợng sÿ dụng các tính năng cÿa ngôn ngā l¿p trình; - Trình bày đ°ợc cách sÿ dụng các cÃu trúc dā liáu c¡ bÁn; - Trình bày đ°ợc một sá giÁi thu¿t sÁp xÁp.
VÁ kÿ năng: - V¿n dụng l¿p trình h°ßng đái t°ợng trong viác l¿p trình; - ViÁt đ°ợc các cÃu trúc dā liáu c¡ bÁn; - ViÁt đ°ợc một sá giÁi thu¿t sÁp xÁp. VÁ năng lực tự chÿ và trách nhiám: - Rèn luyán lòng yêu nghÃ, t° thÁ tác phong công nghiáp, tính kiên trì, sáng t¿o trong công viác. Khoa Công Nghệ Thông Tin – Trường Cao Đẳng Bách Khoa Nam Sài Gòn Ch°¡ng 1. TÅm quan tráng cÿa CTDL và thu¿t giÁi trong mát đÁ án tin hác 1.
Tầm quan trọng cÿa cÃu trúc dā liáu và giÁi thu¿t trong một đà án tin học 1. Xây dựng cÃu trúc dā liáu Coù theå noùi raèng khoâng coù moät chöông trình maùy tính naøo maø khoâng coù döõ lieäu ñeå xöû lyù. Döõ lieäu coù theå laø döõ lieäu ñöa vaøo (input data), döõ lieäu trung gian hoaëc döõ lieäu ñöa ra (output data). Do vaäy, vieäc toå chöùc ñeå löu tröõ döõ lieäu phuïc vuï cho chöông trình coù yù nghóa raát quan troïng trong toaøn boä heä thoáng chöông trình.
Vieäc xaây döïng caáu truùc döõ lieäu quyeát ñònh raát lôùn ñeán chaát löôïng cuõng nhö coâng söùc cuûa ngöôøi laäp trình trong vieäc thieát keá, caøi ñaët chöông trình. Xây dựng giÁi thu¿t Khaùi nieäm giaûi thuaät hay thuaät giaûi maø nhieàu khi coøn ñöôïc goïi laø thuaät toaùn duøng ñeå chæ phöông phaùp hay caùch thöùc (method) ñeå giaûi quyeát vaàn ñeà. Giaûi thuaät coù theå ñöôïc minh hoïa baèng ngoân ngöõ töï nhieân (natural language), baèng sô ñoà (flow chart) hoaëc baèng maõ giaû (pseudo code). Trong thöïc teá, giaûi thuaät thöôøng ñöôïc minh hoïa hay theå hieän baèng maõ giaû töïa treân moät hay moät soá ngoân ngöõ laäp trình naøo ñoù (thöôøng laø ngoân ngöõ maø ngöôøi laäp trình choïn ñeå caøi ñaët thuaät toaùn), chaúng haïn nhö C, Pascal, … Khi ñaõ xaùc ñònh ñöôïc caáu truùc döõ lieäu thích hôïp, ngöôøi laäp trình seõ baét ñaàu tieán haønh xaây döïng thuaät giaûi töông öùng theo yeâu caàu cuûa baøi toaùn ñaët ra treân cô sôû cuûa caáu truùc döõ lieäu ñaõ ñöôïc choïn.
Ñeå giaûi quyeát moät vaán ñeà coù theå coù nhieàu phöông phaùp, do vaäy söï löïa choïn phöông phaùp phuø hôïp laø moät vieäc maø ngöôøi laäp trình phaûi caân nhaéc vaø tính toaùn. Söï löïa choïn naøy cuõng coù theå goùp phaàn ñaùng keå trong vieäc giaûm bôùt coâng vieäc cuûa ngöôøi laäp trình trong phaàn caøi ñaët thuaät toaùn treân moät ngoân ngöõ cuï theå. Mái quan há giÿa cÃu trúc dÿ liáu và giÁi thu¿t Moái quan heä giöõa caáu truùc döõ lieäu vaø Giaûi thuaät coù theå minh hoïa baèng ñaúng thöùc: Caáu truùc döõ lieäu + Giaûi thuaät = Chöông trình 1 Giáo trình Môn CTDL – Hệ Cao Đẳng Khoa Công Nghệ Thông Tin – Trường Cao Đẳng Bách Khoa Nam Sài Gòn Nhö vaäy, khi ñaõ coù caáu truùc döõ lieäu toát, naém vöõng giaûi thuaät thöïc hieän thì vieäc theå hieän chöông trình baèng moät ngoân ngöõ cuï theå chæ laø vaán ñeà thôøi gian. Khi coù caáu truùc döõ lieäu maø chöa tìm ra thuaät giaûi thì khoâng theå coù chöông trình vaø ngöôïc laïi khoâng theå coù Thuaät giaûi khi chöa coù caáu truùc döõ lieäu.
Moät chöông trình maùy tính chæ coù theå ñöôïc hoaøn thieän khi coù ñaày ñuû caû Caáu truùc döõ lieäu ñeå löu tröõ döõ lieäu vaø Giaûi thuaät xöû lyù döõ lieäu theo yeâu caàu cuûa baøi toaùn ñaët ra. Đánh giá cÃu trúc dÿ liáu và giÁi thu¿t 1. Các tiêu chuẩn đánh giá cÃu trúc dÿ liáu Ñeå ñaùnh giaù moät caáu truùc döõ lieäu chuùng ta thöôøng döïa vaøo moät soá tieâu chí sau: - Caáu truùc döõ lieäu phaûi tieát kieäm taøi nguyeân (boä nhôù trong), - Caáu truùc döõ lieäu phaûi phaûn aûnh ñuùng thöïc teá cuûa baøi toaùn, - Caáu truùc döõ lieäu phaûi deã daøng trong vieäc thao taùc döõ lieäu. Đánh giá đá phāc t¿p cÿa thu¿t toán Vieäc ñaùnh giaù ñoä phöùc taïp cuûa moät thuaät toaùn quaû khoâng deã daøng chuùt naøo.
ÔÛ daây, chuùng ta chæ muoán öôùc löôïng thôøi gian thöïc hieän thuaän toaùn T(n) ñeå coù theå coù söï so saùnh töông ñoái giöõa caùc thuaät toaùn vôùi nhau. Trong thöïc teá, thôøi gian thöïc hieän moät thuaät toaùn coøn phuï thuoäc raát nhieàu vaøo caùc ñieàu kieän khaùc nhö caáu taïo cuûa maùy tính, döõ lieäu ñöa vaøo, …, ôû ñaây chuùng ta chæ xem xeùt treân möùc ñoä cuûa löôïng döõ lieäu ñöa vaøo ban ñaàu cho thuaät toaùn thöïc hieän. Ñeå öôùc löôïng thôøi gian thöïc hieän thuaät toaùn chuùng ta coù theå xem xeùt thôøi gian thöïc hieän thuaät toaùn trong hai tröôøng hôïp: - Trong tröôøng hôïp toát nhaát: Tmin - Trong tröôøng hôïp xaáu nhaát: Tmax Töø ñoù chuùng ta coù theå öôùc löôïng thôøi gian thöïc hieän trung bình cuûa thuaät toaùn: Tavg 1. Khái niám vÁ kiểu dÿ liáu Kieåu döõ lieäu T coù theå xem nhö laø söï keát hôïp cuûa 2 thaønh phaàn: 2 Giáo trình Môn CTDL – Hệ Cao Đẳng Khoa Công Nghệ Thông Tin – Trường Cao Đẳng Bách Khoa Nam Sài Gòn - Mieàn giaù trò maø kieåu döõ lieäu T coù theå löu tröõ: V, - Taäp hôïp caùc pheùp toaùn ñeå thao taùc döõ lieäu: O.
T = <V, O> Moãi kieåu döõ lieäu thöôøng ñöôïc ñaïi dieän bôûi moät teân (ñònh danh).