1. Trang chủ
  2. » Công Nghệ Thông Tin

Giáo trình cấu trúc dữ liệu Trần Cao Đệ

134 125 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 134
Dung lượng 1,78 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

iăv iăm tăbàiătoánăđãăđ căhìnhăth căhoá,ăchúngătaăcóăth ătìmăki măcáchăgi iătrongăthu tăng ăc aămôăhìnhăđóăvàăxácăđ nhăcóăhayăkhôngăm tăph ngăphápăho căm tă ch ngătrìnhăcóăs năđ ăgi i.ăN

Trang 1

DATA STRUCTURES

TR NăCAOă

Trang 3

M CăL C

CH NGăI:ăM ă U 4

I T BĨẤ TOÁN N Cả NẢ TậÌNả 4

1 Mô hình hóa bài toán 4

2 Gi iăthu tă(algorithms) 7

3 Ngônăng ăgi ăvàătinhăch ăt ngăb că(Pseudo-language and stepwise refinement) 10

4 Tómăt t 13

II KẤ U D LẤ U Tậ U T NẢ (ABSTậACT DATA TYPE -ADT) 13

1 Kháiăni mătr uăt ngăhóa 13

2 Tr uăt ngăhóaăch ngătrình 14

3 Tr uăt ngăhóaăd ăli u 14

III KẤ U D LẤ U - C U TậÚC D LẤ U VĨ KẤ U D LẤ U Tậ U T NẢ (DATA TYPES, DATA STRUCTURES, ABSTRACT DATA TYPES) 15

BĨẤ T P 17

CH NGăII:ăCỄCăKI UăD ăLI UăTR UăT NGăC ăB Năă(BASICăABSTRACTăDATAăTYPES) 18

I KẤ U D LẤ U Tậ U T NẢ DANả SÁCả (LẤST) 18

1 Kháiăni mădanhăsách 18

2 Các phép toán trên danh sách 18

3 Càiăđ tădanhăsách 20

a Cài đ t danh sách b ng m ng (danh sách đ c) 20

b Cài đ t danh sách b ng con tr (danh sách liên k t đ n) 25

c Cài đ t b ng con nháy 30

II NẢ N X P (STACK) 35

1 nhăngh aăng năx p 35

2 Cácăphépătoánătrênăng năx p 35

3 Càiăđ tăng năx p 35

a Cài đ t ng n x p b ng danh sách 36

b Cài đ t b ng m ng 37

4 ngăd ngăng năx păđ ălo iăb ăđ ăquiăc aăch ngătrình 39

III ảĨNẢ Ấ (ẬUEUE) 43

1 nhăNgh a 43

2 Cácăphépătoánăc ăb nătrênăhàng 44

3 Càiăđ tăhàngăđ i 44

a Cài đ t hàng b ng m ng 44

b Cài đ t hàng b ng m ng theo ph ng pháp t nh ti n 45

c Cài đ t hàng v i m ng xoay vòng 47

d Cài đ t hàng b ng danh sách liên k t ( hay cài đ t b ng con tr ) 49

4 M tăs ă ngăd ngăc aăc uătrúcăhàng 51

IV DANả SÁCả LẤÊN K T KÉP (ếỊỐbệe - lists) 51

BĨẤ T P 56

CH NGăIII:ăC UăTRÚCăCỂY (TREES) 60

I CÁC TảU T NẢ C B N TậÊN CÂY 60

1 nhăngh aăcây 60

2 Th ăt ăcácănútătrongăcây 61

3 Cácăth ăt ăduy tăcâyăquanătr ng 61

4 Câyăcóănhãnăvàăcâyăbi uăth c 62

II KẤ U D LẤ U Tậ U T NẢ CÂY 64

III CĨẤ T CÂY 65

Trang 4

2 Bi uădi năcâyăb ngădanhăsáchăcácăcon 70

3 Bi uădi nătheoăconătráiănh tăvàăanhăemăru tăph i 71

4 Càiăđ tăcâyăb ngăconătr 73

IV CÂY Nả PảÂN (BẤNAậY TậEES) 75

1 nhăngh a 75

2 Duy tăcâyănh ăphân 75

3 Càiăđ tăcâyănh ăphân 76

V CÂY TÌM KẤ M Nả PảÂN (BINARY SEARCH TREES) 79

1 nhăngh a 79

2 Càiăđ tăcâyătìmăki mănh ăphân 80

BĨẤ T P 85

CH NGăIV:ăT PăH P 88

I KảÁẤ NẤ M T P ả P 88

II KẤ U D LẤ U Tậ U T NẢ T P ả P 88

III CĨẤ T T P ả P 89

1 Càiăđ tăt păh păb ngăvectorăBit 89

2 Càiăđ tăb ngădanhăsáchăliênăk t 90

IV T Ấ N (DẤCTẤONAậY) 93

1 Càiăđ tăt ăđi năb ngăm ng 94

2 Càiăđ tăt ăđi năb ngădanhăsáchăliênăk t 95

V C U TậÚC B NẢ B M (ảASả TABLE) 96

1 K ăthu tăb m 96

2 B ngăb măm 97

3 B ngăb măđóng 100

4 Cácăph ngăphápăxácăđ nhăhàmăb m 103

VI ảĨNẢ U TẤÊN (ịrỄỊrỄỏy qỐeỐe) 105

1 Kháiăni măhàngă u tiên 105

2 Càiăđ tăhàngă uătiên 105

a Cây có th t t ng ph n 105

b Cài đ t cây có th t t ng ph n b ng m ng 108

BĨẤ T P 112

CH NGăV:ă ăTH ă(GRAPH) 114

I CÁC Nả NẢả A 114

II KẤ U D LẤ U Tậ U T NẢ Tả 115

III BẤ U DẤ N Tả 116

1 Bi uădi năđ ăth ăb ngămaătr năk 116

2 Bi uădi năđ ăth ăb ngădanhăsáchăcácăđ nhăk 118

IV CÁC PảÉP DUY T Tả (TậAVEậSALS Oạ ẢậAPả) 118

1 Duy tătheoăchi uăsâuă(depth-first search) 118

2 Duy tătheoăchi uăr ngă(breadth-first search) 120

V M T S BĨẤ TOÁN TậÊN Tả 122

1 Bàiătoánătìmăđ ngăđiăng nănh tăt ăm tăđ nhăc aăđ ăth ă(theăsingleăsourceăshortedăpathăproblem) 122 2 Tìmăđ ngăđiăng nănh tăgi aăt tăc ăcácăc păđ nh 124

3 Bàiătoánătìmăbaoăđóngăchuy năti pă(transitiveăclosure) 125

4 Bàiătoánătìmăcâyăbaoătrùmăt iăthi uă(minimum-cost spanning tree) 125

a Gi i thu t Prim 125

b Gi i thu t Kruskal 126

BĨẤ T P 128

TĨẤ LẤ U TảAM Kả O 130

Trang 5

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ă

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ămônă C uă trúcă D ă li uă đ că biênă so nă c ă b nă d aă trênă quy nă "Dataă Structuresă andăAlgorithms"ăc aăAlfredăV.ăAho,ăJohnăE.ăHopcroftăvàăJeffreyăD.ăUllmanădoăAddison-

Wesley

Giáo trình 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 - Tr ngă iăh căC năTh ă

M cătiêuălà 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.ăTuyăv y,ăcácăđ iăt ngăsinh viên khác v năcóăth ăs ăd ngăgiáoătrìnhănàyălàmă tàiă li uă thamă kh oă hayă t ă h c.ă Chúngă tôiă ngh ă r ngă cácă b nă sinhă viênă khôngăchuyênătinăvàănh ngăng iăquanătâmăt iăcác c uătrúcăd ăli uăvàăgi iăthu tăs ătìmăđ cătrongănàyănh ngăđi uăh uăích

Giáoătrìnhăđ căphátăhànhăn iăb ăl năđ uătiênăvàoăn mă1998,ăvàăđ căch nhăs a,ătuă

b ăhàngăn m.ăL năch nhăs aăvàoăn mă2007ă(vàăhoànăch nhăn mă2008)ăđãăchuy năcácăcàiăđ tăb ngăPascalăsangăCăchoăsátăh năv iăsinhăviênăchuyênăngànhă- hi năđangăđ cătrangăb ăngônăng ăCănh ălàăngônăng ăl pătrìnhăc năb n.ăVi căcàiăđ tăcácăc uătrúcăd ă

li uătrong m tăngônăng ăl pătrìnhăc ăth ănh ăCăhayăPascalăkhôngăph iălàăm căđíchăchínhăc aăgiáoătrình.ăTuyănhiên,ăh uăh tăcácăđo năch ngătrìnhăđ căvi tătrongăgiáoătrìnhăđãăđ căbiênăd chătrongămôiătr ngăVisual C++ 6.0

N iădungăgiáoătrìnhămôn C uătrúcăD ăli uănàyăs ăcungăc păchoăsinhăviênăcácăki nă

th căc ăb năv ăcácăki uăd ăli uătr uăt ngăvàăcácăphépătoánăc ăb nătrên các ki uăd ă

li uătr uăt ngăđó.ăSauăkhiăh căxongămônănày,ăsinhăviênăs :

ng năx p,ăhàngăđ i,ăcây,ăt păh p,ăb ngăb m,ăđ ăth ăb ngăm tăngônăng ăl pătrìnhăc năb n

Giáoătrìnhăcònăcóăth ădùngăđ ăgi ngăd yănh ălàămônăh căc ăb n trongăt tăc ăcácăngànhăg năv iăTinăh c

Trang 6

ăh căt tămônăC uătrúcăD ăli uănày,ăsinhăviênăc năph iăcóăcácăki năth căc ăb n:

th ăkhôngăph iălàăm tăyêuăc uăb tăbu c.ăGiáoătrìnhănàyăminhăh aăcácăcàiăđ tă

c ăth ăb ngăngônăng ăC/C++ đóălàăm tăngônăng ăquenăthu căđ iăv iăsinhăviênăchuyênăngànhăTinăh c.ă

N iădungăgiáoătrìnhăg mă5ăch ngăvàăđ căthi tăk ătrongăkhuônăkh ă3 tínăch ă(45

ti t)ăc aăm tămônăh cătrongăch ngătrìnhăđ iăh c,ătrongăđóăcóăkho ngă30ăti tăgi ngălý thuy tăvàă15 ti tăbàiăt pămàăgiáoăviênăs ăh ngăd năchoăsinhăviênătrênăl p.ăN iădungăgiáoătrìnhăh iăchúătr ngăv ăcácăc uătrúcăd ăli uăvàăcácăgi iăthu tătrênăcácăc uătrúcăd ă

li uăđóăh nălàăcácăch ngătrìnhăhoànăch nhătrongăngônăng ăl pătrìnhăC/C++

Ch ngă1:ăTrìnhăbàyăcáchăti păc năt ăm tăbàiătoánăđ năch ngătrình,ănóăbaoăg mămôăhìnhăhoáăbàiătoán,ăthi tăl păc uătrúcăd ăli uătheoămôăhìnhăbàiătoán,ăvi tăgi iăthu tă

gi iăquy tăbàiătoánăvàăcácăb cătinhăch ăgi iăthu tăđ aăđ năcàiăđ tăc ăth ătrongăm tăngônăng ăl pătrình

Ch ngă2:ăTrìnhăbàyăki uăd ăli uătr uăt ngădanhăsách,ăcácăc uătrúcăd ăli uăđ ăcàiă

đ tădanhăsách.ăNg năx păvàăhàngăđ iăc ngăđ cătrìnhăbàyătrongăch ngănàyănh ălàăhaiă

c uătrúcădanhăsáchăđ căbi t.ă ngăd ngăng năx păđ ăkh ăđ ăquiăc aăch ngătrìnhăđ căcoiălàăm tă ngăd ngăquanătr ngăc aăc uătrúcăng năx p.ăNgoàiăraăchúngătôiăcònăg iăýă

m tăs ă ngăd ngăc aăc uătrúcăhàngăđ i.ăCu iăch ng dànhăđ ătrìnhăbàyăc uătrúcădanhăsáchăliênăk tăképăchoănh ngăbàiătoánăc năduy tădanhăsáchătheoăhaiăchi uăxuôi,ăng că

m tăcáchăthu năl i.ă

Ch ngănàyăcóănhi uăcàiăđ tăt ngăđ iăchiăti tăđ ăcácăb năsinhăviênăm iăti păc năv iă

l pătrìnhăcóăc ăh iănângăcaoăkh ăn ngăl pătrìnhătrongăngônăng ăC/C++ đ ngăth iăc ngă

nh măminhăh a vi căcàiăđ tăm tăki uăd ăli uătr uăt ngătrongăm tăngônăng ăl pătrìnhă

c ăth

Ch ngă3:ăGi iăthi uăv ăki uăd ăli uătr uăt ngăcây,ăkháiăni măcâyăt ngăquát,ăcácăphépăduy tăcâyăt ngăquátăvàăcàiăđ tăcâyăt ngăquát.ăK ăđ n, chúngătôiătrìnhăbàyăv ăcâyă

nh ăphân,ăcácăcáchăcàiăđ tăcâyănh ăphân.ăCu iăcùng,ăchúngătôiătrìnhăbàyăcâyătìmăki mă

nh ăphânănh ălàăm tă ngăd ngăc aăcâyănh ăphânăđ ăl uătr ăvàătìmăki măd ăli u m tăcáchăhi uăqu

Ch ngă4:ăNóiăv ăki uăd ăli uătr uăt ngăt păh p,ăcácăcáchăđ năgi năđ ăcàiăđ tăt pă

h pănh ăcàiăđ tăb ngăvect ăbítăvà b ngădanhăsáchăcóăho căkhôngăcóăth ăt ăPh năchínhă

c aăch ngănàyătrìnhăbàyăc uătrúcăd ăli u t ăđi n,ăđóălàăt păh păv iăbaăphépătoánăthêm,ă

hàngă uătiên

Ch ngă5:ăTrìnhăbàyăki uăd ăli uătr uăt ngăđ ăth ,ăcácăcáchăbi uădi năđ ăth ,ăt călà càiăđ tăđ ăth ăCácăphépăduy tăđ ăth ăbaoăg măduy tătheoăchi uăr ngăvàăduy tătheoăchi uăsâuăm tăđ ăth c ngăđ cătrìnhăbàyătrongăch ng.ăDoăh năch ăv ăth iăl ngălên

l pănênăchúngătôiăkhôngătáchăriêngăraăđ ătrìnhăbàyăđ ăth ăcóăh ng,ăđ ăth ăvôăh ngă

nh ngăchúngătôiăs ăphânăbi tănóă ănh ngăch c năthi t.ăCh ngănàyăđ ăc păm tăs ăbàiă

Trang 7

trongăcácămônăh cănh ăToánăr iăr căvàăLýăthuy tăđ ăth ,ăvìăv yăch ngănàyăch ăgi iăthi uăm tăs ăbàiătoánăđ năgi nănh tăđ ăsinhăviênăv năd ngăcáchăcàiăđ tăđ ăth ăvàăcác

phép toánătrênăđ ăth ăđ ăl pătrìnhăgi iăcác bài toán đó

Chúngătôiăhyăv ngătàiăli uănàyăđãăđúcăk tă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ăc aăchúngătôi M cădùăđãăr tăc ăg ngătrongăquáătrìnhăbiênăso n,ănh ngăgiáo trình cóăth ăv năcòn nhi uăkhi măkhuy 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

Trang 8

CH NGăI: M ă U

1 Mô hình hóa bài toán

ăgi iăm tăbàiătoánătrongăth căt ăb ng máy tính (computer) taăph iăb tăđ uăt ăvi căxácăđ nhăbàiătoán.ăNhi uăth iăgianăvàăcôngăs căb ăraăđ ăxácăđ nhăbàiătoánăc năgi iăquy t,ăt călàăph iătr ăl iărõăràngăcâuăh iă"ph iălàmăgì?"ăsauăđóălàă"làmănh ăth ănào?".ăThôngăth ng,ăkhiăkh iăđ u,ăh uăh tăcácăbàiătoánălàăkhôngăđ năgi n,ăkhôngărõăràng.ăăgi măb tăs ăph căt păc aăbàiătoánăth căt ,ătaăph iăhìnhăth căhóaănó,ăngh aălàăphátă

bi uăl iăbàiătoánăth căt ăthànhăm tăbàiătoánăhìnhăth căhayăcònăg iălàămôăhìnhătoán.ăCóă

th ăcóăr tănhi uăbàiătoánăth căt ăcóăcùngăm tămôăhìnhătoán

Víăd ă1: v năđ ătôămàuăb năđ ăth ăgi i:

Gi ăs ătaăc năph iătôămàuăchoăcácăn cătrênăb năđ ăth ăgi i (hình I.1).ăTrongăđóă

m iăn căđ cătôăm tămàuăvàăhaiăn călángăgi ng (có biênăgi i chung)ăthìăph iăđ cătôăb ngăhaiămàuăkhácănhau.ăHãyătìmăm tăph ngăánătôămàuăcácăn cătrênăb năđ ăsao choăs ămàuăs ăd ngălàăítănh t

Hình I.1: B năđ ăth ăgi i

Môăhìnhăhóaăbàiătoánănàyăcóăth ăhi uălà: tìmăcáchăbi uădi năbàiătoánăm tăcáchătr uă

t ngăh năđ ăg tăb ăcácăchiăti tăkhôngăc năthi t.ăVíăd ătaăch ăc năghiăl iăt tăc ăcácă

n cătrênăb năđ ăvàăm iăquanăh ă“lángăgi ng”ăgi aăhaiăn c,ăt călàăch ăc năbi tăn cănàoăv iăn cănàoăcóăbiênăgi iăchung.ăM tăcáchămôăhìnhăhóaălà:ăv ăm iăn cănh ăm tă

đi m;ăn uăhaiăn căcóăchungăbiênăgi iătaăs ăv ăm tăđ ngăn iăhaiăđi măt ngă ng.ă

V yăb năđ ăth ăgi iăvàăm iăquanăh ălángăgi ngăgi aăcácăn căđãăđ căbi uădi năb ngă

m tăđ ăth (graph):ăm iăđ nhălàăm tăn c,ăhaiăn căcóăbiênăgi iăchungăthìăhaiăđi mă

t ngă ngăs ăđ căn iăv iănhauăb iăm tăđo năth ng hay cong tùy thích,ăg iălàăcung hayăc nhăc aăđ ăth Ch ngăh n,ăm tăph năc aăb năđ ăth ăgi iăđ căchoătrongăhìnhăI.2ăcóăth ămôăhìnhăhóaăb ngăm tăđ ăth ănh ătrongăhìnhăI.3

Trang 9

HìnhăI.3:ăMinhăh aăvi cămôăhìnhăhóaăchoăph năb năđ ăth ăgi iătrongăhìnhăI.2

Bài toán “Tôămàuăchoăb năđ ăth ăgi i” tr ăthành:

thìăph iăđ cătôăb ngăhaiămàuăkhácănhau;

Rõăràng,ăgi ăđây bàiătoánătôămàuăđ tăraăbanăđ uăđãăcóăv ă“toánăh c”ăh năvàănóăxácă

đ nhăc ăth ăh năv năđ ă“ph iălàmăgì?”.ăVi călàmăsaoăđ ăgi iăđ căbàiătoánănày,ăt călàă

“làmănh ăth ănào?”ăcònăc năph iăđ căti păt cătháoăg

Trang 10

Víăd ă2:ă ènăgiaoăthông

Choăm tăngãăn mănh ăhình I.4,ătrongăđóăCăvàăEălàăcácăđ ngăm tăchi uătheoăchi uă

m iătên,ăcácăđ ngăkhácălàăhaiăchi u.ăHãyăthi tăk ăm tăb ngăđènăhi uăđi uăkhi năgiaoăthôngăt iăngãăn mănàyăm tăcáchăh pălý,ăngh aălà:ăphânăchiaăcácăl iăđiăt iăngãăn mănàyăthànhăcácănhóm,ăm iănhómăg m cácăl iăđiăcóăth ăcùngăđiăđ ngăth iănh ngăkhôngăx yăraătaiăn năgiaoăthôngă(cácăh ngăđiăkhôngăc tănhau),ăvàăs ăl ngănhómălàăítănh tăcóăth ă

đ c.ă

Taăcóăth ăxemăđ uăvàoă(input)ăc aăbàiătoánălàăt tăc ăcácăl iăđiăt iăngãăn mănày,ăđ uăraă(output)ăc aăbàiătoánălàăcácănhómăl iăđiăcóăth ăđiăđ ngăth iămàăkhôngăx yăraătaiăn nă

giao thông M iănhómăs ăt ngă ngăv iăm tăphaăđi uăkhi năc aăđènăhi u Vì v y, ta

ph iătìmăki măl iăgi iăv iăs ănhómălàăítănh tăđ ăgiaoăthôngăkhôngăb ăt căngh năvìăph iă

ch ăđ iăquáălâu.ă

HìnhăI.4:ăVíăd ăm tăngãăn m

T ngăt ănh ătrongăvíăd ă1,ătr căh tătaătìmăcáchămôăhìnhăhóaăbàiătoán,ăt călàătìmăcáchătr uăt ngăhóaăđ ăg tăb ăcácăchiăti tăkhôngăc năthi t.ă ăgi iăbàiătoánăv aăđ tăra,ăítănh tătaăph iăbi tă ăngãăn măcóăbaoănhiêuăl iăđi,ăl iăđiănàoăv iăl iăđiănàoăcóăh ngăgiaoăthôngăkhôngăc tănhau,ăl iăđiănàoăv iăl iăđiănàoăcóăh ngăgiaoăthôngăc tănhau.ă

DC, EA, EB, EC, ED ăcóăth ăgi iăđ căbàiătoánătaăph iătìmăm tăcáchănàoăđóăđ ăth ă

hi năm iăliênăquanăgi aăcácăl iăđiănày.ăL iănàoăv iăl iănàoăkhôngăth ăđiăđ ngăth i,ăl iănàoăvàăl iănàoăcóăth ăđiăđ ngăth i.ăVíăd ăc păABăvàăECăcóăth ăđiăđ ngăth i,ănh ngăADăvàăEBăthìăkhông,ăvìăcácăh ngăgiaoăthôngăc tănhau.ă ăđâyătaăs ădùngăm tăs ăđ ătr căquanănh ăsau:ătênăc aă13ăl iăđiăđ căvi tălênăm tăph ng,ăhaiăl iăđiănàoăn uăđiăđ ngăth iă

s ăx yăraăđ ngănhauă(t călàăhaiăh ngăđiăc tăquaănhau)ătaăn iăl iăb ngăm tăđo năth ng,ă

ho căcong,ăho căngo năngoèoătùy thích.ăTaăs ăcóăm tăs ăđ ănh hình I.5.ăNh ăv y,ătrênăs ăđ ănày,ăhaiăl iăđiăcóăc nhăn iăl iăv iănhauălàăhaiăl iăđiăkhôngăth ăchoăđiăđ ngă

th i.ă

V iăcáchăbi uădi nănh ăv yătaăđãăcóăm tăđ ăth ,ăt călàătaăđãămôăhìnhăhoáăbàiătoánăgiaoăthôngă ătrênătheoămôăhìnhătoánălàăđ ăth ;ătrongăđóăm i l iăđiătr ăthànhăm tăđ nhă

c aăđ ăth ,ăhaiăl iăđiăkhôngăth ăcùngăđiăđ ngăth iăđ căn iănhauăb ngăm tăđo n đ c

g iălàăc nhăc aăđ ăth ăBâyăgi ătaăph iăxácăđ nhăcácănhóm,ăv iăs ănhómăítănh t M iă

Trang 11

 Cácăl iăđiăchoăphépăcùngăđiăđ ngăth iăs ăcóăcùngăm tămàu:ăD ădàngănh nă

th yăr ngăhaiăđ nhăcóăc nhăn iănhauăs ăkhôngăđ cătôăcùngămàu;

Hình I.5: Mô hình giao thôngăt i ngãăn mătrongăhìnhăI.4

Tómăl i,ătaăph iăgi iăquy tăbàiătoánăsau:

Tôămàuăchoăđ ăth ă ăhìnhăI.5 sao cho:

năđây,ăbàiătoánă“ ènăgiaoăthông”ăđãăđ căphátăbi uăthànhăm tăbàiătoánăđ ăth ăTaă

c ngăth yăr ngăhaiăbàiătoánăth căt ă“Tôămàuăb năđ ăth ăgi i”ăvàă“ ènăgiaoăthông”ăxemăraăr tăkhácăbi tănhauănh ngăsauăkhiămôăhìnhăhóa,ăchúngăth căch tăch ălàăm t,ăđóălàăbàiătoánă“Tôămàuăđ ăth ”

iăv iăm tăbàiătoánăđãăđ căhìnhăth căhoá,ăchúngătaăcóăth ătìmăki măcáchăgi iătrongăthu tăng ăc aămôăhìnhăđóăvàăxácăđ nhăcóăhayăkhôngăm tăph ngăphápăho căm tă

ch ngătrìnhăcóăs năđ ăgi i.ăN uăkhôngăcóăm tăph ngăphápăho căm tăch ngătrìnhă

nh ăv yăthìăítănh tăchúngătaăc ngăcóăth ătìmăđ cănh ngăgìăđãăbi tăv ămôăhìnhăvàădùngăcácătínhăch tăc aămôăhìnhăđ ăxâyăd ngăm tăgi iăthu tăt t.ă

Khiăđãăcóămôăhìnhăthíchăh păchoăm tăbàiătoánătaăc năc ăg ngătìmăcáchăgi iăquy tă

bàiătoánătrongămôăhìnhăđó.ăKh iăđ uălàătìmăm tăgi iăthu t,ăđóălàăm tăchu iăh uăh nă

cácăch ăth ă(instruction)ămàăm iăch ăth ăcóăm tăýăngh aărõăràngăvàăth căhi năđ cătrongă

m tăl ngăth iăgianăh uăh n.ă

Knuth (1973) đ nhăngh aăgi iăthu tălàăm tăchu iăh uăh năcácăthaoătácăđ ăgi iăm tăbàiătoánănàoăđó.ăCácătínhăch tăquanătr ngăc aăgi iăthu tălà:

Trang 12

ả Ố ể ỉ (finiteness):ăgi iăthu tăph iăluônăluônăk tăthúcăsauăm tăs ăh uăh nă

b c;

XáẾ đ ỉể (definiteness):ăm iăb căc aăgi iăthu tăph iăđ căxácăđ nhărõăràngă

vàăph iăđ căth căhi năchínhăxác,ănh tăquán;

ảỄ Ố qỐ (effectiveness):ăcácăthaoătácătrongăgi iăthu tăph iăđ căth căhi nă

trongăm tăl ngăth iăgianăh uăh n.ă

Ngoàiăraăm tăgi iăthu tăcònăph iăcóăđ uăvàoă(input)ăvàăđ uăraă(output)

Nóiătómăl i,ăm tăgi iăthu tăph iăgi iăquy tăxongăm tăcôngăvi cănàoăđóăkhiătaăchoăd ă

li uăvào.ăCóănhi uăcáchăđ ăth ăhi năgi iăthu t:ădùngăl i,ădùngăl uăđ ,ă ăVàăm tăl iădùngăr tăph ăbi nălàădùngăngônăng ăgi ,ăđóălàăs ăk tăh păc aăngônăng ăt ănhiênăvà các

c uătrúcăc aăngônăng ăl pătrình

Víăd :ăThi tăk ăgi iăthu tăđ ăgi iăbàiătoán “Tôămàuăđ ăth ” trên

Choăđ nănay,ăbàiătoánătôămàuăchoăđ ăth ăkhôngăcóăgi iăthu tăt tăđ ătìmăl iăgi iăt iău,ăt călà,ăkhôngăcóăgi iăthu tănàoăkhácăh nălàă"th ăt tăc ăcácăkh ăn ng"ăhayă"vétăc n"ă

t tăc ăcácătr ngăh păcóăth ăcóăđ ăxácăđ nhăcáchătôămàuăchoăcácăđ nhăc aăđ ăth ăsaoăchoăs ămàuădùngălàăítănh t.ăTh căt ,ătaăch ăcóăth ă"vétăc n"ătrongătr ngăh păđ ăth ăcóă

s ăđ nhănh ,ătrongătr ngăh păng căl iătaăkhôngăth ă"vétăc n"ăt tăc ăcácăkh ăn ngătrongăm tăl ngăth iăgianăh pălý,ădoăv yătaăph iăsuyăngh ăcáchăkhácăđ ăgi iăquy tăv nă

đ :

cácătínhăch tăđ căbi tănàyătaăcóăth ăd ădàngătìmăl iăgi i,ăho c

ch aăch călàăl iăgi iăt iă u.ăM tăcáchălàmănh ăth ăđ iăv iăbàiătoánătrênălàă

"C ăg ngătôămàuăchoăđ ăth ăb ngăítămàuănh tăm tăcáchănhanhăchóng".ăÍtămàuă

nh tă ăđâyăcóăngh aălàăs ămàuămàătaătìmăđ căkhôngăph iăluônăluônătrùng

kh păv iăs ămàuăc nădùngătrongăl iăgi iăt iă uă(ítănh t), nh ngătrongăđaăs ă

tr ngăh păthìănóăs ătrùngăv iăđápăs ăc aăl iăgi iăt iă uăvàăn uăcóăchênhăl chăthìănóă"khôngăchênhăl chănhi u"ăsoăv iăl iăgi iăt iă u,ăbùăl iătaăkhôngăph iă

"vétăc n"ăm iăkh ăn ngăcóăth !ăNóiăkhácăđi,ătaăkhôngădùngăgi iăthu tă"vétă

c n"ăm iăkh ăn ngăđ ătìmăl iăgi iăt iă uămàătìmăm tăgi iăphápăđ ăđ aăraăl iă

gi iăh pălýăm tăcáchăkh ăthiăv ăth iăgian.ăM tăgi iăphápănh ăth ăg iălàăm tă

HEURISTIC

HEURISTICă choă bàiă toánă tôă màuă đ ă th ,ă th ngă g iă làă gi iă thu tă "háuă n"ă

(GREEDY) là:

Cể ỉ m ỏ đ ỉể Ếể a ỏô mỢỐ ốỢ ỏô ỉó b ỉỂ m ỏ mỢỐ m Ễ C ỉỢỊ đó;

DỐy ỏ ếaỉể sáẾể ẾáẾ đ ỉể Ếể a ỏô mỢỐ Ễ ố Ễ m ỏ đ ỉể Ếể a ỏô mỢỐ, ồáẾ

đ ỉể ồem ỉó Ếó Ệ ố Ễ m ỏ đ ỉể ỉỢỊ đ Ế ỏô b ỉỂ mỢỐ C đó ỆểôỉỂ N Ố ỆểôỉỂ Ếó, ỏô ỉó b ỉỂ mỢỐ C đó

Ýăt ngăc aăHeuristicănàyălàăh tăs căđ năgi n:ăếùỉỂ m ỏ mỢỐ đ ỏô ẾểỊ ỉểỄ Ố đ ỉể

ỉể ỏ Ếó ỏể đ Ế (cácăđ nhăđ căxétătheoăm tăth ăt ănàoăđó),ăkhiăkhôngăth ătôăđ că

Trang 13

Víăd :ă ăth ăhìnhăI.6 và cách tô màu cho nó

HìnhăI.6:ă ăth ăminhăh aăcáchătôămàuătheoă“háuă n”ă(GREEDY)

Tô theo GREEDY

(xétăl năl tătheoăs ăth ăt ăcácăđ nh)

T iă u (th ăt tăc ăcácăkh ăn ng)

5: vàng

Rõăràngăcáchătôămàuătrongăgi iăthu tă"háuă n"ăkhôngăluônăluônăchoăl iăgi iăt iă uă

nh ngănóăđ căth căhi năm tăcáchănhanhăchóng

Tr ăl iăbàiătoánăgiaoăthôngă ătrênăvàăápăd ngăHEURISTICăGreedyăchoăđ ăth ătrongă

hình I.5 (theoăth ăt ăcácăđ nhăđãăli tăkêă ătrên),ătaăcóăk tăqu :

Nh ăv yătaăđãătìmăraăm tăl iăgi iălàădùngă4ămàuăđ ătôăchoăđ ăth ăhìnhăI.5.ăNh ăđãănói,ăl iăgi iănàyăkhôngăch călàăl iăgi iăt iă u.ăV yăli uăcóăth ădùngă3ămàuăho căítăh nă3ămàuăkhông?ăTaăcóăth ătr ăl iămôăhìnhăc aăbàiătoánăvàădùngătínhăch tăc aăđ ăth ăđ ă

ki mătraăk tăqu ăNh năxétăr ng:

Hình I.7:ăVíăd ăv ăcácăđ ăth ăcóăn iăk tăđ yăđ

Trang 14

 M tăđ ăth ăcóăkăđ nhăvàăm iăc păđ nhăb tăk ăđ uăđ căn iănhauăthìăph iădùngăkămàuăđ ătô.ăHìnhăI.7ăch ăraăhaiăvíăd ăv iăk=3ăvàăk=4.ă

đ căn iănhauăthìăkhôngăth ădùngăítăh năkămàuăđ ătôăchoăđ ăth

ăth ătrongăhìnhăI.5 cóă4ăđ nh:ăAC, DA, BD, EBămàăm iăc păđ nhăb tăk ăđ uăđ că

n iănhauăv yăđ ăth ăhìnhăI.5 khôngăth ătôăv iăítăh nă4ămàu.ă i uănàyăchoăphépăk tălu nă

tìmăđ că ătrên,ăv iă4ămàu, c ngălàăl iăgi iăt iă u.ă

Nh ă v yă taă đãă gi iă đ că bàiă toánă giaoă thôngă đãă cho.ă L iă gi iă choă bàiă toánă làă 4ănhóm,ăm iănhómăg măcácăl iăcóăth ăđi đ ngăth i,ănóă ngăv iăm tăphaăđi uăkhi năc aăđènăhi u.ă ăđâyăc nănh năm nhăr ng,ăs ăd ătaăcóăl iăgi iăm tăcáchărõăràngăch tăch ănh ă

v yălàăvìăchúngătaăđãăgi iăbàiătoánăth căt ănàyăb ngăcáchămôăhìnhăhoáănóătheoăm tămôăhìnhăthíchăh pă(môăhìnhăđ ăth )ăvàănh cácăki năth cătrênămôăhìnhănàyă(bàiătoánătôămàuăvàăheuristicăđ ăgi i)ătaăđãăgi iăquy tăđ căbàiătoán.ă i uănàyăkh ngăđ nhăvaiătròă

d năthànhănh ngăchu iăm nhăđ ăc ăth ăh n,ăcu iăcùngălàăcácăch ăth ăthíchăh pătrongă

m tă ngônă ng ă l pă trình.ă Ch ngă h nă v iă heuristică GREEDY,ă gi ă s ă đ ă th ă làă G,ă

heuristicăs ăxácăđ nhăm tăt păh păNewclr cácăđ nhăc aăGăđ cătôăcùngăm tămàu,ămàătaă

g iălàămàuăm iăCă ătrên.ă ăti năhànhătôămàuăhoànăt tăchoăđ ăth ăGăthìăHeuristicănàyă

ph iăđ căg iăl păl iăchoăđ năkhi toànăth ăcácăđ nhăđ uăđ cătôămàu

PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: SET );

begin

{1} Newclr := Ø;

{2} foră(m iăđ nhăvăch aătôămàuăc aăG)ădo

{3} ifă(văkhôngăđ căn iăv iăm tăđ nhănàoătrongăNewclr)ăthenăbegin

{4} đánhăd uăvăđãăđ cătôămàu;

{5} thêm v vào Newclr;

end;

Th ăt căGREEDYăđ căvi tăv iăngônăng ăgi ăPASCAL

Trongăth ăt căb ngăngônăng ăgi ă ătrên,ăchúngătaăđãădùngăm tăs ăt ăkhóa c aăngônă

ng ăPASCAL xenăl năcácăm nhăđ ăti ngăVi t.ă i uăđ căbi tăn aălàătaădùngăcácăki uă

GRAPH,ăSETăcóăv ăxaăl ,ăchúngălàăcácă"ki uăd ăli uătr uăt ng"ămàăsauănàyăchúngătaă

s ăvi tăb ngăcácăkhaiăbáoăthíchăh pătrongăngônăng ăl pătrìnhăc ăth ăD ănhiên,ăđ ăcàiă

đ tăth ăt cănàyăthànhăch ngătrìnhăch yăđ cătrênămáyătính,ătaăph iăc ăth ăhoáăd nă

nh ngăm nhăđ ăb ngăti ngăvi tă ătrênăchoăđ năkhiăm iăm nhăđ ăt ngă ngăv iăm tă

đo nămãăthíchăh păc aăngônăng ăl pătrình Ch ngăh năm nhăđ ăif ă{3} cóăth ăchiăti tă

hoáăh năn aănh ăsau:

Trang 15

{2} foră(m iăđ nhăvăch aătôămàuăc aăG)ădoăbegin

{3.1} found:=false;

{3.2} foră(m iăđ nhăwătrongăNewclr)ădo

{3.3} ifă(cóăc nhăn iăgi aăvăvàăw)ăthen

{3.4} found:=true;

{3.5} if found=false then begin

{4} đánhăd uăvăđãăđ cătôămàu;

{5} thêm v vào Newclr;

end;

end;

end;

Th ăt căGREEDYăđãăđ cătinhăch ăm nhăđ ăifă ă{3}

Hình I.8:ăBi uădi năt păh păcácăđ nhănh ălàăm tădanhăsáchă(LIST)

Bâyăgi ătaăhãyăquanătâmăm tăchútăđ năcácăki uăd ăli uătr uăt ngăGRAPHăvàăSET Trongăgi iăthu tăvi tăb ngăngônăng ăgi ă ătrên, GRAPHăđ cădùngăđ ăch ă«ăki u »ăc aă

đ ăth ăđ uăvàoăcònăSETăđ ăch ă« ki u »ăc aăt păh păđ uăra.ăM tăcáchănômănaătaăcóăth ă

coi GRAPH nh ălàăt păh păcácăđ nhăvàăt păh păcácăc nhăc aăđ ăth ăđ uăvàoăcònăSET làăt păh păcácăđ nhă ăđ uăra.ă ăth oălu năkhôngăquáăsaăđàăvàoăcàiăđ t,ătaăhãy gác l iă

vi căbi uădi năt păh păcác c nhăđ ăt pătrungăvàoăt păh păcácăđ nh.ăCóănhi uăcáchăđ ă

bi uădi năt păh păcácăđ nhătrongăngônăng ăl pătrình.ă năgi n, taăxemăcácăt păh păđ nhă

nh ălàăm tădanhăsáchă(LIST)ăcácăs ănguyênăbi uădi năch ăs ăc aăcácăđ nhăvàăk tăthúcă

b ngăm tăgiáătr ăđ căbi tăNULLă(hìnhăI.8).ăV iănh ngăquiă cănh ăv yătaăcóăth ătinhă

ch ăgi iăthu tăGREEDYăm tăb căn aănh ăsau:

PROCEDURE GREEDY ( var G: GRAPH ; var Newclr: LIST );

var found:boolean;

v,w :integer;

begin

Newclr:= Ø;

v:=ăđ nhăđ uătiênăch aăđ cătôămàuătrongăG;

while v<>null do begin

found:=false;

w:=đ nhăđ uătiênătrongănewclr;

while( w<>null) and (not found) do begin

ifăcóăc nhăn iăgi aăvăvàăwăthen

found:=true;

else w:=ăđ nhăk ăti pătrongănewclr;

end;

if found=false then begin

đánhăd uăvăđãăđ cătôămàu;

thêm v vào Newclr;

end;

Trang 16

end;

end;

Th ăt căGREEDYăđãăđ cătinhăch ăthêm.ă

Vi cădùngăngônăng ăgi ănh măm căđíchăphátăh aăýăt ngăc aăgi iăthu t,ătránhăsaăđàăvàoăcúăphápăc aăngônăng ăTuyănhiên,ă ăcácăb cătinhăch ăv ăsau,ăth ăt căngônăng ă

gi ăcàngăg năgi ngăv iăch ngătrìnhătrongăm tăngônăng ăl pătrình.ăVìăv y,ăvi căch năngônăng ăgi ăt aăPASCALăhayăt aăCăhayăt aăm tăngôn ng ăl pătrìnhănàoăkhácălàătùyăthu căvàoăthóiăquenăc aăng iăs ăd ng,ăvàoăs ăquenăthu căv iăngônăng ăl pătrình

N uăng iădùngăquenăthu căv i ngônăng ăCăcóăth ăvi tăth ăt căv iăngônăng ăgi ăt aă

C nh ăsau :

void GREEDY ( GRAPH& G, SET& Newclr ){

/*1*/ Newclr = Ø;

/*2*/ foră(m iăđ nhăvăch aătôămàuăc aăG)ă

/*3*/ ifă(văkhôngăđ căn iăv iăm tăđ nhănàoătrongăNewclr){

/*4*/ đánhăd uăvăđãăđ cătôămàu;

/*5*/ thêm v vào Newclr;

}

Th t c GREEDY v i ngôn ng gi C

void GREEDY ( GRAPH& G, SET& Newclr )

{

/*1*/ Newclr= Ø;

/*2*/ foră(m iăđ nhăvăch aătôămàuăc aăG)ă{

/*3.1*/ int found=0;

/*3.2*/ foră(m iăđ nhăwătrongăNewclr)

/*3.3*/ ifă(cóăc nhăn iăgi aăvăvàăw)ă

/*3.5*/ if (!found) {

/*4*/ đánhăd uăvăđãăđ cătôămàu;

/*5*/ thêm v vào Newclr;

} }

}

Th ăt căcóăth ăđ cătinhăch ăthêmăm tăb căn a:

void GREEDY ( GRAPH& G, LIST& Newclr ){

Newclr= ;

intăv=ăđ nhăđ uătiênăch aăđ cătôămàuătrongăG;

while (v<>null) {

int found=0;

intăw=đ nhăđ u tiên trong newclr;

while( w<>null) && (!found)

Ifă(cóăc nhăn iăgi aăvăvàăw)

found=1;

else

Trang 17

Thêm v vào Newclr;

} v=ăđ nhăch aătôămàuăk ăti pătrongăG;

}

}

T ănh ngăth oălu n trên, cóăth ătómăt tăcácăb căti păc năv iăm tăbàiătoánăbaoăg m:

khôngăhìnhăth c,ăt călàănóăch ănêuăph ngăh ngăgi iăho căcácăb căgi iă

m tăcáchăt ngăquát

3 Hìnhăth căhoáăgi iăthu tăb ngăcáchăvi tăm tăth ăt căb ngăngônăng ăgi ,ăr iăchiăti tăhoáăd nă("m năd n")ăcácăb căgi iăt ngăquátă ătrên,ăk tăh păv iăvi cădùngăcácăki uăd ăli uătr uăt ngăvàăcácăc uătrúcăđi uăkhi nătrongăngônăng ă

l pătrìnhăđ ămôăt ăgi iăthu t.ă ăb cănày,ănóiăchung,ătaăcóăm tăgi iăthu tă

t ngăđ iărõăràng,ănóăg năgi ngănh ăm tăch ngătrìnhăđ căvi tătrongăngônă

ng ăl pătrình,ănh ngănóăkhôngăph iălàăm tăch ngătrìnhăch yăđ căvìătrongăkhiăvi tăgi iăthu tătaăkhôngăchúătr ngăn ngăđ năcúăphápăc aăngônăng ăvàăcácă

ỆỄ Ố ế ệỄ Ố cònă ăm cătr uăt ngăch ăkhôngăph iălàăcácăkhaiăbáoăcàiăđ tă

ki uătrongăngônăng ăl pătrình

nàyătaădùngăcácăc uătrúcăd ăli uăđ căcungăc pătrongăngônăng ,ăvíăd ăArray,ăRecord, ăđ ăth ăhi năcácăki uăd ăli uătr uăt ng,ăcácăb căc aăgi iăthu tă

đ căth ăhi năb ngăcácăl nhăvàăcácăc uătrúcăđi uăkhi nătrongăngônăng ăl pătrìnhăđ cădùngăđ ăcàiăđ tăgi iăthu t

Tómăt tăcácăb cănh ăsau:

Gi iăthu tăkhôngăhìnhăth c Ch ngătrìnhăngônăng ăgi Ch ngătrìnhăPascal,ăC,

Java

Trongă tină h c,ă tr uă t ngă hóaă ngh aă làă đ nă gi nă hóa,ă làmă choă v nă đ ă (ho că đ iă

t ng)ăsángăs aăh năvàăd ăhi uăh n b ngăcáchăn măb tănh ngăcáiăc ăb nă ăm căt ngă

th ,ăg tăb ăcácăchiăti tăth a Tr uăt ngăhóaălàăcheăđiănh ngăchiăti t,ălàmăn iăb tăcáiă

t ngăth ăTr uăt ngăhóaăcóăth ăth căhi nătrênăhaiăkhíaăc nhălàăỏr Ố ỏ ỉỂ ểóa ế ệỄ Ố

ỏr Ố ỏ ỉỂ ểóa Ếể ỉỂ ỏrửỉể

Trang 18

2 Tr uăt ngăhóaăch ngătrình

Tr uăt ngăhóaăch ngătrìnhălàăs ăđ nhăngh aăcácăch ngătrìnhăconăđ ăt oăraăcácăphépătoánătr uăt ng.ăVíăd ,ăcác phép toán s ăh că(c ng,ătr ,ănhân,ăchia) trong máy tínhăđãălàăs ătr uăt ngăhóaăc aăcácăphépătoánătrongăb ănh ătrênăbít,ăbyte,ăd chăchuy n.ăVíăd ăkhác,ăch ngăh nătaăcóăth ăt oăraăm tăch ngătrìnhăconăMatrix_Mult đ ăth căhi năphépătoánănhânăhaiămaătr n.ăSauăkhiăMatrix_mult đãăđ căt oăra,ătaăcóăth ădùngănóănh ă

m tăphépătoánănguyênăth yă(gi ngănh ăphépănhânăhaiăs ănguyên)

Tr uăt ngăhóaăch ngătrìnhăchoăphépăphânăchiaăch ngătrìnhăthànhăcácăch ngătrìnhăcon.ăS ăphânăchiaănàyăs ăcheăd uăt tăc ăcácăl nhăcàiăđ tăchiăti tătrongăcácăch ngătrìnhăcon.ă ăc păđ ăch ngătrìnhăchính,ătaăch ăth yăl iăg iăcácăch ngătrìnhăconăvàă

đi uănàyăđ căg iălàăs ăbaoăgói

Víăd ănh ăm tăch ngătrìnhănhânăhaiămaătr năđ căvi tăb ng tr uăt ngăhóaăcóăth ă

t ngăMatrix t ngăt ănh ăGRAPHăvàăSETă ătrên

Tr uăt ngăhóaăd ăli uălàăđ nhăngh aăcácăki uăd ăli uătr uăt ng

M ỏ ỆỄ Ố ế ệỄ Ố ỏr Ố ỏ ỉỂ (ADT) ệỢ m ỏ mô ểửỉể ỏỊáỉ ể Ế ẾùỉỂ ố Ễ m ỏ ỏ ị ể ị

các phép ỏỊáỉ (ỊịeraỏỊr) ỏr Ố ỏ ỉỂ đ Ế đ ỉể ỉỂể a ỏrỪỉ mô ểửỉể đó.ăVíăd ăt păh pă

s ănguyênăcùngăv iăcácăphépătoánăh p,ăgiao,ăhi uălàăm tăki uăd ăli uătr uăt ng Trongă m tă ADT, cácă phépă toánă cóă th ă th că hi nă trênă cácă đ iă t ngă (toánă h ng)ăkhôngăch ăthu căADTăđó, c ngănh ăk tăqu ăkhôngănh tăthi tăph iăthu căADT.ăTuyănhiênăph iăcóăítănh tăm tătoánăh ngăho căk tăqu ăph iăthu căADTăđangăxét.ă

ADT ệỢ s ỏ ỉỂ qỐáỏ ểỊá Ế a ẾáẾ ỆỄ Ố ế ệỄ Ố ỉỂỐyỪỉ ỏểỐ

ăminhăh a taăcóăth ăxétăb năphácăth oăcu iăcùngăc aăth ăt căGREEDY.ăTaăđãă

dùngăm tădanhăsáchă(LIST)ăcácăs ănguyênăvàăcácăphépătoánătrênădanhăsáchăNewclr là:

Trang 19

Câuăl nh M nhăđ ăhìnhăth c

MAKENULL(newclr) newclr= 

W=FIRST(newclr) w=ph năt ăđ uătiênătrongănewclr

W=NEXT(w,newclr) w=ph năt ăk ăti pătrongănewclr

INSERT( v,newclr) Thêm v vào newclr

i uănàyăchoăth yăs ăthu năl iăc aăADT,ăđóălàătaăcóăth ăđ nhăngh aăm tăki uăd ăli uă(tr uăt ng)ăc năthi tăcùngăv iăcácăphépătoánătrênănóăr iăchúngătaădùngănh ălàăcácăđ iă

t ngănguyênăthu ăH năn aăchúngătaăcóăth ăcàiăđ tăm tăADTăb ngăb tăk ăcáchănào,ă

ch ngătrìnhădùngăchúngăc ngăkhôngăthayăđ i,ăch ăcóăcácăch ngătrìnhăconăbi uădi năchoăcácăphépătoánăc aăADTălàăthayăđ i.ă

CƠiăđ tăADTălàăs ăth ăhi năcácăphépătoánămongămu nă(cácăphépătoánătr uăt ng)ă

thànhăcácăcâuăl nhăc aăngônăng ăl pătrình,ăbaoăg măcácăkhaiăbáoăthíchăh păvàăcácăth ă

t căth căhi năcácăphépătoánătr uăt ng.ă ăcàiăđ t, taăch năm tăc uătrúcăd ăli u thích

h păcóătrongăngônăng ăl pătrìnhăho călàăm tăc uătrúcăd ăli uăph căh păđ căxâyăd ngălênăt ăcácăki uăd ăli uăc ăb năc aăngônăng ăl pătrình

DATA TYPES)

M că dùă cácă thu tă ng ă ki uă d ă li uă (hayă ki uă - dataă type),ă c uă trúcă d ă li uă (dataăstructure),ă ki uăd ăli uătr uăt ngă(abstractădataătype)ăngheă kháă gi ngănhau,ănh ngăchúngăcóăýăngh aăr tăkhácănhau

Ki uăd ăli u làăm tăt păh păcácăgiáătr ăvàăm tăt păh păcácăphépătoánătrênăcácăgiáătr ă

đó.ăVíăd ăki uăBooleanălàăm tăt păh păcóă2ăgiáătr ăTRUE,ăFALSEăvàăcácăphépătoánătrênă nóă nh ă OR,ă AND,ă NOTă ….ă Ki uă Integeră (trong PASCAL) làă t pă h pă cácă s ănguyênăcóăgiáătr ăt -32768ăđ nă32767ăcùngăcácăphépătoánă+, -, *, /, div, mod …

Ki uăd ăli uăcóăhaiălo iălàăki uăd ăli uăs ăc păvàăki uăd ăli uăcóăc uătrúc Ki uăd ă

li uăs ăc pălàăki uăd ăli uămàăgiáătr ăd ăli uăc aănóălàăđ nănh t.ăVíăd :ăki uăBoolean,ăInteger… Ki uăd ăli uăcóăc uătrúcălàăki uăd ăli uămàăgiáătr ăd ăli uăc aănóălàăs ăk tă

h păc aănhi uăgiáătr ăkhác nhau,ăcùngăki uăho căkhácăki u.ăVíăd :ăARRAYălàăm tăki uă

d ăli uăcóăc uătrúc, ch aănhi uăgiáătr ăcùngăki u;ăRECORDălàăm tăki uăd ăli uăcóăc uătrúcăch aănhi uăgiáătr ăcóăki uăkhácănhau

Cácăngônăng ăl pătrìnhăkhác nhauăcungăc păcácăki uăd ăli uăc ăb năkhácănhau.ăH nă

n a,ăt ăcácăki uăd ăli uăc ăb nănàyăcóăth ăt oăraăcácăki uăd ăli uăcóăc uătrúcăph căh p

h n Cácăki uăd ăli uăcóăc uătrúcăc ăb nă(cungăc păb iăngônăng ăl pătrình)ăvàăcácăc uă

Trang 20

trúcăph căh pă(đ căt oăraăt ăcácăki uăd ăli uăc ăb n) g iăchungălàăcácăc uătrúcăd ă

li u

M tăki uăd ăli uătr uăt ng làăm tămôăhìnhătoánăh căcùngăv iăm tăt păh păcácă

phépătoánătrênănó.ăCóăth ănóiăki uăd ăli uătr uăt ngălàăm tăki uăd ăli uădoăchúngătaă

đ nhăngh aă ăm căkháiăni mă(conceptual),ănóăch aăđ căcàiăđ tăc ăth ăb ngăm tăngônă

ng ăl pătrình.ă

Khiăcàiăđ tăm tăki uăd ăli uătr uăt ngătrong m tăngônăng ăl pătrìnhăc ăth ,ăchúngătaăph iăth căhi năhaiăcôngăvi c:

1.ăBi uădi năki uăd ăli uătr uăt ngă( ăm căkháiăni m)ăb ngăm tăc uătrúcăd ăli uă

ho căm tăki uăd ăli uătr uăt ngăkhácăđãăđ căcàiăđ t

2.ăVi tăcácăch ngătrìnhăconăth căhi năcácăphépătoánătrênăki uăd ăli uătr uăt ng Sauăkhiăđãăcàiăđ t,ăki uăd ăli uătr uăt ngăcóăth ăđ căxemănh ăm tăki uă“nguyênă

s ”ă(primitive) c aăngôn ng ăl pătrìnhăvàăcácăphépătoánătrênăki uăd ăli uătr uăt ngăcóă

th ăxemănh ălàăcácăphépătoánă“nguyênăs ”ă– t călàăđãăđ căcàiăđ tăvàăcóăs năđ ădùngătrongăkhiăgi iăcácăbàiătoánăkhác.ăVíăd ,ăsauăkhiăcàiăđ tăLISTă(môăhìnhăcùngăv iăcác

phép toán trên LIST) thì LISTă cóă th ă dùngă càiă đ tă GRAPHă vàă SETă trongă th ă t c GREEDYă ătrên

Trongăgiáoătrình,ăchúngătôiădùngăthu tăng ă“ki uăd ăli uătr uăt ng” đ ănh năm nhăvàoătínhătr uăt ngăc aănó,ănh tălàă ăgiaiăđo năxâyăd ngăkháiăni mătr uăt ng.ăTuyănhiên,ăv ăsau,ăkhiăc uătrúcăđãăđ căcàiăđ tă(theoăm tăcáchănàoăđó) thìăc uătrúcătr uă

t ngăđãăđ căth ăhi năb ngăm tăki uăd ăli uăph căh păc ăth ăvàăvìăv yănóăcóătínhă

“c uătrúcăd ăli u”ăh nălàă“tr uăt ng” Chúngătôiăs ădùngătr năl năhaiăthu tăng ănàyăđ ă

ch ăcácăki uăd ăli uătr u t ngăvàăcácăc uătrúcăxâyăd ngănênăt ăcàiăđ tăcácăki uăd ăli uă

tr uăt ngănày;ăvíăd ,ă“ki uăd ăli uătr uăt ngădanhăsách”ăho că“c uătrúcăd ăli uădanhăsách”ăhayă“c uătrúcădanhăsách”ăchoăg nănh ă

T NGăK TăCH NG

làăvi cămôăhìnhăhóaăbàiătoán.ăSauăkhiăbàiătoánăđãăđ cămôăhìnhăhóa, taăhìnhăth căhóaă

m tăgi iăthu tăđ ăgi iăbàiătoánăd aătrênăki uăd ăli uătr uăt ng.ăGi iăthu tăcóăth ăđ că

di năđ tăb ngăngônăng ăgi ăvàăđ căchiăti t hóaăd nă(m năhóa).ăTrongăkhiăxâyăd ngă

m tăgi iăthu tătaăch ăt pătrungăvàoămôăhìnhăc aăbàiătoán,ăcácăphépătoánătrênămôăhìnhăđóă

ăm cătr uăt ng,ăch aăđ căcàiăđ tătrongăch ngătrình.ăV ăsau,ăkhiăcàiăđ tăki uăd ă

li uătr uăt ngă(môăhìnhăvàăcácăphépătoánătr uăt ng) trongăm tăngônăng ăl pătrình, chúngătaăc năl aăch năcác c uătrúcăd ăli uăthíchăh pă(đ căcungăc pătrongăngônăng ă

l pătrình).ăCácăcàiăđ tăm tăchoăki uăd ăli uătr uăt ngăcóăth ăkhácănhauătùyătheoăc uătrúcăd ăli uăđ căl aăch n.ăTuyănhiênăcácăphépătoánătr uăt ngălàătrongăsu tăđ iăv iă

ng iădùngăvàăkhôngăph ăthu căvàoăcácăc uătrúcăd ăli u.ăChínhăvìăth ăcácăphépătoánă

tr uăt ngăcóăth ăđ cădùngănh ălàăcácă”nguyênăs ”ătrongăthi tăk ăgi iăthu tăv ăsau

Trang 21

1 Nêuăkháiăni măki uăd ăli u,ăki uăd ăli uătr uăt ng,ăc uătrúcăd ăli u.ăChoăvíă

d ăc ăth ăđ ăminhăh aăt ngăkháiăni m

sangăm tăc căkhácăvàăkhôngăđ căđ tăđ aăl năn mătrênăđ aănh ă(hìnhăI.9)

Hình I.9: Minhăh aăbài toán ThápăHàăN i

a Mô hình hóa bài toán

Trang 22

CH NGăII: CỄCăKI UăD ăLI UăTR UăT NGăC ăB N

(BASIC ABSTRACT DATA TYPES)

Môăhìnhătoánăh căc aădanhăsáchălàăm tăt păh păh uăh năcácăph năt ăcóăcùngăm tă

ki u,ămàăt ngăquátătaăg iălàăki uăph năt ă(element type) Taăbi uădi nădanhăsáchănh ălàă

m tăchu iăcácăph năt ăc aănó:ăa1, a2, , an,v iănă 0.ăN uăn=0ătaănóiăếaỉể sáẾể r ỉỂ

(emptyălist).ăN uănă>ă0ătaăg iăa1 làăph năt ăđ uătiênăvàăan là ph năt ăcu iăcùngăc aădanhă

sách.ăS ăph năt ăc aădanhăsáchătaăg iălàăđ ếỢỄ c aădanhăsách

M tătínhăch tăquanătr ngăc aădanhăsáchălàăcácăph năt ăc aădanhăsáchăẾó ỏể ỏ ỏỐy ỉ

ỏíỉể ỏểeỊ ố ỏrí (position)ăxu tăhi năc aăcácăph năt ăTaănóiăaiđ ngătr căai+1, v iăiăt ă1ă

đ năn-1;ăT ngăt ătaănóiăai làăph năt ăđ ngăsauăai-1,ăv iăiăt ă2ăđ năn.ăTaăc ngănóiăai là

ph năt ăt iăv ătríăth ăi,ăhayăph năt ăth ăiăc aădanhăsách

Víăd :ăT păh păh ătênăcácăsinhăviênăc aăl păTINHOCă28ăđ căli tăkêătrênăgi yănh ă

sau:

1.ăNguy n Trung D ngă

2.ăNguy năNg căN ng

2 Các phép toán trên danh sách

ăthi tăl păki uăd ăli uătr uăt ngădanhăsáchă(hayăng năg nălàădanhăsách)ătaăph iă

đ nhăngh aăcácăphépătoánătrênădanhăsách.ăVàănh ăchúngătaăs ăth yătrongătoànăb ăgiáoă

(application).ăVìăv yă ăđâyătaăs ăđ nhăngh aăm tăs ăphépătoánăc ăb nănh tătrênădanhăsách.ă ăthu năti năchoăvi căđ nhăngh aătaăgi ăs ăr ngădanhăsáchăg măcácăph năt ăcóă

ki uălàăki uăph năt ă(ElementType);ăv ătríăc aăcácăph năt ătrongădanhăsáchăcóăki uălàă

ki uă v ă trí (Position); vàă v ă tríă sauă ph nă t ă cu iă cùngă trongă danhă sáchă Lă làăENDLIST(L).ă C nă nh nă m nhă r ngă kháiă ni mă v ă tríă (position)ă làă doă taă đ nhă ngh a

nh măđ ăch ăv ătríăc aăph năt , nóăkhôngăph iălàăgiáătr ăc aăcácăph năt ătrongădanhă

sách V ătríăkhôngănh tăthi tăph iălàăs ănguyên

Cácăphépătoánăđ căđ nhăngh aătrênădanhăsáchălà:ă

position)ătrongădanhăsáchăL.ăT c làăn uădanhăsáchălàăa1,a2, , ap-1, ap , , an

Trang 23

thì sau khi xen xăvàoăv ătríăpătaăcóăk tăqu ăa1, a2, , ap-1, x, ap, , an.ăN uă

v ătríăpăkhôngăt năt iătrongădanhăsáchăthìăphépătoánăkhôngăđ căth căhi n

 LOCATE(x,L) th căhi năvi căđ nhăv ăph năt ăxă(có ki uălàăki uăph năt ă-

ElementType) đ uătiênătrongădanhăsáchăL.ăLocateătr ăk tăqu ălàăv ătríă(ki uăposition)ăc aăph năt ăxătrongădanhăsách.ăN uăxăkhôngăcóătrongădanhăsáchăthìă

v ătríăsauăph năt ăcu iăcùngăc aădanhăsáchăđ cătr ăv ,ăt călàăENDLIST(L)

sáchăL;ăn uăv ătríăpăkhôngăcóătrongădanhăsáchăthìăk tăqu ăkhôngăxácăđ nhă(cóă

th ăthôngăbáoăl i vàăgiáătr ătr ăv ălà NULL)

 DELETE_LIST(p,L) ch ngătrìnhăconăth căhi năvi căxóa ph năt ă ăv ătríăpă

(ki uăposition)ăc aădanhăsách.ăN uăv ătríăpăkhôngăcóătrongădanhăsáchăthìăphépătoánăkhôngăđ căth căhi n vàădanhăsáchăLăs ăkhôngăthayăđ i

n uăpălàăph năt ăcu iăcùngătrongădanhăsáchăLăthìăNEXT(p,L)ăchoăk tăqu ălàăENDLIST(L).ăNextăkhôngăxácăđ nhăn uăpăkhôngăph iălàăv ătríăc aăm tăph nă

t ătrongădanhăsách

trongădanhăsách.ăN uăpălàăph năt ăđ uătiênătrong danh sách thì Previous(p,L) khôngă xácă đ nh.ă Previousă c ngă khôngă xácă đ nhă trongă tr ngă h pă pă khôngă

ph iălàăv ătríăc aăph năt ănàoătrongădanhăsách

danhăsáchăr ngăthìăENDLIST(L)ăđ cătr ăv

choăgiáătr ăFALSE

 MAKENULL_LIST(L) kh iăt oăm tădanhăsáchăLăr ng

Trongăthi tăk ăcácăgi iăthu tăsauănàyăchúngătaădùngăcácăphépătoánătr uăt ngăđãă

đ căđ nhăngh aă ăđâyănh ălàăcác phépătoánănguyênăth y.ă

Víăd :ăDùngăcácăphépătoánătr uăt ngătrênădanhăsách,ăvi tăm tăch ngătrìnhăconă

nh năm tăthamăs ălàădanhăsáchăr iăs păx pădanhăsáchătheoăth ăt ăt ngăd n Gi ăs ăcácă

ph năt ătrongădanhăsáchăthu căki uăcóăth ăt (t călàăcóăth ăápăd ng phép so sánh >)

q=NEXT(q,L);

}

Trang 24

p=NEXT(p,L);

}

}

RETRIEVE,…)ădoăchúngătaăđ nhăngh a,ănóăch aăđ căcàiăđ tătrongăcácăngônăng ăl pătrình.ăDoăđóăđ ăch ngătrìnhăconăSORT nóiătrênăcóăth ăch yăđ c, taăph iăcàiăđ tăcácă

phép toán này tthànhăcácăch ngătrìnhăconătrongăch ngătrình.ăH năn a,ătrongăkhiăcàiă

đ tăc ăth ,ăm tăs ăthamăs ăhìnhăth cătrongăcácăphépătoánătr uăt ngăkhôngăđóngăvaiătròăgìătrongăch ngătrìnhăconăcàiăđ tăchúng (t călàăkhôngăđ cădùng),ădoăv yătaăcóăth ă

b ăquaănóătrongădanhăsáchăthamăs ăc aăch ngătrìnhăcon.ăVíăd :ăphépătoánătr uăt ngăINSERT_LIST(x,p,L)ăcóă3ăthamăs ăhìnhăth c:ăph năt ămu năthêmăx,ăv ătríăthêmăvàoăpăvàădanhăsáchăđ căthêmăvàoăL.ăNh ngăkhiăcàiăđ tădanhăsáchăb ngăconătr ă(danhăsáchăliênăk tăđ n),ăthamăs ăLălàăkhôngăc năthi tăvìăv iăc uătrúcănàyăch ăcóăconătr ăt iăv ătríăpă

ph iăthayăđ iăđ ăn iăk tăv iăôăch aăph năt ăm i.ăTrongăgiáo trình này,ătaăv năgi ăđúngă

nh ngăthamăs ăhìnhăth căđãăđ nhăngh aătrongăphépătoánătr uăt ngătrong khi càiăđ tăđ ălàmăchoăch ngătrìnhăđ ngănh tăvàătrongăsu t đ iăv iăcácăph ngăphápăcàiăđ tăc aăcùngăm tăki uăd ăli uătr uăt ng Tuy nhiên, trongăth căhành v iăngônăng ăl pătrìnhă

“bi nănàyăđ căkhôngădùng” óăkhôngăph iălàăl iăbiênăd chăc aăch ngătrình,ănênă

đ căgi ăkhôngăc năph iăquanătâmăs aăl i.ă

a Cài đ t danh sách b ng m ng (danh sách đ c)

Danh sách cóăth ăđ căcàiăđ tăb ngăm ngănh ăsau:ăếùỉỂ m ỏ m ỉỂ đ ệ Ố ỂỄ ệỄỪỉ

ỏỄ ị ẾáẾ ịể ỉ ỏ Ế a ếaỉể sáẾể ỏ ố ỏrí đ Ố ỏỄỪỉ Ế a m ỉỂ.ăV iăcáchăcàiăđ tănày,ătaă

ph iă căl ngăs ăph năt ăc aădanhăsáchăđ ăkhaiăbáoăs ăph năt ăc aăm ngăchoăthíchă

h p.ăD ăth yăr ngăs ăph năt ăc aăm ngăph iăđ căkhaiăbáoăkhôngăítăh năs ăph năt ă

c aădanhăsách.ăNóiăchungălàăm ngăcònăth aăm tăs ăch tr ng.ăM tăkhácătaăph iăluôn

l uăgi ăđ ădàiăhi năt iăc aădanhăsách,ăđ ădàiănàyăchoăbi tădanhăsáchăcóăbaoănhiêuăph nă

t ăvàăchoăbi tăph nănàoăc aăm ngăcònătr ngănh ătrongăhìnhăII.1.ăTa đ ỉể ỉỂể a ố ỏrí

Ế a m ỏ ịể ỉ ỏ ỏrỊỉỂ ếaỉể sáẾể ệỢ s ỏể ỏ Ế a ịể ỉ ỏ ỏrỊỉỂ ếaỉể sáẾể Nh ăv yă

trongătr ngăh pănàyă“v ătrí”ăđ căđ nhăngh aălàăs ănguyên.ăC ngăc năph iăth yăr ngă

v ătríănàyăkhôngănh tăthi tăph iălàăch ăs ăc aăm ngăt iăn iăl uătr ăph năt ăCh ngăh nătrongăngônăng ăC,ăch ăs ăc aăm ngăb tăđ uăt ă0,ăvìăv yăph năt ăth ă1ăc aădanhăsáchăcóă(v ătríălàă1)ănh ngăn mătrongăm ngăt iăch ăs ă0,ăph năt ăth ăiă(v ătríălàăi)ăn mătrongă

m ngăt iăch ăs ă(i-1) Trongăngônăng ăl pătrìnhăPASCALăm ngăcóăth ăb tăđ uăb ngăs ă

nguyên tùy ý,ă víă d ă A[10 100] nênă ph nă t ăth ă nh tă c aă danhă sáchă n mă t iă ch ă s ăA[10]ăch ăkhôngăph iălàăA[1]! i măđángăl uătâmănh tălàăcácăph năt ăph iăđ căđ tăvàoăm ngăliênăti pănhau,ăkhôngăcóă“ôătr ng”ătrongăm ngăt ăđ uăchoăđ năcu iădanhă

sách.ăChínhăvìăv yădanhăsáchăv iăcáchăcàiăđ tănàyăcònăđ căg iălàădanh sáẾể đ Ế,ăt că

làă“khôngăr ngă ăgi a”

Trang 25

Ch ăs 0 1 … Last-1 … Maxlength-1

HìnhăII.1:ăCàiăđ tădanhăsáchăb ngăm ng (danhăsáchăđ c)

V iăhìnhă nhăminhăh aătrên,ăcácăkhaiăbáoăc năthi tălà:

#define MaxLength //S ănguyênăthíchăh păđ ăch ăđ ădàiăc aăm ng

typedefă ăElementType;ă//ki uăc aăph năt ătrongădanhăsách

typedef int Position; //ki uăv ătríăc a cácăph năt

typedef struct {

ElementType Elements[MaxLength]; //m ngăch aăcácăph năt ăc aădanhăsách

Position Last; //gi ăđ ădàiădanhăsách

} List;

Trênăđâyălàăs ăbi uădi năki uăd ăli uătr uăt ngădanhăsáchăb ngăc uătrúcăd ăli uă

m ng.ăPh năti pătheoălàăcác mã (code) càiăđ tăcácăphépătoánăc ăb nătrênădanhăsách

Kh iăt oădanhăsáchăr ngă

Danhăsáchăr ngălàăm tădanhăsáchăkhôngăch aăb tăk ăm tăph năt ănào,ăt călàăđ ădàiădanhăsáchăb ngă0.ăTheoăcáchăkhaiăbáoătrên,ătr ngăLastăch ăv ătríăc aăph năt ăcu iăcùngătrongădanhăsáchăvàăđóăc ngălà đ ădàiăhi năt iăc aădanhăsách,ăvìăv yăđ ăkh iăt oădanhăsáchăr ngătaăch ăvi căgánăgiáătr ătr ngăLastănàyăb ngă0

void MAKENULL_LIST(List& L){

L.Last=0;

}

Cácăb năm iălàmăquenăv iăl pătrìnhăCăc năl uătâmăt iăcúăphápăkhaiăbáoătruy năthamă

s ătrongăth ăt cătrên.ăD uă“&”ănh măđ ăkhaiăbáoătruy nătham s ătheoăki uăthamăchi u,ă

t călàăcácăthayăđ iătrongăch ngătrìnhăconăs ăcònăhi uăl căkhiăch ngătrìnhăconăk tăthúcă( ăđâyăbi năLastăs ăcóăgiáătr ă0ăngayăc ăsauăkhiăch ngătrìnhăconăk tăthúc) Th căraăđóălàăcúăphápăc aăC++.ăTuyănhiênătaăs ăkhôngăđ ăc pănhi uăđ năcácăkhíaăc nhăc aăngônăng ăl pătrìnhă ăđây.ăCácăđo năch ngătrìnhătrongăgiáoătrìnhănàyăđ căbiênăd chă

v iăVisualăC++ă6.0

Ki mătraădanhăsáchăr ng

Danhăsáchăr ngălàăm tădanhăsáchămàăđ ădàiăc aănóăb ngă0 Vìăv yăđ ăki mătraădanhăsáchăr ngătaăc năki mătraăđ ădàiănày.ăHàmăEMPTY_LISTăs ătr ăraăgiáătr ă0ăho că1ătùyătheoăgiáătr ăsoăsánhăc aăLastăv iă0

Trang 26

int EMPTY_LIST(List L){

return L.Last==0;

}

Xenăm tăph năt ăvƠoădanhăsách

Khiăxenăph năt ăcóăn iădungăxăvàoăt iăv ătríăpăc aădanhăsáchăL,ătaăc năxétăcác kh ă

n ngăsau:

ph nă t ă cu iă cùngă c aă danhă sáchă n mă ă v ă tríă cu iă cùngă trongă m ng.ă Nóiăcáchăkhác,ăđ ădàiăc aădanhăsáchăb ngăđ ădàiăc aăm ng.ăKhiăđóăkhôngăcònă

ch ăchoăph năt ăm i,ăvìăv yăvi căxenălàăkhôngăth ăth căhi năđ c,ăch ngătrìnhăconăg păl i Lúcănàyăthaoătácăxenăs ăkhôngăđ călàmăvàădanhăsáchăLăs ăkhôngăthayăđ i

l i;

sauă1ăv ătrí

Ch ngătrìnhăconăxenăph năt ăxăvàoăv ătríăpăc aădanhăsáchăLăcóăth ăvi tănh ăsau:

void INSERT_LIST(ElementType X, Position P, List& L){

/*ăD iăcácăph năt ăt ăv ătríăpă(ch ăs ătrongăm ngălàă

(p- 1)ăđ năcu iădanhăsáchăsangăph iă1ăv ătríă*/

for (Q=L.Last;Q>P-1;Q )

L.Elements[Q]=L.Elements[Q-1];

// aăxăvàoăv ătríăp L.Elements[P-1]=X;

//T ngăđ ădàiădanhăsáchălênă1 L.Last++;

} }

L uăýăr ng :ăđ ăd iăcácăph năt ăt ăv ătríăp đ năv ătríăcu iăcùngăc aădanhăsáchăraăsauă1ăv ătrí, thì các ph năt ăph iăđ căd iăm tăcáchăcóăh ăth ng;ăph năt ăcu iăcùngăph iădiă

Trang 27

chuy nătr c,ăk ăđ nălàăcácăph năt ătr cănóăm tăcáchătu năt ănh ăđãăđ căcàiăđ tă ă

trên

Xóaăph năt ăraăkh iădanhăsách

ăxóa m tăph năt ă ăv ătríăpăraăkh iădanhăsáchăL, taălàmăcôngăvi căng căl iăv iă

xen

p>L.lastăho căp<1ăthìăđâyăkhôngăph iălàăv ătríăc aăph năt ătrongădanhăsách.ă

t ăcóăv ătríăcu iăcùng trong danh sách ra phía tr căm tăv ătríăvàăđ ădàiădanhăsáchăgi măđiă1ăph năt

Th ăt căxóaăph năt ăcóăv ătríăpătrongădanhăsáchăLăcóăth ăđ căcàiăđ tănh ăsau :

void DELETE_LIST(Position P,List& L){

if ((P<1) || (P>L.Last))

printf("Vi tri khong hop le");

else {

Position Q;

/*D iăcácăph năt ăt ăv ătríăp+1ă(ch ăs ătrongăm ngă

làăp)ăđ năcu iădanhăsáchăv ătr că1ăv ătrí*/

nhăv ăm tăph năt ătrongădanhăsách

ăđ nhăv ăph năt ăx trongădanhăsáchăLă(tìmăph năt ăđ uătiênăcóăn iădungăxătrongă

danh sách L),ătaăti năhànhădòătìmăt ăđ uădanhăsách.ăN uătìmăth yăxăthìăv ătríăc aăph nă

t ătìmăth yăđ cătr ăv ,ăn uăkhôngătìmăth yăthìăhàmătr ăv ăv ătríăsauăv ătríăc aăph năt ă

cu iă cùngă trongă danh sách,ă t că làă ENDLIST(L).ă V iă càiă đ tă b ngă m ngă ă đâyă thìă

ENDLIST(L) là L.Last+1 Trongă tr ngă h pă cóă nhi uă ph nă t ă cùngă giáă tr ă xă trongădanhăsáchăthìăv ătríăc aăph năt ăđ cătìmăth yăđ uătiênăđ cătr ăv ă Nói cách khác,

ch ngătrìnhăconăs ătìmăxăm tăcáchătu năt ăchoăđ năkhiăg păx; ho călàăđiăđ năsauăv ătríă

ph năt cu iăcùngăn uăkhôngăg păx

Position LOCATE(ElementType X, List L){

PositionăPă=ă1;ă//v ătríăph năt ăđ uătiên

/*trongăkhiăch aătìmăth yăvàăch aăk tăthúcă

danhăsáchăthìăxétăph năt ăk ăti p*/

while (P != L.Last + 1)

if (L.Elements[P-1] == X)

Trang 28

else

Pă++ă;ă//tìmăti păt căsangăv ătríăk ăti p }

Cácăphépătoánăkhácăc ngăd ădàngăcàiăđ tănênăxemănh ăbàiăt pădànhăchoăb năđ c:

o FIRST(L) tr ăv ă1

o RETRIEVE(P,L) tr ăv L.Elements[P-1]

o ENDLIST(L) tr ăv ăL.Last+1

o NEXT(P,L) tr ăv P+1

Víăd :ăV năd ngăcácăphépătoánătrênădanhăsáchăđ căđ ăvi tăch ngătrìnhănh păvàoă

m tădanhăsáchăcácăs ănguyênăvàăhi năth ădanhăsáchăv aănh păraămànăhình.ăThêmăph nă

t ăcóăn iădungăxăvàoădanhăsáchăt iăvíătríăpă(trongăđóăxăvàăpăđ cănh păt ăbànăphím).ăXóaăph năt ăđ uătiênăcóăn iădungăxă(nh păt ăbànăphím)ăraăkh iădanhăsách

H ngăgi iăquy t :

Gi ăs ătaăđãăcàiăđ tăđ yăđ ăcácăphépătoánăc ăb nătrênădanhăsách.ă ăth căhi năyêuă

c uănh ătrên,ăta c năthi tăk ăthêmăcác phép toán sau:

cácăphépătoánătr uăt ngăc a danh sách)

toán này c ngăch aăcóătrongăcác phépătoánătr uăt ngăc a danh sách

void READ_LIST(List& L){

int n,x;

printf("Nhap so phan tu cua danh sach: ");

scanf("%d",&n);

for (int i=1; i<=n; i++){

printf("nhap phan tu thu %d: ",i);

Bâyă gi ă ch ă c nă s ă d ngă cácă phépă toánă MAKENULL_LIST, INSERT_LIST,

DELETE_LIST, LOCATE và READ_LIST, PRINT_LIST v aănóiătrênălàăcóăth ăgi iăquy tăđ căbàiătoán.ă ăđápă ngăyêuăc uăđ tăra,ătaăvi tăch ngătrìnhăchínhăđ ăn iăk tă

nh ngăch ngătrìnhăconăl iăv iănhauănh ăsau:

int main(){

List L;

ElementType X;

Trang 29

Position P;

MAKENULL_LIST(L);ă//Kh iăt oădanhăsáchăr ng

READ_LIST(L);

printf("Danh sach vua nhap: ");

PRINT_LIST(L); // In danh sach len man hinh

printf("Phan tu can them: ");scanf("%d",&X);

printf("Vi tri xen phan tu : ");scanf("%d",&P);

m tă ph nă t ă đ că th că hi nă nh ă th ă nào,ă đ nă gi nă ch ă c nă g iă cácă phépă toánă

INSERT_LIST hay DELETE_LISTă v iă cácă thamă s ă thíchă h p.ă T ă ràyă v ă sau,ă cácăphépătoánătr uăt ngăcóăth ăđ cădùngănh ălàăchúngăđãăcóăs nătrongăngônăng ăl pă

trình

b Cài đ t danh sách b ng con tr (danh sách liên k t đ n)

Cáchăkhácăđ ăcàiăđ tădanhăsáchălàădùngăconătr ăđ ăliênăk tăcácăôăch aăcácăph năt ăTrongăcáchăcàiăđ tănàyăcácăph năt ăc aădanhăsáchăđ căl uătr ătrongăcácăô,ăm iăôăcóă

th ăch ăđ năôăch aăph năt ăk ăti pătrongădanhăsách.ăB năđ căcóăth ăhìnhădungăc ăch ănàyăquaăvíăd ăsau:ă

Gi ăs ă1ăl păcóă4ăb n:ă ông,ăTây,ăNam,ăB căcó đ aăch ăl năl tălàăd,t,n,b.ăGi ăs :ăôngă cóă đ aă ch ă c aă Nam,ă Tâyă khôngă cóă đ aă ch ă c aă b nă nào,ă B că gi ă đ aă ch ă c aăông,ăNamăcóăđ aăch ăc aăTâyă(xemăhìnhăII.2) M tăb năAăgi ăđ aăch ăc aăb năBăthìăcoiănh ălàăAă« ch ăđ n »ăB,ăch ngăh năB căch ăđ nă ôngănh ăm iătênătrongăhìnhăII.2

Hình II.2 :ăC ăch ăliênăk tăcácăph năt ă(« ch ăđ n »)

Trang 30

Nh ăv y,ăn uătaăxétăth ăt ăcácăph năt ăb ngăc ăch ă« ch ăđ n » nàyăthìătaăcóăm tă

danh sách: B c,ă ông,ăNam,ăTây.ăH năn aăđ ăcóăth ătìmăđ cădanh sách c ă4ăb n này

thìătaăc năvàăch ăc n gi ăđ aăch ăc aăng iăđ uătiênă(t călàăđ aăch ăc aăB c)

Trongăcàiăđ t,ăđ ăm tăôăcóăth ăch ăđ n ôăkhácătaăcàiăđ tăm iăôălàăm tăm uătină(record

hay struct)ăcóăhaiătr ng:ătr ngăElement gi ăgiáătr ăc aăcácăph năt ătrongădanhăsách;

tr ngăNext làăm tăconătr gi ăđ aăch ăc aăôăk ăti p Tr ngăNext c aăph năt ăcu iă

đ căg iălàăcách càiăđ tăb ngăconătr ăvàădanhăsáchăđ căcàiăđ tănh ăv yăg iălàădanh

sácể ệỄỪỉ Ệ ỏ đ ỉ hayăng năg nălàăếaỉể sáẾể ệỄỪỉ Ệ ỏ

Hình II.3: Danhăsáchăliênăk tăđ n

ăqu nălýădanhăsáchătaăch ăc năm tăbi năgi ăđ aăch ăôăch aăph năt ăđ uătiênăc aădanhăsách,ăt călàăm tăconătr ătr ăđ năph năt ăđ uătiênătrongădanhăsách.ăBi nănàyăg iălàă

Ếể đỄ m đ Ố ếaỉể sáẾể (Header).ă ă đ nă gi nă hóaă v nă đ ,ă trongă chiă ti tă càiă đ t,ă

Header làăm tăbi năcùngăki uăv iăcácăôăch aăph năt ăc aădanhăsáchăvàănóăc ngăđ că

c păphátăôănh ăyănh ăm tăôăch aăph năt ăc aădanhăsáchă(hìnhăII.3).ăTuyănhiênăHeader làăm tăôăđ căbi t, nóăkhôngăch aăph năt ănàoăc aădanhăsách,ătr ngăd ăli uăc aăôănàyălàăr ng,ăch ăcóătr ngăconătr ăNext tr ăt iăôăch aăph năt ăđ uătiênăc aădanhăsách.ăN uă

m tăôăch aăd ăli uăbìnhăth ngănh măt ngătínhăđ năgi năc aăcácăgi iăthu tăthêm,ăxóa cácăph năt ătrongădanhăsách

ăđâyătaăc năphânăbi tărõăgiáătr ăc aăm tăph năt ă(t călàăn iădung)ăvà đ aăch ăc aănóătrongăc uătrúcătrên.ăVíăd ăgiáătr ăc aăph năt ăđ uătiênăc aădanhăsáchătrongăhìnhăII.3ălàă

Giáătr ăvàăđ aăch ăc aăcácăph năt ăc aădanhăsáchătrongăhìnhăII.3ănh ătrongăb ngăsau:

Trang 31

Sauă ph nă t ă

(n->Next cóăgiáătr ălàăNULL)

Nh ăđãăth yătrongăb ngătrên,ăđ ăbi tăđ căđ aăch ăc aăph năt ăth ăiătaăph iătruyăxu tă

trongădanhăsáchăliênăk t,ătaăph iăc pănh tăl iăconătr ătr ăt iăôăch aăph năt ăth ăpăđ ănóă

tr ăt iăph năt ăth ăpăm i,ăt călàăph iăc pănh tăl iătr ngăNext trong ôăch aăph năt ăth ă

(p-1) M tăcáchăchínhăxác,ăđ ătruyăc păvàoăph năt ăpătaăc năbi tăđ aăch ăôănh ăch aă

ph năt ăp.ă âyălàăth căch tălàăđ aăch ămáyănênătaătruyăc păthôngăquaăconătr tr ăđ nă

ph năt ăp Conătr ătr ăđ năph năt ăpăn mătrongătr ngăNext c aăôăch aăph năt ă(p-1)

Cho nên đ ăđ năgi nătrongăcácăphépătoán,ătaăđ nhăngh aăv ătríăc aăph năt ăpălƠăđ aăch ă

ôănh ăch aăconătr ătr ăđ năôăch aăph năt ăth ăp Rõăràngăđ aăch ănàyăchínhălàăđ aă

ch ăc aăô ch aăph năt ăth ă(p-1) Cóăth ănóiădi năd chăr ngăv ătríăc aăph năt ăth ă1ălàă

ph năt ăth ă3ălàăconătr ătr ăôăa2,ă ,ăv ătríăph năt ăth ănălàăconătr ătr ăôăch aăan-1.ăV ătríăsauăph năt ăcu iătrongădanhăsách,ăt călàăENDLIST,ăchínhălàăconătr ătr ăôăch aăph năt ă

an (xem hình II.3)

ph năt ăth ăpănàyăn mătrongătr ngăElement c aăôăđ căxácăđ nhăb iăP->Next Nói

cách khác P-> Next-> Element ch aăn iădungăc aăph năt ă ăv ătríăpătrongădanhăsách

Các khai báoăc năthi tălƠ

typedefă ăElementType;ă//ki uăc aăph năt ătrongădanhăsách

typedef struct Node{

ElementTypeăElement;//Ch aăn iădungăc aăph năt

Node*ăNext;ă//conătr ăch ăđ năph năt ăk ăti pătrongădanhăsách

};

typedefăNode*ăPosition;ă//ăKi uăv ătrí

typedef Position List;

T oădanhăsáchăr ng

Nh ăđãănóiă ăph nătrên,ătaădùngăHeader nh ălàăm tăbi năconătr ăcóăki uăgi ngănh ă

ki uă c aă m tă ôă ch aă m tă ph nă t ă c aă danhă sách.ă Tuyă nhiênă tr ngă Element c aă

Header khôngăbaoăgi ăđ cădùng,ăch ăcóătr ngăNext dùngăđ ătr ăt iăôăch aăph năt ă

đ uătiênăc aădanhăsách.ăV yăn uănh ădanhăsáchăr ngăthìăôăHeader v năph iăt năt iăvàăôă

void MAKENULL_LIST(List& Header){

Trang 32

Ki mătraăm tădanhăsáchăr ng

Danhăsáchăr ngăkhôngăch aăph năt ănào,ăkhiăđóătr ngăNext trong ô Header tr ăt iă

cóăph iălàăNULLăhayăkhông L uăý r ng,ăHeader ch ălàăm tăkháiăni măđ ăch ăm tăconă

tr ătr ăvàoăđ uădanhăsách.ăTrongăkhiăcàiăđ tăm tădanhăsáchăc ăth ,ăvíăd ădanhăsáchăL,ăthìăLăchínhălàăch ăđi măđ uăc aădanhăsách

int EMPTY_LIST(List L){

return (L- >Next==NULL);ă//LăchínhălàăHeaderăc aădanhăsáchăL

}

Xenăm tăph năt ăvƠoădanhăsách

Xenăm tăph năt ăcóăgiáătr ăxăvàoădanhăsáchăLăt iăv ătríăP taăph iăc păphátăm tăôăm iă

đ ăl uătr ăph năt ăm iănàyăvàăn iăk tăl iăcácăconătr ăđ ăđ aăôăm iănàyăvàoăv ătríăP.ăS ă

đ ăn iăk tăvàăth ăt ăcácăthaoătácăđ căchoătrongăhìnhăII.4.ă

HìnhăII.4:ăThêmăm tăph năt ăvàoădanhăsáchăt iăv ătríăP

void INSERT_LIST(ElementType X, Position P, List& L){

Trang 33

Xóaăph năt ăraăkh iădanhăsáchă

Hình II.5: Xóa ph năt ăt iăv ătríăp

T ngăt ănh ăkhiăxenăm tăph năt ăvàoădanh sáchăliênăk t,ămu năxóaăm tăph năt ă

kh iădanhăsáchătaăc năbi tăv ătríăP c aăph năt ămu năxóaătrongădanhăsáchăL.ăN iăk tăl iăcácăconătr ăb ngăcáchăchoăP tr ăt iăph năt ăđ ngăsauăph năt ăth ăP Trong các ngôn

ng ăl pătrìnhăkhôngăcóăc ăch ăthuăh iăvùngănh ăt ăđ ngănh ăngônăng ăPascal,ăCăthìătaă

ph iăthuăh iăvùngănh ăc aăôăb ăxóaăm tăcácăt ngăminhătrongăgi iăthu t.ăTuyănhiênăvìătínhăđ năgi năc aăgi iăthu tăchoănênăđôiăkhiăchúngătaăkhôngăđ ăc păđ năvi căthuăh iăvùngănh ăchoăcácăôăb ăxóa.ăChiăti tăvàătrìnhăt ăcácăthaoătácăđ ăxóa m tăph năt ătrongădanhăsáchăliênăk tănh ătrongăhìnhăII.5.ăCh ngătrìnhăconăcóăth ăđ căcàiăđ tănh ăsau:

void DELETE_LIST(Position P, List& L){

Position T;

if (P->Next!=NULL){

T=P- >Next;ă//gi ăôăch aăph năt ăb ăxóa đ ăthuăh iăvùngănh P->Next=T- >Next;ă//n iăk tăconătr ătr ăt iăph năt ăth ăp+1 free(T);ă//thuăh iăvùngănh

}

}

nhăv ăm tăph năt ătrongădanhăsáchăliênăk t

ăđ nhăv ăph năt ăxătrongădanhăsáchăL, taăti năhànhătìmăt ăđ uădanhăsách (t ăv ătríă

c aăph năt ăđ uătiênă- t călà ô Header) N uătìmăth yăthìăv ătríăc aăph năt ăđ uătiênă

đ cătìmăth yăs ăđ cătr ăv , n uăkhôngăthìăENDLIST(L) đ cătr ăv ăN uăxăcóătrongă

danh sách và hàmăLocateătr ăv ăv ătríăP thì x chính là P->Next->Element

Position LOCATE(ElementType X, List L){

Position P = L;

while (P->Next != NULL)

if (P->Next->Element == X) break;ă//ăng ngăt iăv ătríăP;

else P = P->Next;

return P;

}

Th căch t,ăkhiăg iăhàmăLOCATE ătrênătaăcóăth ătruy năgiáătr ăchoăLălàăb tăk ăgiáă

tr ănào.ăN uăLălàăHeader thìăch ngătrìnhăconăs ătìmăxăt ăđ uădanhăsách.ăN uăLălàăm tă

v ătríăP b tăk ătrongădanhăsáchăthìăhàm LOCATE s ăti năhànhăđ nhăv ăph năt ăxăt ăv ătríă

“đ măs ăl năxu tăhi năc aăxătrongădanhăsách”ăb ngăcáchăg iăhàmăLOCATEă ătrên

Trang 34

L yăgiáătr ăc aăph năt

Giáă tr ă (n iă dung)ă c a ph nă t ă đangă l uă tr ă t iă v ă tríă pă trongă danhă sáchă Lă làă

p->Next->Element Doăđó,ăhàmăs ătr ăv ăgiáătr ăp->Next->Elementăn uăph năt ăcóăt nă

ElementType RETRIEVE(Position P, List L){

if (P->Next!=NULL)

return P->Next->Element;

//elseăreturnăm tăgiáătr ănàoăđóăth ăhi năNULLătùyătheoăki uăph năt

}

a S oăsánhăhaiăph ngăphápăcƠiăđ t danh sách nêu trên

Khôngăth ăk tălu năph ngăphápăcàiăđ tănàoăhi uăqu ăh n,ămàănóăhoànătoànă tùy thu căvàoăt ngă ngăd ngăhayătùy thu căvàoăcácăphépătoánătrênădanhăsách.ăTuyănhiênătaăcóăth ăt ngăk tăm tăs ă uănh căđi măc aăt ngăph ngăphápălàmăc ăs ăđ ăl aăch n

ph ngăphápăcàiăđ tăthíchăh păchoăt ngă ngăd ng:

khôngăth ă căl ngăđ căs ăph năt ătrongădanhăsáchăthìăkhóăápăd ngăcáchăcàiăđ tănàyă m tăcáchă hi uăqu ăvìăn uăkhaiă báoăthi uăch ăthìă m ngăth ngăxuyênăb ăđ y,ăkhôngăth ălàmăvi căđ căcònăn uăkhaiăbáoăquáăth aăthìălãngăphíăb ănh

th ăr ngăho căl nătùy ýăch ăph ăthu căvàoăb ănh ăt iăđaăc aămáy.ăTuyănhiênătaăph iăt năthêmăvùngănh ăchoăcácăconătr ă(tr ngăNext)

điăsauăv ătríăxen ho c xóa.ăTrongăkhiăcàiăđ tăb ngăconătr ăcácăphépătoánănàyă

m tăch ăm tăh ngăth iăgian

PREVIOUS,ăch ăt năm tăh ngăth iăgianăđ iăv iăcàiăđ tăb ngăm ng,ătrongăkhiă

đ iăv iădanhăsáchăcàiăđ tăb ngăconătr ătaăph iătìmăt ăđ uădanhăsáchăchoăđ nă

v ătríătr căv ătríăc aăph năt ăhi năhành Nóiăchungădanhăsáchăliênăk t thích

h păv iădanhăsáchăcóănhi uăbi năđ ng,ăt călàătaăth ngăxuyênăthêm,ăxóa các

ph năt

c Cài đ t b ng con nháy

M tăs ăngônăng ăl pătrìnhăkhôngăcungăc păki uăconătr ăTrongătr ngăh pănàyătaăcóă

th ă"gi "ăconătr ăđ ăcàiăđ tădanhăsáchăliênăk t.ăÝăt ngăchínhălà:ădùngăm ngăđ ăch aăcácăph năt ăc aădanhăsách,ăcácă"conătr "ăs ălàăcácăbi năs ănguyênă(int)ăđ ăgi ăch ăs ă

c aăph năt ăk ăti pătrongăm ng.ă ăphânăbi tăgi aă"conătr ăth t"ăvàă"conătr ăgi "ătaăg iăcácăconătr ăgi ănàyălàăcon nháy (cursor).ăNh ăv y, đ ăcàiăđ tădanhăsáchăb ngăconănháyătaăc năm tăm ngămàăm iăph năt ăxemănh ălàăm tăôăg măcóăhaiătr ng:ătr ngăElement

nh ăthôngăl ăgi ăgiáătr ăc aăph năt ătrongădanhăsáchă(cóăki uăElementType)ătr ngă

Next là con nháy đ ăch ăt iăv ătríătrongăm ngăc aăph năt ăk ăti p.ăCh ngăh năhìnhăII.6ă

Trang 35

bi uădi năchoăm ngăSPACEăđangăch aăhaiădanhăsáchăL1, L2.ă ăqu nălíăcácădanhăsáchătaă c ngă c nă m tă conă nháyă ch ă đ nă ph nă t ă đ uă c aă m iă danhă sáchă (t ngă t ă nh ă

Header trongădanhăsáchăliênăk t).ăPh năt ăcu iăcùngăc aădanhăsáchătaăcho ch ăt iăgiáătr ă

nàoăcóăch ăs ă-1

Trong hình II.6, danh sách L1 g mă3ăph năt ă:ăF, O, R.ăCh ăđi măđ uăc aăL1 là con

nàyăcóăgiáătr ă1ălàăôăl uătr ăph năt ăk ăti pă(t călàăo).ăTr ngăNext t iăôăch aăoălàă4ălàăôă

l uătr ăph năt ăk ăti pătrongădanhăsáchă(t călàăr).ăCu iăcùngătr ngăNext c aăôănàyă

sáchăđ căcàiăđ tătheoăẾ Ếể ếaỉể sáẾể ệỄỪỉ Ệ ỏ i măkhácăbi tălàădanhăsáchăkhôngă

cóăch ăđi măđ uăth căs ă(t călà,ăkhôngăcó Header),ăthayăvàoăđóătaăch ăcóăm tăbi năs ănguyênăgi ăch ăs ăm ngăch aăph năt ăđ uătiênăc aădanhăsách

HìnhăII.6ăM ngăđangăch aăhaiădanhăsáchăL1 và L2

Khiăxenăm tăph năt ăvàoădanhăsáchătaăl yăm tăôătr ngătrongăm ng (ôăkhôngăch aă

b tăk ăph năt ănàoăc aăb tăk ădanhăsáchănàoăđangăch aătrongăm ng)ăđ ăch aăph năt ă

m iănàyăvàăn iăk tăl iăcácăconănháy.ăNg căl i,ăkhiăxóa m tăph năt ăkh iădanhăsáchătaă

n iăk tăl iăcácăconănháyăđ ălo iăph năt ănàyăkh iădanhăsách,ăđi uănàyăkéoătheoăs ăôă

tr ngătrongăm ngăt ngălênă1.ăV năđ ălàălàmăth ănàoăđ ăqu nălíăcácăôătr ngănàyăđ ăbi tăôă

nàoăcònătr ngăôănàoăđãădùng?ăm tăgi iăphápălàăệỄỪỉ Ệ ỏ ỏ ỏ Ế ẾáẾ ô ỏr ỉỂ ốỢỊ m ỏ ếaỉể

sáẾể đ Ế bỄ ỏ Ể Ễ ệỢ Available Khiăxenăm tăph năt ăvàoădanhăsáchătaăl yăôătr ngăđ uă

Trang 36

Available đ ăch aăph năt ăm iănày.ăKhiăxóa m tăph năt ăt ăm tădanhăsáchătaăchoăôăb ă

xóa n iă vàoă đ uă Available.ă T tă nhiênă khiă m iă kh iă đ uă vi că xâyă d ngă c uă trúcă thìă

m ngăch aăch aăph năt ănàoăc aăb tăk ăm tădanhăsáchănào.ăLúcănàyăt tăc ăcácăôăc aă

m ngăđ uălàăôătr ng,ăvàănh ăv y,ăt tăc ăcácăôăđ uăđ căliênăk tăvàoătrongăAvailable

Vi căkh iăt oăAvailable banăđ uăcóăth ăth căhi năb ngăcáchăđ năgi nălàăchoăph năt ă

th ăiăc aăm ngătr ăt iăph năt ăth ăi+1

Cácăkhaiăbáoăc năthi tăchoădanhăsách

#defineăMaxLengthă ă//Chi uădàiăm ng

#define Null -1 //Gia tri Null

typedefă ăElementType;ă/*ki uăc aăcácăph năt ătrongădanhăsách*/

typedef struct{

ElementTypeăElement;ă/*tr ngăch aăph năt ătrongădanhăsách*/

intăNext;ă//conănháyătr ăđ năph năt ăk ăti p

} Node;

Node Space[MaxLength]; //Mang toan cuc

intăAvailable;ă//ch ăđi măđ uădanhăsáchăôătr ng

HìnhăII.7:ăKh iăt oăAvailableăbanăđ u

Kh iăt oăc uătrúcăậ Thi tăl păAvailable banăđ u

Taăchoăph năt ăth ă0ăc aăm ngătr ăđ năph năt ăth ă1;ăph năt ăth ă1ătr đ năph năt ă

th ă2; ; ph năt ăcu iăcùngătr ăNull.ăCh ăđi măđ uăc aăAvailable làă0ănh ătrongăhìnhă

Trang 37

Th căch tăc aăvi căxenăhayăxóa m tăph năt ătrongădanhăsáchăcàiăđ tăb ngăconănháyălàăth căhi năvi căchuy năm tăôăt ădanhăsáchănàyăsangădanhăsáchăkhác.ăCh ngăh n, khi

đóăsangăAvailable, thao tác này xemănh ălàăgi iăphóngăb ănh ăb ăchi măb iăph năt ănày.ăDoăđóăt tănh tătaăvi tăm tăhàmăth căhi năthaoătácăchuy năm tăôăt ădanhăsáchănàyăsangădanhăsáchăkhácăvàăhàmăchoăk tăqu ălàă1ăho că0 tùyătheoăchuy năthànhăcôngăhayă

th tăb i.ăHàmăs ătr ăv 0ăn uăchuy năkhông thành công (l i)ăvàăs ătr ăv ă1ăn uăchuy nă

thành công Hàm Move sauăđâyăth căhi năchuy năôăđ cătr ăt iăb iăconănháyăPăvàoădanhăsáchăkhácăđ cătr ăb iăconănháyăQ HìnhăII.8ătrìnhăbàyăcácăthaoătácăc ăb năđ ăchuy năm tăô t ăm tădanhăsáchăsang danh sách khác

Hình II.8: Chuy nă1ăôăt ădanhăsáchănàyăsangădanhăsáchăkhácă(cácăliênăk tăv ăb ngănétăđ tă

bi uădi năchoăcácăliênăk tăc ă- tr căkhiăgi iăthu tăb tăđ u)

Trongăcáchăcàiăđ tăb ngăconănháy, kháiăni măv ătrí t ngăt ănh ăkháiăni măv ătríă

trongătr ngăh păcàiăđ tăb ngăconătr T călà,ăv ătríăc aăph năt ăth ăi trong danh sách làăch ăs ăc aăôătrongăm ngăch aăconănháyătr ăđ năôăch aăph năt ăth ăi.ă

Trang 38

Víăd ăxétădanhăsáchăL1 trongăhìnhăII.ă6,ăv ătríăc aăph năt ăth ă2ătrongădanhăsáchă(ph năt ăcóăgiáătr ăO)ălàă5,ăkhôngăph iălàă1;ăv ătríăc aăph năt ăth ă3ă(ph năt ăcóăgiáătr ă

là Null=-1,ăvìăkhôngăcóăôănàoătrongăm ngăch aăconănháyătr ăđ năôăch aăph năt ăF

nguyênăch ăôăch aăph năt ăđ uătiênăc aădanhăsách,ăch ăkhôngăph iălàăs ănguyênăch ăôă

ch aăconănháyătr ăđ năph năt ăđ uătiênăc aădanhăsách.ăVìăv y,ăv ăb năch tăcácăch ă

đi măđ uănàyăkhácăv iăHeader trongăcàiăđ tădanhăsáchăliênăk t.ăTrongăcàiăđ tădanhăsáchăliênăk tăđ nă ătrên,ăkhiădanhăsáchăr ng thì Header v năt năt iăvàăconătr ăNext c aă

nó là NULL (Headrer-> Next làăNULL).ăTrongăcàiăđ tăconănháyă ăđây,ăcácăch ăđi mă

khôngăph iălàăspace[L1].Next là Null

Xenăm tăph năt ăvƠoădanhăsách

Mu năxenăm tăph năt ăvàoădanhăsáchătaăc năbi tăv ătríăxen,ăgi ăs ălà p; ta s ăchuy năôăđ uăc aăAvailable vàoăv ătríănày Chúăýăr ngăv ătríăc aăph năt ăđ uătiênătrongădanhăsáchăđ căđ nhăngh aălàăNull,ădoăđóăn uăp=Null thì th căhi năvi căthêmăvàoăđ uădanhă

sách

void INSERT_LIST(ElementType X, int P, int& L){

if (P==Null) {//Xen dau danh sach

Xóa m tăph năt ătrongădanhăsách

Mu năxóa m tăph năt ăt iăv ătríăpătrongădanhăsáchătaăch ăc năchuy năôăch aăph năt ă

t iăv ătríănàyăvàoăđ uăAvailable.ăT ngăt ănh ăphépăthêmăvào,ăn uăp=Null thì xóa ph nă

t ăđ uădanhăsách

void DELETE_LIST(int p, int& L){

if (p== Null) //Neu la o dau tien

{

if (!Move(L,Available))

printf("Loi trong khi xoa");

// else Khong lam gi ca }

else

if (!Move(Space[p].Next,Available))

printf("Loi trong khi xoa");

//else Khong lam gi ca }

Trang 39

II NG NăX Pă(STACK)

Ng năx pă(Stack)ălàăm tădanhăsáchămàăvi căthêmăvàoăho călo iăb ăm tăph năt ăch ă

th căhi năt iăm tăđ uăc aădanhăsách,ăđ uănàyăg iălàăđ nhă(TOP)ăc aăng năx p

Taăcóăth ăxemăhìnhă nhătr căquanăc aăng năx păb ngăm tăch ngăđ aăđ tătrênăbàn.ă

Mu năthêmăvàoăch ngăđóă1ăđ a, taăđ ăđ aăm iătrênăđ nhăch ng; mu năl yăcácăđ aăraă

kh iăch ngătaăc ngăph iăl yăđ aătrênătr c.ăNh ăv yăng năx pălàăm tăc uătrúcăcóătínhă

ch tă“vàoăsauă- raătr c”ă- L IF O (last in - first out )

 MAKENULL_STACK(S): t oăm tăng năx păr ng

 TOP(S) hàmătr ăv ăph năt ăt iăđ nhăng năx p.ăN uăng năx păr ngăthìăk tăqu ă

c aăhàmăkhôngăxácăđ nh

 POP(S) xóa m tăph năt ăt iăđ nhăng năx p.ă

 PUSH(x,S) thêmăm tăph năt ăxăvàoăđ uăng năx p

 EMPTY_STACK(S) ki mătraăng năx păr ng.ăHàmăchoăk tăqu ă1ă(true)ăn uă

ng năx păr ngăvàă0ă(false)ătrongătr ngăh păng căl i

Nh ăđãănóiăt ătr c,ăkhiăthi tăk ăgi iăthu tătaăcóăth ădùngăcácăphépătoánătr uăt ngă

nh ălàăcácă"nguyênăs "ămàăkhôngăc năph iăđ nhăngh aăl iăhayăgi iăthíchăthêm.ăTuyănhiênăđ ăgi iăthu tăđóăthànhăch ngătrìnhăch yăđ căthìătaăph iăch năm tăc uătrúcăd ă

li uăh pălý đ ăcàiăđ tăcácă"nguyênăs " này

Víăd : Vi tăch ngătrìnhăconăEditănh năm tăchu iăkíăt ăt ăbànăphímăchoăđ năkhiăg pă

kíăt ă@ăthìăk tăthúcăvi cănh păvàăinăk tăqu ătheoăth ăt ăng căl i

Trang 40

a Cài đ t ng n x p b ng danh sách

Doă ng nă x pă làă m tă danhă sáchă đ că bi tă nênă taă cóă th ă s ă d ngă ki uă d ă li uă tr uă

t ngădanhăsáchăđ ăcàiăđ tăng năx p Th căch tăvi căcàiăđ t nàyăch ălàăth căhi năcácă

l iăg iăcácăphépătoánăđãăđ căđ nhăngh aăchoădanhăsáchăm tăcáchăđúngăđ năđ ăh năch ă

vi căvàoăraătrênădanhăsáchăch ăt iăm tăđ u.ă

Tr căh tătaăcóăth ăkhaiăbáoăng năx pănh ălà danh sách:

typedef List Stack;

Sauăđó,ăth căhi năcácăl iăg iăhàmătrênădanhăsáchăh pălíăđ ăth căhi năcácăphépătoánătrênăng năx p

T oăng năx păr ng

Ng năx păr ngăc ngăcóăngh aălàădanhăsáchăr ng,ăvìăv y:ă

void MAKENULL_STACK(Stack& S){

MAKENULL_LIST(S);

}

Ki mătraăng năx păr ng

Ki mătraăng năx păr ngăđ ngăngh aăv iăki mătraădanhăsáchăr ng

int EMPTY_STACK(Stack S){

return EMPTY_LIST(S);

}

Thêmăph năt ăvƠoăng năx p

Thêmă1ăph năt ăvàoăng năx p t călàăthêmăm tăph năt ăvàoăđ uădanhăsách

void PUSH(Elementtype X, Stack& S){

INSERT_LIST (x, First (S), S);

}

Xóaăph năt ăraăkh iăng năx p

Xóaăm tăph năt ătrongăng năx păchínhălàăxóaăph năt ăđ uătiênătrongădanhăsách.ă

void POP (Stack& S){

DELETE_LIST (First (S), S);

}

Rõ ràngăr ng,ăchúngătaăkhôngăc năt nănhi uăcôngăs căchoăvi căcàiăđ tăng năx p.ă

Tuy nhiên,ăvi căcàiăđ tădanhăsáchă(t ngăquát)ăsauăđóălàmăcácăl iăg iă“h năch ”ăl iăđ ăcóăng năx pălàăvi că“l yădaoăm ătrâuăđ ăgi tăru i”.ă ăt ngătínhăđ năgi n,ăhi uăqu ăc aă

ng năx pătaăcóăth ăcàiăđ tăng năx pătr căti păt ăcácăc uătrúcăd ăli uănh ătrình bày trong cácăph năsau

Ngày đăng: 20/04/2019, 06:04

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w