鍊錶是最基本的線性資料結構之一,陣列也是一種線性結構,我們使用鍊錶的目的是為了克服陣列結構的一些弱點和侷限性。(陣列的弱點是定義後不能去修改大小,插入和刪除元素也很吃力,鍊錶可以解決這些問題)。
陣列在記憶體中的排列特徵是元素乙個緊挨著乙個排列 ,優點是隨機訪問每個元素會很快,但大小不能擴張,插入刪除不方便。如果我們要在陣列中間插入乙個元素,需要移動很多元素。
下面看鍊錶:這裡講單鏈表:
對單鏈表而言它的每個單元都含有兩項資料,一項資料用來儲存元素本身,另乙個是指標,指標將指向與自己類似的另乙個物件,鍊錶的關鍵在於每個單元不用連續儲存,可以分布在記憶體中的任何位置,這樣記憶體分配就很靈活,新增單元時不需要與前乙個單元有什麼物理上的位置關係可以隨意分配 ,在這些單元中都存在著乙個指標,指向該單元的下乙個單元 ,這樣如果我們拿到了第乙個元素就可以順著找到所有的元素,其中最後乙個元素的下乙個指標是空指標 。
接下來在鍊錶中做插入:
這次我們就可以把新插入的元素放在記憶體中任何位置,然後通過修改指標關係把這些散落在記憶體中的各個單元串聯起來。這就是鍊錶的插入和刪除的方便性和優點。
所謂有優點就有缺點否則我們就沒必要使用陣列了,單鏈表的缺點是隨機訪問很慢,例如我們要訪問第三個元素,先要由head找第乙個元素,然後沿著第乙個元素找第二個,依次類推假如要找的是第1萬個元素顯然就要經過漫長的尋找過程,而陣列的長處正是鍊錶的短處。
有時候資料結構也未必要做到那麼純粹說這是乙個陣列那是乙個鏈結,我們可以靈活和綜合的去使用各個結構的優點,比如我們可以做這樣的結構,讓每個鍊錶的單元是乙個小型的陣列,例如我們用乙個陣列表達10萬資料,我們可以把每100或1000元素這樣的陣列做成乙個小單元然後用鍊錶串起來,那麼它就既有陣列的優點又具有鍊錶的優點,
資料結構經常是這樣靈活的混合的應用,這裡演示的僅僅是鍊錶的基本結構,在實際使用過程中它會有許多變種。
單鏈表的實現
include includetypedef struct node 定義鍊錶 snode snode creat 建立鍊錶的函式 q next null return head int length snode head 測鍊錶的結點數 return i void display snode he...
單鏈表的實現
單鏈表夜市線性表的一種表現形式,乙個表節點由乙個資料空間和乙個指標域組成。指標域記錄下乙個結點的位址。鍊錶在插入,刪除功能中效率高。但是讀取某個結點的時候需要順序讀取。效率不如順序儲存形式。下面是一些鍊錶實現的 鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h define...
單鏈表的實現
單鏈表是資料結構中重要並且基礎的一環,學習資料結構就需要知道單鏈表有的常用操作。1 單鏈表的頭插式建立 2 單鏈表的尾插式建立 3 單鏈表的長度計算 4 單鏈表的列印輸出 5 單鏈表的釋放操作 6 單鏈表是否為空判斷 7 單鏈表在指定index插入指定元素 8 單鏈表刪除指定index的節點 9 單...