tai lieu giao khoa chuyen tin

20 191 0
tai lieu giao khoa chuyen tin

Đ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

Hồ sĩ đàm (Chủ biên) đỗ đức đông lê minh hoàng nguyễn hùng tài liệu giáo khoa chuyên tin Nhà xuất giáo dục việt nam Công ty Cổ phần dịch vụ xuất Giáo dục Hà Nội - Nhà xuất Giáo dục Việt Nam giữ quyền công bố tác phẩm 349-2009/CXB/43-644/GD M số : 8I746H9 LI NểI U B Giỏo dc v o to ủó ban hnh chng trỡnh chuyờn tin hc cho cỏc lp chuyờn 10, 11, 12 Da theo cỏc chuyờn ủ chuyờn sõu chng trỡnh núi trờn, cỏc tỏc gi biờn son b sỏch chuyờn tin hc, bao gm cỏc ủ c bn nht v cu trỳc d liu, thut toỏn v ci ủt chng trỡnh B sỏch gm ba quyn, quyn 1, v Cu trỳc mi quyn bao gm: phn lớ thuyt, gii thiu cỏc khỏi nim c bn, cn thit trc tip, thng dựng nht; phn ỏp dng, trỡnh by cỏc bi toỏn thng gp, cỏch gii v ci ủt chng trỡnh; cui cựng l cỏc bi Cỏc chuyờn ủ b sỏch ủc la chn mang tớnh h thng t c bn ủn chuyờn sõu Vi tri nghim nhiu nm tham gia ging dy, bi dng hc sinh chuyờn tin hc ca cỏc trng chuyờn cú truyn thng v uy tớn, cỏc tỏc gi ủó la chn, biờn son cỏc ni dung c bn, thit yu nht m mỡnh ủó s dng ủ dy hc vi mong mun b sỏch phc v khụng ch cho giỏo viờn v hc sinh chuyờn PTTH m c cho giỏo viờn, hc sinh chuyờn tin hc THCS lm ti liu tham kho cho vic dy v hc ca mỡnh Vi kinh nghim nhiu nm tham gia bi dng hc sinh, sinh viờn tham gia cỏc kỡ thi hc sinh gii Quc gia, Quc t Hi thi Tin hc tr Ton quc, Olympiad Sinh viờn Tin hc Ton quc, Kỡ thi lp trỡnh viờn Quc t khu vc ụng Nam , cỏc tỏc gi ủó la chn gii thiu cỏc bi tp, li gii cú ủnh hng phc v cho khụng ch hc sinh m c sinh viờn lm ti liu tham kho tham gia cỏc kỡ thi trờn Ln ủu sỏch ủc biờn son, thi gian v trỡnh ủ cú hn ch nờn chc chn cũn nhiu thiu sút, cỏc tỏc gi mong nhn ủc ý kin ủúng gúp ca bn ủc, cỏc ủng nghip, sinh viờn v hc sinh ủ b sỏch ủc ngy cng hon thin hn Cỏc tỏc gi Chuyờn ủ KIU D LIU TRU TNG V CU TRC D LIU Kiu d liu tru tng l mt mụ hỡnh toỏn hc vi nhng thao tỏc ủnh ngha trờn mụ hỡnh ủú Kiu d liu tru tng cú th khụng tn ti ngụn ng lp trỡnh m ch dựng ủ tng quỏt húa hoc túm lc nhng thao tỏc s ủc thc hin trờn d liu Kiu d liu tru tng ủc ci ủt trờn mỏy tớnh bng cỏc cu trỳc d liu: Trong k thut lp trỡnh cu trỳc (Structural Programming), cu trỳc d liu l cỏc bin cựng vi cỏc th tc v hm thao tỏc trờn cỏc bin ủú Trong k thut lp trỡnh hng ủi tng (ObjectOriented Programming), cu trỳc d liu l kin trỳc th bc ca cỏc lp, cỏc thuc tớnh v phng thc tỏc ủng lờn chớnh ủi tng hay mt vi thuc tớnh ca ủi tng Trong chng ny, chỳng ta s kho sỏt mt vi kiu d liu tru tng cng nh cỏch ci ủt chỳng bng cỏc cu trỳc d liu Nhng kiu d liu tru tng phc hn s ủc mụ t chi tit tng thut toỏn mi thy cn thit Danh sỏch 1.1 Khỏi nim danh sỏch Danh sỏch l mt sp th t cỏc phn t cựng mt kiu i vi danh sỏch, ngi ta cú mt s thao tỏc: Tỡm mt phn t danh sỏch, chốn mt phn t vo danh sỏch, xúa mt phn t danh sỏch, sp xp li cỏc phn t danh sỏch theo mt trt t no ủú v.v Vic ci ủt mt danh sỏch mỏy tớnh tc l tỡm mt cu trỳc d liu c th m mỏy tớnh hiu ủc ủ lu cỏc phn t ca danh sỏch ủng thi vit cỏc ủon chng trỡnh mụ t cỏc thao tỏc cn thit ủi vi danh sỏch Vỡ danh sỏch l mt sp th t cỏc phn t cựng kiu, ta ký hiu J l kiu d liu ca cỏc phn t danh sỏch, ci ủt c th, J cú th l bt c kiu d liu no ủc chng trỡnh dch chp nhn (S nguyờn, s thc, ký t, ) 1.2 Biu din danh sỏch bng mng Khi ci ủt danh sỏch bng mng mt chiu , ta cn cú mt bin nguyờn J lu s phn t hin cú danh sỏch Nu mng ủc ủỏnh s bt ủu t thỡ cỏc phn t danh sỏch ủc ct gi mng bng cỏc phn t ủc ủỏnh s t ti J: I{ J{ a) Truy c p ph n t m ng Vic truy cp mt phn t v trớ J mng cú th thc hin rt d dng qua phn t I Vỡ cỏc phn t ca mng cú kớch thc bng v ủc lu tr liờn tc b nh, vic truy cp mt phn t ủc thc hin bng mt phộp toỏn tớnh ch phn t cú thi gian tớnh toỏn l hng s Vỡ vy nu ci ủt bng mng, vic truy cp mt phn t danh sỏch v trớ bt k cú ủ phc l ò{{ b) Chốn ph n t vo m ng chốn mt phn t vo mng ti v trớ J, trc ht ta dn tt c cỏc phn t t v trớ J ti ti v trớ J v sau mt v trớ (to ch trng ti v trớ J), ủt giỏ tr vo v trớ J, v tng s phn t ca mng lờn procedure Insert(p: Integer; const v: TElement); //Th tc chốn phn t v vo v trớ p var i: Integer; begin for i := n downto p a[i + 1] := a[i]; a[p] := v; n := n + 1; end; Trng hp tt nht, v trớ chốn nm sau phn t cui cựng ca danh sỏch (J J - ), ủú thi gian thc hin ca phộp chốn l ò{{ Trng hp xu nht, ta cn chốn ti v trớ 1, ủú thi gian thc hin ca phộp chốn l ò{J{ Cng d dng chng minh ủc rng thi gian thc hin trung bỡnh ca phộp chốn l ò{J{ c) Xúa ph n t kh i m ng xúa mt phn t ti v trớ J ca mng m gi nguyờn th t cỏc phn t cũn li: Trc ht ta phi dn tt c cỏc phn t t v trớ J - ti J lờn trc mt v trớ (thụng tin ca phn t th J b ghi ủố), sau ủú gim s phn t ca mng (J) ủi procedure Delete(p: Integer); //Th tc xúa phn t ti v trớ p var i: Integer; begin for i := p to n - a[i] := a[i + 1]; n := n - 1; end; Trng hp tt nht, v trớ xúa nm cui danh sỏch (J J{, ủú thi gian thc hin ca phộp xúa l ò{{ Trng hp xu nht, ta cn xúa ti v trớ 1, ủú thi gian thc hin ca phộp xúa l ò{J{ Cng d dng chng minh ủc rng thi gian thc hin trung bỡnh ca phộp xúa l ò{J{ Trong trng hp cn xúa mt phn t m khụng cn trỡ th t ca cỏc phn t khỏc, ta ch cn giỏ tr phn t cui cựng vo v trớ cn xúa ri gim s phn t ca mng (J) ủi Khi ủú thi gian thc hin ca phộp xúa ch l ò{{ 1.3 Biu din danh sỏch bng danh sỏch ni ủn Danh sỏch ni ủn (Singly-linked list) gm cỏc nỳt ủc ni vi theo mt chiu Mi nỳt l mt bn ghi (record) gm hai trng: Trng JJ cha giỏ tr lu nỳt ủú Trng J cha liờn kt (con tr) ti nỳt k tip, tc l cha mt thụng tin ủ ủ bit nỳt k tip nỳt ủú danh sỏch l nỳt no, trng hp l nỳt cui cựng (khụng cú nỳt k tip), trng liờn kt ny JJ J ủc gỏn mt giỏ tr ủc bit, chng hn tr J type PNode = ^TNode; //Kiu tr ti mt nỳt TNode = record; //Kiu bin ủng cha thụng tin mt nỳt info: TElement; link: PNode; end; Nỳt ủu tiờn danh sỏch (I) ủúng vai trũ quan trng danh sỏch ni ủn duyt danh sỏch ni ủn, ta bt ủu t nỳt ủu tiờn, da vo trng liờn kt ủ ủi sang nỳt k tip, ủn gp giỏ tr ủc bit (duyt qua nỳt cui) thỡ dng li a I b c d e Hỡnh 1.1 Danh sỏch ni ủn a) Truy c p ph n t danh sỏch n i n Bn thõn danh sỏch ni ủn ủó l mt kiu d liu tru tng ci ủt kiu d liu tru tng ny, chỳng ta cú th dựng mng cỏc nỳt (trng J cha ch s ca nỳt k tip) hoc bin cp phỏt ủng (trng J cha tr ti nỳt k tip) Tuy nhiờn vỡ cu trỳc ni ủn, vic xỏc ủnh phn t ủng th J danh sỏch bt buc phi duyt t ủu danh sỏch qua J nỳt, vic ny mt thi gian trung bỡnh ò{J{, v t khụng hiu qu nh thao tỏc trờn mng Núi cỏch khỏc, danh sỏch ni ủn tin li cho vic truy cp tun t nhng khụng hiu qu nu chỳng ta thc hin nhiu phộp truy cp ngu nhiờn b) Chốn ph n t vo danh sỏch n i n chốn thờm mt nỳt cha giỏ tr vo v trớ ca nỳt J danh sỏch ni ủn, trc ht ta to mt nỳt mi J cha giỏ tr v cho nỳt ny liờn kt ti J Nu J ủang l nỳt ủu tiờn ca danh sỏch (I) thỡ cp nht li I bng J, cũn nu J khụng phi nỳt ủu tiờn ca danh sỏch, ta tỡm nỳt J l nỳt ủng lin trc nỳt J v chnh li liờn kt: J liờn kt ti J thay vỡ liờn kt ti thng J (h.1.2) a b I a I b c d J J e c J d J e J Hỡnh 1.2 Chốn phn t vo danh sỏch ni ủn procedure Insert(p: PNode; const v: TElement); //Th tc chốn phn t v vo v trớ nỳt p var NewNode, q: PNode; begin New(NewNode); NewNode^.info := v; NewNode^.link := p; if head = p then head := NewNode else begin q := head; while q^.link p q := q^.link; q^.link := NewNode; end; end; Vic chnh li liờn kt phộp chốn phn t vo danh sỏch ni ủn mt thi gian ò{{, nhiờn vic tỡm nỳt ủng lin trc nỳt J yờu cu phi duyt t ủu danh sỏch, vic ny mt thi gian trung bỡnh ò{J{ Vy phộp chốn mt phn t vo danh sỏch ni ủn mt thi gian trung bỡnh ò{J{ ủ thc hin c) Xúa ph n t kh i danh sỏch n i n: xúa nỳt J danh sỏch ni ủn, gi J l nỳt ủng lin sau J danh sỏch Xột hai trng hp: Nu J l nỳt ủu tiờn danh sỏch I J J thỡ ta ủt li I bng Nu J khụng phi nỳt ủu tiờn danh sỏch, tỡm nỳt J l nỳt ủng lin trc nỳt J v chnh li liờn kt: J liờn kt ti J thay vỡ liờn kt ti J (h.1.3) Vic cui cựng l hu nỳt J procedure Delete(p: PNode); //Th tc xúa nỳt p ca danh sỏch ni ủn var next, q: PNode; begin next := p^.link; if p = head then head := next else begin q := head; while q^.link p q := q^.link; q^.link := next; end; Dispose(p); end; a b c d I J J J a b d I J J e e Hỡnh 1.3 Xúa phn t danh sỏch ni ủn Cng ging nh phộp chốn, phộp xúa mt phn t danh sỏch ni ủn cng mt thi gian trung bỡnh ò{J{ ủ thc hin Trờn ủõy mụ t cỏc thao tỏc vi danh sỏch biu din di dng danh sỏch ni ủn cỏc bin ủng Chỳng ta cú th ci ủt danh sỏch ni ủn bng mt mng, mi nỳt cha mt phn t ca mng v trng liờn kt J chớnh l ch s ca nỳt k tip Khi ủú mi thao tỏc chốn/xúa phn t cng ủc thc hin tng t nh trờn: const max = ; //S phn t cc ủi type TNode = record 10 info: TElement; link: Integer; end; TList = array[1 max] of TNode; var Nodes: TList; head: Integer; 1.4 Biu din danh sỏch bng danh sỏch ni kộp Vic xỏc ủnh nỳt ủng lin trc mt nỳt J danh sỏch ni ủn bt buc phi duyt t ủu danh sỏch, thao tỏc ny mt thi gian trung bỡnh ò{J{ ủ thc hin v nh hng trc tip ti thi gian thc hin thao tỏc chốn/xúa phn t khc phc nhc ủim ny, ngi ta s dng danh sỏch ni kộp Danh sỏch ni kộp gm cỏc nỳt ủc ni vi theo hai chiu Mi nỳt l mt bn ghi (record) gm ba trng: Trng info cha giỏ tr lu nỳt ủú Trng J cha liờn kt (con tr) ti nỳt k tip, tc l cha mt thụng tin ủ ủ bit nỳt k tip nỳt ủú l nỳt no, trng hp nỳt ủng cui cựng danh sỏch (khụng cú nỳt k tip), trng liờn kt ny ủc gỏn mt giỏ tr ủc bit (chng hn tr J) Trng JJ cha liờn kt (con tr) ti nỳt lin trc, tc l cha mt thụng tin ủ ủ bit nỳt lin trc nỳt ủú l nỳt no, trng hp nỳt ủng ủu tiờn danh sỏch (khụng cú nỳt lin JJ JJ J trc), trng liờn kt ny ủc gỏn mt giỏ tr ủc bit (chng hn tr J) type PNode = TNode = info: next, end; ^TNode; //Kiu tr ti mt nỳt record; //Kiu bin ủng cha thụng tin mt nỳt TElement; prev: PNode; Khỏc vi danh sỏch ni ủn, danh sỏch ni kộp ta quan tõm ti hai nỳt: Nỳt ủu tiờn (JJ) v phn t cui cựng (IJ) Cú hai cỏch duyt danh sỏch ni kộp: Hoc bt ủu t JJ, da vo liờn kt J ủ ủi sang nỳt k tip, ủn 11 gp giỏ tr ủc bit (duyt qua IJ) thỡ dng li Hoc bt ủu t IJ, da vo liờn kt JJ ủ ủi sang nỳt lin trc, ủn gp giỏ tr ủc bit (duyt qua JJ) thỡ dng li JJ a b c d e IJ Hỡnh 1.4 Danh sỏch ni kộp Ging nh danh sỏch ni ủn, vic chốn/xúa nỳt danh sỏch ni kộp cng ủn gin ch l k thut chnh li cỏc mi liờn kt gia cỏc nỳt cho hp lý Tuy nhiờn ta cú th xỏc ủnh ủc d dng nỳt ủng lin trc/lin sau ca mt nỳt thi gian ò{{, nờn cỏc thao tỏc chốn/xúa trờn danh sỏch ni kộp ch mt thi gian ò{{, tt hn so vi ci ủt bng mng hay danh sỏch ni ủn 1.5 Biu din danh sỏch bng danh sỏch ni vũng ủn Trong danh sỏch ni ủn, phn t cui cựng danh sỏch cú trng liờn kt ủc gỏn mt giỏ tr ủc bit (thng s dng nht l giỏ tr J) Nu ta cho trng liờn kt ca phn t cui cựng tr thng v phn t ủu tiờn ca danh sỏch thỡ ta s ủc mt kiu danh sỏch mi gi l danh sỏch ni vũng ủn a b c d e Hỡnh 1.5 Danh sỏch ni vũng ủn i vi danh sỏch ni vũng ủn, ta ch cn bit mt nỳt bt k ca danh sỏch l ta cú th duyt ủc ht cỏc nỳt danh sỏch bng cỏch ủi theo hng liờn kt Chớnh vỡ lý ny, chốn/xúa vo danh sỏch ni vũng ủn, ta khụng phi x lý cỏc trng hp riờng nỳt ủng ủu danh sỏch Mc dự vy, danh sỏch ni vũng ủn cn thi gian trung bỡnh ò{J{ ủ thc hin thao tỏc chốn/xúa vỡ vic xỏc ủnh nỳt ủng lin trc mt nỳt cho trc cng gp tr ngi nh vi danh sỏch ni ủn 12 1.6 Biu din danh sỏch bng danh sỏch ni vũng kộp Danh sỏch ni vũng ủn ch cho ta duyt cỏc nỳt ca danh sỏch theo mt chiu, nu ci ủt bng danh sỏch ni vũng kộp thỡ ta cú th duyt cỏc nỳt ca danh sỏch c theo chiu ngc li na Danh sỏch ni vũng kộp cú th to thnh t danh sỏch ni kộp nu ta cho trng JJ ca nỳt JJ tr ti nỳt HIJ cũn trng J ca nỳt IJ thỡ tr ti nỳt JJ Tng t nh danh sỏch ni kộp, danh sỏch ni vũng kộp cho phộp thao tỏc chốn/xúa phn t cú th thc hin thi gian ò{{ a b c d e Hỡnh 1.6 Danh sỏch ni vũng kộp 1.7 Biu din danh sỏch bng cõy Cú nhiu thao tỏc trờn danh sỏch, nhng nhng thao tỏc ph bin nht l truy cp phn t, chốn v xúa phn t Ta ủó kho sỏt cỏch ci ủt danh sỏch bng mng hoc danh sỏch liờn kt, nu nh mng cho phộp thao tỏc truy cp ngu nhiờn tt hn danh sỏch liờn kt, thỡ thao tỏc chốn/xúa phn t trờn mng li mt khỏ nhiu thi gian Di ủõy l bng so sỏnh thi gian thc hin cỏc thao tỏc trờn danh sỏch Phng phỏp Truy cp ngu nhiờn Chốn Xúa Mng {{ {J{ {J{ Danh sỏch ni ủn {J{ {J{ {J{ Danh sỏch ni kộp {J{ {{ {{ Danh sỏch ni vũng ủn {{ {J{ {J{ Danh sỏch ni vũng kộp {J{ {{ {{ Cõy l mt kiu d liu tru tng m mt s trng hp cú th giỏn tip dựng ủ biu din danh sỏch Vi mt cỏch ủỏnh s th t cho cỏc nỳt ca cõy (duyt theo th t gia), mi phộp truy cp ngu nhiờn, chốn, xúa phn t trờn 13 danh sỏch cú th thc hin thi gian { J{ Chỳng ta s tip tc ch ủ ny mt bi riờng Bi 1.1 Vit chng trỡnh thc hin cỏc phộp chốn, xúa, v tỡm kim mt phn t danh sỏch cỏc s nguyờn ủó sp xp theo th t tng dn biu din bi: Mng Danh sỏch ni ủn Danh sỏch ni kộp 1.2 Vit chng trỡnh ni hai danh sỏch s nguyờn ủó sp xp, tng quỏt hn, vit chng trỡnh ni danh sỏch s nguyờn ủó sp xp ủ ủc mt danh sỏch gm tt c cỏc phn t 1.3 Gi s chỳng ta biu din mt thc J{{ I# - I$ - I , ủú I# I$ 2 I di dng mt danh sỏch ni ủn m nỳt th ca danh sỏch cha h s I , s m I v tr ti nỳt k tip (nỳt - ) Hóy tỡm thut toỏn cng v nhõn hai thc theo cỏc biu din ny 1.4 Mt s nh phõn I I # I" , ủú I { { cú giỏ tr bng (" I Ngi ta biu din s nh phõn ny bng mt danh sỏch ni ủn gm J nỳt, cú nỳt ủu danh sỏch cha giỏ tr I , mi nỳt danh sỏch cha mt ch s nh phõn I v tr ti nỳt k tip l nỳt cha ch s nh phõn I # Hóy lp chng trỡnh thc hin phộp toỏn cng trờn s nh phõn ủó cho v biu din nh phõn ca kt qu Gi ý: S dng phộp ủ quy Ngn xp v hng ủi Ngn xp v hng ủi l hai kiu d liu tru tng rt quan trng v ủc s dng nhiu thit k thut toỏn V bn cht, ngn xp v hng ủi l danh sỏch tc l mt hp cỏc phn t cựng kiu cú tớnh th t 14 Trong phn ny chỳng ta s tỡm hiu hot ủng ca ngn xp v hng ủi v cỏch ci ủt chỳng bng cỏc cu trỳc d liu Tng t nh danh sỏch, ta gi kiu d liu ca cỏc phn t s cha ngn xp v hng ủi l J Khi ci ủt chng trỡnh c th, kiu J cú th l kiu s nguyờn, s thc, ký t, hay bt k kiu d liu no ủc chng trỡnh dch chp nhn 2.1 Ngn xp Ngn xp (Stack) l mt kiu danh sỏch m vic b sung mt phn t v loi b mt phn t ủc thc hin cui danh sỏch Cú th hỡnh dung ngn xp nh mt chng ủa, no ủc ủt vo chng sau cựng s nm trờn tt c cỏc khỏc v s ủc ly ủu tiờn Vỡ nguyờn tc vo sau trc, ngn xp cũn cú tờn gi l danh sỏch kiu LIFO (Last In First Out) V trớ cui danh sỏch ủc gi l ủnh (top) ca ngn xp i vi ngn xp cú sỏu thao tỏc c bn: HJ: Khi to mt ngn xp rng HJJ: Cho bin ngn xp cú rng khụng? HJ: Cho bit ngn xp cú ủy khụng? : c giỏ tr phn t ủnh ngn xp J: y mt phn t vo ngn xp JJ: Ly mt phn t t ngn xp a) Bi u di n ng n x p b ng m ng Cỏch biu din ngn xp bng mng cn cú mt mng HJ ủ lu cỏc phn t ngn xp v mt bin nguyờn JJ ủ lu ch s ca phn t ti ủnh ngn xp Vớ d: const max = ; //Dung lng cc ủi ca ngn xp type TStack = record items: array[1 max] of TElement; top: Integer; end; var Stack: TStack; Sỏu thao tỏc c bn ca ngn xp cú th vit nh sau: 15 //Khi to ngn xp rng procedure Init; begin Stack.top := 0; end; //Hm kim tra ngn xp cú rng khụng? function IsEmpty: Boolean; begin Result := Stack.top = 0; end; //Hm kim tra ngn xp cú ủy khụng? function IsFull: Boolean; begin Result := Stack.top = max; end; //c giỏ tr phn t ủnh ngn xp function Get: TElement; begin if IsEmpty then Error "Stack is Empty" //Bỏo li ngn xp rng else with Stack Result := items[top]; //Tr v phn t ủnh ngn xp end; //y mt phn t x vo ngn xp procedure Push(const x: TElement); begin if IsFull then Error "Stack is Full" //Bỏo li ngn xp ủy else with Stack begin top := top + 1; //Tng ch s ủnh Stack items[top] := x; //t x vo v trớ ủnh Stack end; end; //Ly mt phn t ngn xp function Pop: TElement; begin 16 if IsEmpty then Error "Stack is Empty" //Bỏo li ngn xp rng else with Stack begin Result := items[top]; //Tr v phn t ủnh ngn xp top := top - 1; //Gim ch s ủnh ngn xp end; end; b) Bi u di n ng n x p b ng danh sỏch n i n ki u LIFO Ta s trỡnh by cỏch ci ủt ngn xp bng danh sỏch ni ủn cỏc bin ủng v tr Trong cỏch ci ủt ny, ngn xp s b ủy nu nh vựng khụng gian nh dựng cho cỏc bin ủng khụng cũn ủ ủ thờm mt phn t mi Tuy nhiờn, vic kim tra ủiu ny ph thuc vo mỏy tớnh, chng trỡnh dch v ngụn ng lp trỡnh Mt khỏc, khụng gian b nh dựng cho cỏc bin ủng thng rt ln nờn ta s khụng vit mó cho hm HJ: Kim tra ngn xp trn Cỏc khai bỏo d liu: type PNode = ^TNode; //Kiu tr liờn kt gia cỏc nỳt TNode = record //Kiu d liu cho mt nỳt info: TElement; link: PNode; end; var top: PNode; //Con tr ti phn t ủnh ngn xp Cỏc thao tỏc trờn ngn xp: //Khi to ngn xp rng procedure Init; begin top := nil; end; //Kim tra ngn xp cú rng khụng function IsEmpty: Boolean; begin Result := top = nil; end; 17 //c giỏ tr phn t ủnh ngn xp function Get: TElement; begin if IsEmpty then Error "Stack is Empty" //Bỏo li ngn xp rng else Result := top^.info; end; //y mt phn t x vo ngn xp procedure Push(const x: TElement); var p: PNode; begin New(p); //To nỳt mi p^.info := x; p^.link := top; //Ni vo danh sỏch liờn kt top := p; //Dch tr ủnh ngn xp end; //Ly mt phn t ngn xp function Pop: TElement; var p: PNode; begin if IsEmpty then Error "Stack is Empty" //Bỏo li ngn xp rng else begin Result := top^.info; //Ly phn t ti tr top p := top^.link; Dispose(top); //Gii phúng b nh top := P; //Dch tr ủnh ngn xp end; end; 2.2 Hng ủi Hng ủi (Queue) l mt kiu danh sỏch m vic b sung mt phn t ủc thc hin cui danh sỏch v vic loi b mt phn t ủc thc hin ủu danh sỏch 18 Khi ci ủt hng ủi, cú hai v trớ quan trng l v trớ ủu danh sỏch (JJJ), ni cỏc phn t ủc ly ra, v v trớ cui danh sỏch (JIJ), ni phn t cui cựng ủc vo Cú th hỡnh dung hng ủi nh mt ủon ngi xp hng mua vộ: Ngi no xp hng trc s ủc mua vộ trc Vỡ nguyờn tc vo trc trc, hng ủi cũn cú tờn gi l danh sỏch kiu FIFO (First In First Out) Tng t nh ngn xp, cú sỏu thao tỏc c bn trờn hng ủi: HJ: Khi to mt hng ủi rng HJJ: Cho bin hng ủi cú rng khụng? HJ: Cho bit hng ủi cú ủy khụng? : c giỏ tr phn t ủu hng ủi J: y mt phn t vo hng ủi JJ: Ly mt phn t t hng ủi a) Bi u di n hng i b ng m ng Ta cú th biu din hng ủi bng mt mng J ủ lu cỏc phn t hng ủi, mt bin nguyờfJJJ ủ lu ch s phn t ủu hng ủi v mt bin nguyờn JIJ ủ lu ch s phn t cui hng ủi Ch mt phn ca mng J t v trớ JJJ ti JIJ ủc s dng lu tr cỏc phn t hng ủi Vớ d: const max = ; //Dung lng cc ủi type TQueue = record items: array[1 max] of TElement; front, rear: Integer; end; var Queue: TQueue; Sỏu thao tỏc c bn trờn hng ủi cú th vit nh sau: //Khi to hng ủi rng procedure Init; begin Queue.front := 1; Queue.rear := 0; end; //Kim tra hng ủi cú rng khụng 19 function IsEmpty: Boolean; begin Result := Queue.front > Queue.rear; end; //Kim tra hng ủi cú ủy khụng function IsFull: Boolean; begin Result := Queue.rear = max; end; //c giỏ tr phn t ủu hng ủi function Get: TElement; begin if IsEmpty then Error "Queue is Empty" //Bỏo li hng ủi rng else with Queue Result := items[front]; end; //y mt phn t x vo hng ủi procedure Push(const x: TElement); begin if IsFull then Error "Queue is Full" //Bỏo li hng ủi ủy else with Queue begin rear := rear + 1; items[rear] := x; end; end; //Ly mt phn t hng ủi function Pop: TElement; begin if IsEmpty then Error "Queue is Empty" //Bỏo li hng ủi rng else with Queue begin Result := items[front]; 20 [...]... chứa liên kết (con trỏ) tới nút kế tiếp, tức là chứa một thông tin ñủ ñể biết nút kế tiếp nút ñó là nút nào, trong trường hợp nút ñứng cuối cùng trong danh sách (không có nút kế tiếp), trường liên kết này ñược gán một giá trị ñặc biệt (chẳng hạn con trỏ J˩ˬ) Trường JJ˥˰ chứa liên kết (con trỏ) tới nút liền trước, tức là chứa một thông tin ñủ ñể biết nút liền trước nút ñó là nút nào, trong trường hợp... ˩J˦J J˥˲ˮ trước), trường liên kết này ñược gán một giá trị ñặc biệt (chẳng hạn con trỏ J˩ˬ) type PNode = TNode = info: next, end; ^TNode; //Kiểu con trỏ tới một nút record; //Kiểu biến ñộng chứa thông tin trong một nút TElement; prev: PNode; Khác với danh sách nối ñơn, trong danh sách nối kép ta quan tâm tới hai nút: Nút ñầu tiên (˦˩JJˮ) và phần tử cuối cùng (ˬIJˮ) Có hai cách duyệt danh sách nối kép:

Ngày đăng: 15/11/2016, 20:58

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan