91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

c語言鏈表如何實現

發布時間:2022-03-21 16:14:25 來源:億速云 閱讀:127 作者:iii 欄目:大數據

這篇“c語言鏈表如何實現”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c語言鏈表如何實現”文章吧。

在計算機領域離不開算法和數據結構,而在數據結構中我們往往需要一些靈巧的結構去處理一些繁雜的數據,鏈表 就是這樣一種能穿針引線般的幫助我們去解決這種問題的數據結構。

它可以輔助組成其他數據結構比如 隊列

后續的比如二分搜索樹,平衡二叉樹,紅黑樹等動態數據結構都可以在理解鏈表的基礎上進行深入的學習。

如果你是一個計算機初學者,那么對于鏈表的學習可以幫助你理解 遞歸 ,因為后續的二叉樹中需要深入理解 遞歸

鏈表的定義

在《算法(第4版)》中,對鏈表的定義如下:

鏈表是一種遞歸的數據結構,它或者為空(null),或者是指向一個結點(node)的引用,該節點還有一個元素和一個指向另一條鏈表的引用。

鏈表的數據存儲在“節點”(Node)中:

c語言鏈表如何實現

c語言鏈表如何實現

resize 這個操作,而通過觀察鏈表的數據結構可以發現:

  • 最后一個節點的 next 指向 NULL ,這個節點是最后一個節點

  • 不像數組一下子必須new出來一片空間,無需考慮空間不夠用或浪費

  • 需要多少個數據,就能生成多少個節點掛接起來

也就是說:鏈表具有動態的能力,不需要去處理固定容量的問題。

正因為鏈表具備這種動態能力,那它也就缺失了高效的random access(隨機訪問)的能力。它無法與數組一樣,通過一個索引(index)直接獲取對應的元素。

因為在底層機制中數組開辟的空間在內存中是連續分布的,我們可以直接尋找索引對應的偏移,直接計算出數據所存儲的內存地址,直接用O(1)復雜度拿出。

鏈表靠next連接,每個節點存儲地址不同,我們只能通過next順藤摸瓜找到我們要找的元素。

鏈表的實現

c語言鏈表如何實現

這些就是鏈表的成員變量以及常用方法。

鏈表的添加元素操作

c語言鏈表如何實現

對于鏈表這種數據結構而言,在鏈表頭或者鏈尾添加元素都非常方便。

將元素插入鏈表的中間位置也十分簡單,不過得注意插入的順序

 Node insertNode = new Node(e);
 insertNode.next = prevNode.next;
 prevNode.next = insertNode;

c語言鏈表如何實現

對比兩組動畫后,聰明的你很快就會想:能否用同樣的代碼來處理鏈表的插入頭部和插入中間的操作呢?

答案是肯定的!只需要引入虛擬的頭結點的概念就行了。

c語言鏈表如何實現

那么就可以得到鏈表的添加元素的代碼:

c語言鏈表如何實現

鏈表的刪除元素操作

對于鏈表的刪除元素操作,需要找到目標節點的前驅節點。

prev.next = delNode.next
delNode.next = null

鏈表的查找元素操作

c語言鏈表如何實現

虛擬節點所在的位置索引可以視為 -1

c語言鏈表如何實現

鏈表的修改元素操作

基于上面 鏈表的查找元素操作 很容易寫出 鏈表的修改元素操作

c語言鏈表如何實現

鏈表的時間復雜度

接口說明復雜度
add(index, e)插入操作O(n)
remove(index, e)刪除操作O(n)
set(index, e)修改操作O(n)
get(index, e)查找操作O(n)
contains(index, e)也是查找操作O(n)

正因為鏈表沒有索引,因此鏈表喪失了像數組那樣快速訪問的能力,這也就讓鏈表的增刪改查全都是O(n)級別的。

以上就是關于“c語言鏈表如何實現”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平凉市| 绥棱县| 广平县| 宁陕县| 景东| 河津市| 太原市| 桐柏县| 松滋市| 讷河市| 上饶县| 开封市| 济南市| 大厂| 亳州市| 隆德县| 盱眙县| 吴堡县| 青阳县| 舞钢市| 乌兰县| 原阳县| 柳江县| 通江县| 图木舒克市| 景德镇市| 普定县| 宣威市| 怀远县| 阳信县| 定襄县| 靖边县| 汉川市| 浦城县| 齐齐哈尔市| 牙克石市| 三都| 黄冈市| 阜平县| 崇阳县| 昌平区|