Đang tải... (xem toàn văn)
danh sách liên kết Trong bài này chúng ta sẽ tìm hiểu 2 phần chính: Danh sách liên kết cài đặt bằng mảng Danh sách liên kết cài đặt bằng con trỏ + Danh sách liên kết đơn + Danh sách liên kết kép Trong mỗi phần chúng ta sẽ tìm hiểu các vấn đề cơ bản sau: Cài đặt danh sách (Khai báo) Khởi tạo danh sách rỗng Kiểm tra danh sách rỗng (danh sách đầy khi cài bằng mảng) Chèn phần tử vào đầu danh sách Chèn phần tử vào vị trí thứ k trong danh sách 1 Advanced nguyenvanquan7826
. 08:42PM Ngàythamgia: Bàiviết: Thanks: Thanked:714in426posts Apr2012 1,358 357 [C/ C++]Bài 10 – Danh sách liên kết Bài 10 – Danh sách liên kết Trongbàinàychúngtasẽtìmhiểu2 phầnchính: Danh sách liên kết càiđặt bằngmảng Danh sách liên kết càiđặt bằngcontrỏ +/ Danh sách liên kết đơn +/ Danh sách liên kết kép Trongmỗiphầnchúngtasẽtìmhiểucác vấnđềcơbảnsau: Càiđặt danh sách (Khaibáo) Khởitạo danh sách rỗng Kiểmtra danh sách rỗng (danh sách đầykhicàibằng mảng) Chènphầntửvàođầu danh sách Chènphầntửvàovịtríthứk trong danh sách #1 Advanced nguyenvanquan7826 Nhập danh sách Xuất danh sách Tìm1phầntửtrong danh sách Xóaphầntửđầutiêntrong danh sách Xóaphầntửthứktrong danh sách XóaphầntửcónộidungX trong danh sách 1/ Danh sách liên kết càibằngmảng Loại danh sách nàythườngđượcgọilà danh sách kếtiếp.Bâygiờtasẽlàmviệc vớicácvấnđề: 1.1/Càiđặt(khaibáo) danh sách Đểkhaibáo danh sách nàytacầncó1 mảngcósốphầntửtốiđalàNcókiểu dữliệulàitem(itemnàylàkiểudữliệu tổngquan,khilàmnósẽlàkiểuint,float haykiểucấutrúcsinhviên).Cầnthêm1 biếnsizethểhiệnsốphầntửhiệncócủa danh sách. Cụthểnhưsau: 1.2/Khởitạo danh sách rỗng Danh sách củatarỗngkhisốphầntử trong danh sách bằng0.Vìvậychỉcần khaibáotrườngsizecủatabằng0là được. 1.3/Kiểmtra danh sách rỗng, danh sách đầy Đểkiểmtra danh sách rỗnghayđầyta chỉviệcxemsốphầntửcủa danh sách cóbằng0haykhông(rỗng)vàcóbằng Nhaykhông(đầy). 1.4/Chènphầntửvàovịtríktrong danh sách Trướckhichènphầntửvàotrong danh sách chúngtanênxâydựng1hàmtrả vềdữliệu(nhậpvàodữliệu)củaphần tửcầnchènđó. Sauđótiếnhànhchèn: Trongquátrìnhchènchúngtacầnkiểm traxem danh sách đầychưa,nhậpvịtrí kcầnchènvàkiểmtranó,nếuphùhợp (0<k<=N)thìsẽtiếnhànhchèn. Đểchènđượcphầntửxvàovịtríktrong danh sách (trongmảng)tacầndùng1 vòngforđểdichuyểncácphầntửtừvị tríkvềphíacuốimảng,sauđóchènx vàovịtrík.Cuốicùngtatăngsizelên1 đơnvị. 1.5/Nhập danh sách Nhậpnhưbìnhthườngvớimảng 1.6/Tìmphầntửxtrong danh sách Taduyệttừđầuđếncuối danh sách nếu cógiátrịxthìđưaravịtrícủanó. 1.7/Xóaphầntửthứktrong danh sách Trướckhixóataphảikiểmtraxem danh sách córỗngkhông.Nếukhôngrỗngta nhậpvàovịtrícầnxóavàkiểmtra(phù hợpnếu0<k<=N). Tadùngvòngforchạyđếnvịtríthứk, sauđódồncácphầntửtừk+1vềtrước 1đơnvị.tuynhiêntacầnlưulạigiátrị củaphầntửxóatrướckhixóađểgiữlại thôngtinnếutacầndùngđếnnó.Cuối cùnglàgiảmsizexuống1đơnvị. 1.8/Xóaphầntửcónộidungxtrong danh sách Đểxóaphầntửcónộidungxtrong danh sách tatiếnhànhtìmphầntửxtrước bằnghàmsearchsauđógiátrịtrảvềlà vịtrícủax,tatiếptụcsửdụnghàm del_kđểxóaphầntửởvịtrímàtatìm được. Vậylàchúngtađãxâydựngxongcác thaotáccơbảntrên danh sách càiđặt bằngmảng.Cácbạnghépcáchàmvào cùngvớihàmmain()gọicáchàmtrênlà ok. Cácbạncóthểthamkhảotạiđây: http://ideone.com/VyjxYo 2. Danh sách liên kết đơn(gọinhanh là danh sách liên kết DSLK) Trongcácbàitrướcmìnhviếtcodetấtcả đềulàchuẩnC,nhưngtừbâygiờmình sẽxenlẫnchútcấutrúccủaC++trong đó. MộtsốvấnđềtacầnlàmtrongDSLK: 2.1Giốngnhưtrongphần danh sách liên kết xâydựngbởimảng,bâygiờ tasẽcàiđặt danh sách: Danh sách liên kết cóthểđượcmôtả nhưsau: 2.2Khởitạo danh sách rỗng Trongcácbàitrướcđểcóthểthayđổi đượcgiátrịcủađốimàtatruyềnvào hàmtathưòngdùngbiếncontrỏ. . Cácbạncóthểthamkhảocodehoàn chỉnhtạiđây:http://ideone.com/BMPAja 3. Danh sách liên kết kép Danh sách liên kết képcũnglàmộtdạng danh sách liên kết nhưngmỗiphầntử liên kết vớiphầntửđứngtrướcvàsaunó trong danh sách 3.1Càiđặt danh sách: Cấutrúccủa1Nodetrong danh sách liên kết képtươngđốigiốngvớiDSLKD nhưngcóthêmmộtcontrỏtrỏvềNode trướcnó CấutrúccủaDSLKKkhôngnhưDSLKD có1ContrỏtrỏđếnđầuDS,nhưng DSLKKngoàicontrỏtrỏđếnđầu danh sách còncóthêm1contrỏtrỏđếnNode cuốicủa danh sách 3.2Mộtsốthaotácchính 3.3Khởitạovàkiểmtrarỗng Khởitạotacho2contrỏđầuvàcuốitrỏ vêNULL,Khikiểmtrarỗngthichỉcần xemcontrỏđầucótrỏvềNULLkhônglà đủ 3.4Độdài danh sách: ĐểtìmđộdàicủaDSLKKtahoàntoàncó thểlàmgiốngnhưDSLKD,tứcdùngcon trỏduyệttừđầuđếncuối,nhưngtrong DSLKKtacóthểdùng2contrỏởđầuvà cuốiđểđếm 3.5Tạo1NodePchứathôngtin 3.6Chènphầntửvàovịtríđầutiên: Trướckhichènvàođầu danh sách cần kiểmtraxem danh sách rỗnghaykhông. Nếu danh sách rỗngtachoHeadvàTail đềutrỏđếnP.Nếukhôngrỗngthựchiện chèn. 3.7Chènphầntửvàocuối danh sách tươngtựnhưđầu danh sách 3.8Chènphầntửvàovịtrík Trướckhichènvàovịtríkcầnkiểmtra vịtríkcóphùhợp,cóphảiđầu danh sách haycuối danh sách. Nếuchènvào giữa danh sách tathựchiệntheo4bước 3.9Xóaphầntửđầu,cuối danh sách 3 .10 Xóaphầntửởvịtrík Trướckhixóaởvịtríkcầnkiểmtravịtrí kcóphùhợp,cóphảiđầu danh sách hay cuối danh sách hayởgiữa 3.11TìmphầntửxtrongDS 3.12XóaphầntửxtrongDS codethamkhảo: http://ideone.com/wCCjIH Vậylàphầnnàycoinhưchúngtađatìm hiểuxong danh sách liên kết: (DSLK mảng,DSLKđơn,DSLKkép). Nguồn:http://svictu.com Xemcácchủđềkháccùngchuyên mụcVSNet: ĐồhọatrongDevC++đơngiản Update LậptrìnhCvớibảngmàutrong linux –. 08:42PM Ngàythamgia: Bàiviết: Thanks: Thanked:714in426posts Apr2012 1,358 357 [C/ C++]Bài 10 – Danh sách liên kết Bài 10 – Danh sách liên kết Trongbàinàychúngtasẽtìmhiểu2 phầnchính: Danh sách liên kết càiđặt bằngmảng Danh sách liên kết càiđặt bằngcontrỏ +/ Danh sách liên kết đơn +/ Danh sách liên kết kép Trongmỗiphầnchúngtasẽtìmhiểucác vấnđềcơbảnsau: Càiđặt danh sách (Khaibáo) Khởitạo danh sách rỗng Kiểmtra danh sách rỗng (danh sách đầykhicàibằng mảng) Chènphầntửvàođầu danh sách Chènphầntửvàovịtríthứk trong danh sách #1 Advanced nguyenvanquan7826 Nhập danh sách Xuất danh sách Tìm1phầntửtrong danh sách Xóaphầntửđầutiêntrong danh sách Xóaphầntửthứktrong danh sách XóaphầntửcónộidungX trong danh sách 1/ Danh sách liên kết càibằngmảng Loại danh sách nàythườngđượcgọilà danh sách kếtiếp.Bâygiờtasẽlàmviệc vớicácvấnđề: 1.1/Càiđặt(khaibáo) danh sách Đểkhaibáo danh sách nàytacầncó1 mảngcósốphầntửtốiđalàNcókiểu dữliệulàitem(itemnàylàkiểudữliệu tổngquan,khilàmnósẽlàkiểuint,float haykiểucấutrúcsinhviên).Cầnthêm1 biếnsizethểhiệnsốphầntửhiệncócủa danh sách. Cụthểnhưsau: 1.2/Khởitạo danh sách rỗng Danh sách củatarỗngkhisốphầntử trong danh sách bằng0.Vìvậychỉcần khaibáotrườngsizecủatabằng0là được. 1.3/Kiểmtra danh sách rỗng, danh sách đầy Đểkiểmtra danh sách rỗnghayđầyta chỉviệcxemsốphầntửcủa danh sách cóbằng0haykhông(rỗng)vàcóbằng Nhaykhông(đầy). 1.4/Chènphầntửvàovịtríktrong danh sách Trướckhichènphầntửvàotrong danh sách chúngtanênxâydựng1hàmtrả vềdữliệu(nhậpvàodữliệu)củaphần tửcầnchènđó. Sauđótiếnhànhchèn: Trongquátrìnhchènchúngtacầnkiểm traxem danh sách đầychưa,nhậpvịtrí kcầnchènvàkiểmtranó,nếuphùhợp (0<k<=N)thìsẽtiếnhànhchèn. Đểchènđượcphầntửxvàovịtríktrong danh sách (trongmảng)tacầndùng1 vòngforđểdichuyểncácphầntửtừvị tríkvềphíacuốimảng,sauđóchènx vàovịtrík.Cuốicùngtatăngsizelên1 đơnvị. 1.5/Nhập danh sách Nhậpnhưbìnhthườngvớimảng 1.6/Tìmphầntửxtrong danh sách Taduyệttừđầuđếncuối danh sách nếu cógiátrịxthìđưaravịtrícủanó. 1.7/Xóaphầntửthứktrong danh sách Trướckhixóataphảikiểmtraxem danh sách córỗngkhông.Nếukhôngrỗngta nhậpvàovịtrícầnxóavàkiểmtra(phù hợpnếu0<k<=N). Tadùngvòngforchạyđếnvịtríthứk, sauđódồncácphầntửtừk+1vềtrước 1đơnvị.tuynhiêntacầnlưulạigiátrị củaphầntửxóatrướckhixóađểgiữlại thôngtinnếutacầndùngđếnnó.Cuối cùnglàgiảmsizexuống1đơnvị. 1.8/Xóaphầntửcónộidungxtrong danh sách Đểxóaphầntửcónộidungxtrong danh sách tatiếnhànhtìmphầntửxtrước bằnghàmsearchsauđógiátrịtrảvềlà vịtrícủax,tatiếptụcsửdụnghàm del_kđểxóaphầntửởvịtrímàtatìm được. Vậylàchúngtađãxâydựngxongcác thaotáccơbảntrên danh sách càiđặt bằngmảng.Cácbạnghépcáchàmvào cùngvớihàmmain()gọicáchàmtrênlà ok. Cácbạncóthểthamkhảotạiđây: http://ideone.com/VyjxYo 2. Danh sách liên kết đơn(gọinhanh là danh sách liên kết DSLK) Trongcácbàitrướcmìnhviếtcodetấtcả đềulàchuẩnC,nhưngtừbâygiờmình sẽxenlẫnchútcấutrúccủaC++trong đó. MộtsốvấnđềtacầnlàmtrongDSLK: 2.1Giốngnhưtrongphần danh sách liên kết xâydựngbởimảng,bâygiờ tasẽcàiđặt danh sách: Danh sách liên kết cóthểđượcmôtả nhưsau: 2.2Khởitạo danh sách rỗng Trongcácbàitrướcđểcóthểthayđổi đượcgiátrịcủađốimàtatruyềnvào hàmtathưòngdùngbiếncontrỏ