演算法精解二十(C語言版)

2021-06-28 20:55:15 字數 1068 閱讀 2375

資料結構-鍊錶

鍊錶可以數是一種最為基礎的資料結構,鍊錶有一組元素以一種特定的順序組合或鏈結在一起,在維護資料的集合時很有用。這一點同我們常用到的陣列很相似。然而,鍊錶在很多情況下比陣列更有優勢。特別是在執行插入和刪除操作時鍊錶擁有更高的效率。鍊錶需要動態地開闢儲存空間,也就是儲存空間是在程式執行時分配的,由於在很多應用中資料的大小在編譯時不能確定,因此動態分配空間的特性也是鍊錶的乙個有點。

本章內容包括:

單鏈表最簡單的鍊錶。元素之間由乙個單獨的指標鏈結。這種結構的鍊錶允許從第乙個元素開始變數到最後乙個元素。

雙向鍊錶

這種形式的鍊錶元素之間通過兩個指標鏈結。雙向鍊錶可以正向遍歷,也可以反向遍歷。

循序鍊錶

這種形式的鍊錶最後乙個元素的指標指向鍊錶的首元素,而不是設定為null.這種結構的鍊錶允許迴圈遍歷。

一些鍊錶的應用包括:

郵件列表:

這種應用常在電子郵件程式中看到。因為無法**乙個郵件列表到底多長。可以發件人需要在傳送郵件之前先建立乙個位址鍊錶。

滾動列表

圖形使用者介面中常見能看到這種元件。通常在滾動列表中與每個條目相關的資料並不現實出來。一種管理這種「隱藏」資料的方式是維護乙個鍊錶,鍊錶中每個元素儲存乙個在滾動列表中出現的條目資料。

多項式計算

數學中的乙個重要組成部分。但對於大多數程式語言來說並沒有將其作為原生的資料型別加以支援。如果讓鍊錶中的每個元素儲存多項式中的一項。那麼鍊錶對於表示乙個多項式就是非常有用的。例如

記憶體管理(本章將會講到)

記憶體管理是作業系統中的一項重要的任務。作業系統必須決定如何為系統中執行的程序分配和**儲存空間。鍊錶能夠用來跟蹤可供分配的記憶體片段資訊。

lisp

在人工智慧領域中一種非常重要的程式語言。lisp是list processor的簡寫。在進行符號處理時大量使用鍊錶。

檔案的鏈式分配

為了消除磁碟上的外部碎片而採用的一種檔案分配方式,但只適合於順序訪問。檔案按照塊的方式進行組織,每一塊都包含乙個指向檔案下一塊資料的指標。

其他的資料結構

有一些資料結構的實現需要依賴鍊錶,它們是棧,佇列、集合、雜湊表和圖。這些資料結構都將在本書中出現。

演算法精解二十二(C語言版)

單鏈表的實現與分析 回顧一下鍊錶元素的組成 乙個資料成員和乙個指向鍊錶中下乙個元素的指標。結構 體listelmt表示鍊錶中的單個元素 見例項5 1 如你所料,這個結構體擁有兩個成員,就是前面介紹的資料成員和指標成員。結構體系list則表示鍊錶這種資料結構 見例項5 1 這個結構體由5個成員組成 s...

演算法精解二十五(C語言版)

雙向鍊錶介面的定義 描述初始化有引數list所指定的雙向鍊錶。該函式必須在雙向鍊錶做其他任何操作之前呼叫。當呼叫dist destroy時,這裡傳入的destroy引數提供了一種釋放動態分配空間的方法。它的工作方式同前面敘述的list destroy.對於雙向鍊錶,如果其中包含不需要手動釋放空間的資...

演算法精解二十七(C語言版)

迴圈鍊錶的介紹 迴圈鍊錶是另一種形式的鍊錶,它提供了更為靈活的遍歷鍊錶元素的能力。迴圈鍊錶可以單向的或雙向的,單區分乙個鍊錶是不是迴圈鍊錶只要看它有沒有尾部元素即可。在迴圈鍊錶中,最後乙個元素的next指標又回頭元素而不是設定為null。在雙向迴圈鍊錶中,頭元素的prev指標則指向最後乙個元素,這使...