數(shù)據(jù)結(jié)構(gòu)中鏈表及常見操作_第1頁
已閱讀1頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、鏈表鏈表1定義定義鏈表(Linkedlist)是一種常見的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),是一種線性表,但是并不會按線性的順序存儲數(shù)據(jù),而是在每一個節(jié)點(diǎn)里存到下一個節(jié)點(diǎn)的指針(Pointer)。由于不必須按順序存儲,鏈表在插入的時候可以達(dá)到O(1)的復(fù)雜度,比另一種線性表順序表快得多,但是查找一個節(jié)點(diǎn)或者訪問特定編號的節(jié)點(diǎn)則需要O(n)的時間,而順序表相應(yīng)的時間復(fù)雜度分別是O(logn)和O(1)。使用鏈表結(jié)構(gòu)可以克服數(shù)組鏈表需要預(yù)先知道數(shù)據(jù)大小的缺點(diǎn),

2、鏈表結(jié)構(gòu)可以充分利用計(jì)算機(jī)內(nèi)存空間,實(shí)現(xiàn)靈活的內(nèi)存動態(tài)管理。但是鏈表失去了數(shù)組隨機(jī)讀取的優(yōu)點(diǎn),同時鏈表由于增加了結(jié)點(diǎn)的指針域,空間開銷比較大。在計(jì)算機(jī)科學(xué)中,鏈表作為一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)可以用來生成其它類型的數(shù)據(jù)結(jié)構(gòu)。鏈表通常由一連串節(jié)點(diǎn)組成,每個節(jié)點(diǎn)包含任意的實(shí)例數(shù)據(jù)(datafields)和一或兩個用來指向明上一個或下一個節(jié)點(diǎn)的位置的鏈接(“l(fā)inks“)。鏈表最明顯的好處就是,常規(guī)數(shù)組排列關(guān)聯(lián)項(xiàng)目的方式可能不同于這些數(shù)據(jù)項(xiàng)目在記憶體

3、或磁盤上順序,數(shù)據(jù)的訪問往往要在不同的排列順序中轉(zhuǎn)換。而鏈表是一種自我指示數(shù)據(jù)類型,因?yàn)樗赶蛄硪粋€相同類型的數(shù)據(jù)的指針(鏈接)。鏈表允許插入和移除表上任意位置上的節(jié)點(diǎn),但是不允許隨機(jī)存取。鏈表有很多種不同的類型:單向鏈表,雙向鏈表以及循環(huán)鏈表。2結(jié)構(gòu)結(jié)構(gòu)2.12.1單向鏈表單向鏈表鏈表中最簡單的一種是單向鏈表,它包含兩個域,一個信息域和一個指針域。這個鏈接指向列表中的下一個節(jié)點(diǎn),而最后一個節(jié)點(diǎn)則指向一個空值。一個單向鏈表的節(jié)點(diǎn)被分

4、成兩個部分。第一個部分保存或者顯示關(guān)于節(jié)點(diǎn)的信息,第二個部分存儲下一個節(jié)點(diǎn)的地址。單向鏈表只可向一個方向遍歷。鏈表最基本的結(jié)構(gòu)是在每個節(jié)點(diǎn)保存數(shù)據(jù)和到下一個節(jié)點(diǎn)的地址,在最后一個節(jié)點(diǎn)保存一個特殊的結(jié)束標(biāo)記,另外在一個固定的位置保存指向第一個節(jié)點(diǎn)的指針,有的時候也會同時儲存指向最后一個節(jié)點(diǎn)的指針。一般查找一個節(jié)點(diǎn)的時候需要從第一個節(jié)點(diǎn)開始每次訪問下一個節(jié)點(diǎn),一直訪問到需要的位置。2.22.2雙向鏈表雙向鏈表每個節(jié)點(diǎn)有兩個連接:一個指向前一

5、個節(jié)點(diǎn),(當(dāng)此“連接”為第一個“連接”時,指向空值或者空列表);而另一個指向下一個節(jié)點(diǎn),(當(dāng)此“連接”為最后一個“連接”時,指向空值或者空列表)雙向鏈表可以從任何一個節(jié)點(diǎn)訪問前一個節(jié)點(diǎn),當(dāng)然也可以訪問后一個節(jié)點(diǎn),以至整個鏈表。一般是在需要大批量的另外儲存數(shù)據(jù)在鏈表中的位置的時候用。2.32.3循環(huán)鏈表循環(huán)鏈表在一個循環(huán)鏈表中首節(jié)點(diǎn)和末節(jié)點(diǎn)被連接在一起。這種方式在單向和雙向鏈表中皆可實(shí)現(xiàn)。要轉(zhuǎn)換一個循環(huán)鏈表,你開始于任意一個節(jié)點(diǎn)然后沿著列

6、表的任一方向直到返回開始的節(jié)點(diǎn)。指向整個列表的指針可以被稱作訪問指針。附錄附錄:(鏈表的部分常見操作)1單向鏈表單向鏈表線性表的單鏈表存儲結(jié)構(gòu)typedefstructLNodeElemTypedatastructLNodenextLNodeLinkList帶有頭結(jié)點(diǎn)的單鏈表的基本操作(12個)voidInitList(LinkListL)操作結(jié)果:構(gòu)造一個空的線性表LL=(LinkList)malloc(sizeof(structLN

7、ode))產(chǎn)生頭結(jié)點(diǎn),并使L指向此頭結(jié)點(diǎn)if(!L)存儲分配失敗exit(OVERFLOW)(L)next=NULL指針域?yàn)榭誺oidDestroyList(LinkListL)初始條件:線性表L已存在。操作結(jié)果:銷毀線性表LLinkListqwhile(L)q=(L)nextfree(L)L=qvoidClearList(LinkListL)不改變L初始條件:線性表L已存在。操作結(jié)果:將L重置為空表LinkListpqp=Lnextp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論