一.鍊錶的概念
在陣列列表的文章中我們已經提到了鍊錶,今天來講一下鍊錶。
首先再回顧一下鍊錶列表與陣列列表的關係。
鍊錶列表:鍊錶是一塊不連續的動態空間,長度可變;鍊錶需要按順序檢索節點,效率低;鍊錶的優點是可以快速插入和刪除節點,大小動態分配,長度不固定。鍊錶不存在越界問題。
陣列列表:陣列是一塊連續的空間,宣告時長度就需要固定。陣列的優點是速度快,資料操作直接使用偏移位址。陣列有越界問題。
從以上看到兩者都有優缺點。
二.如何實現鍊錶
鍊錶的實現和列表的實現顯然是不同的,列表的實現我們用到了陣列,而在鍊錶的實現中,我們不會用到陣列來儲存資料,取而代之的,我們用乙個「節點」類來儲存我們的資料。
現在我們先給出乙個大概的圖形,便於讀者理解
(注:本篇文章中所講的鍊錶是單向鍊錶,我們還可以編寫雙向鍊錶)
在圖中,乙個鍊錶中有很多的節點(如箭頭所示),在每乙個節點中有兩個」框框「,左邊存放資料,右邊用於指向下乙個節點。
現在我們來看一下定義節點類的**:
如上圖**所示,根據我們最初給的,我們現在就應該在節點類中定義兩個屬性:
1.存放的資料及其型別(**中定義了泛型e)
2.下乙個節點
節點類中還有三個構造方法:
乙個不傳遞任何引數,乙個只傳遞資料,還有乙個傳入下乙個節點和資料。
編寫好了節點類,接下來開始編寫我們的鍊錶列表類,鍊錶列表中所應該有的方法無非就那麼幾個,增、刪、改、查。那麼我們應該在鍊錶列表內定義什麼屬性呢?
現在我們來看**圖:
即我們需要在鍊錶類裡面定義三個屬性。
接下來就是具體的方法了,具體方法見下**圖:
這樣我們的鍊錶就能實現一些基本的功能了!(備註:作者所寫**並不是最完美的,**的精簡度沒有達到最大,但是容易理解,如果讀者有更好精簡又容易理解的**,望不吝賜教~)。
鍊錶的使用
資料儲存共有兩種形式,一種是連續的,比如說陣列,儲存時是連續的 還有一種是離散的,這就是鍊錶。鍊錶由一系列結點 鍊錶中每乙個元素稱為結點 組成,結點可以在執行時動態生成。每個結點包括兩個部分 乙個是儲存 資料元素 的資料域,另乙個是儲存下乙個結點位址的引用域。鍊錶又分為單鏈表,雙鏈表和迴圈鍊錶。我們...
鍊錶的使用
定義鍊錶 定義節點型別struct node 給鍊錶節點分配記憶體空間 建立鍊錶node create int array return head 查詢節點int search node head,int x return count 插入節點void insert node l,int posit...
鍊錶的基本使用一(構建鍊錶)
因為有不少朋友向我詢問鍊錶的一些事情,他們都在問鍊錶指標啥的寫起來都好麻煩的,有啥用呢。作為乙隻萌新就 些我的一些感覺吧 我一開始的時候也是比較排斥鍊錶的,因為這玩意一開始接觸真的感到太麻煩了,它做到的很多東西,陣列也都可以,為啥還要用這麼麻煩的方式呢。後來上企業課的時候,開始模擬寫軟體,就是乙個比...