鍊錶:鏈式儲存的線性表,簡稱鍊錶。鍊錶由多個鍊錶元素組成,這些元素稱為節點。結點之間通過邏輯連線,形成鏈式儲存結構。儲存結點的記憶體單元,可以是連續的也可以是不連續的。邏輯連線與物理儲存次序沒有關係。
鍊錶分為兩個域:
值域(資料域):用於存放結點的值
鏈域(指標域):用於存放下乙個結點的位址或位置
從記憶體角度出發: 鍊錶可分為 靜態鍊錶、動態鍊錶。
從鍊錶儲存方式的角度出發:鍊錶可分為 單鏈表、雙鏈表、以及迴圈鍊錶。
單鏈表:
單鏈表是一種順序儲存的結構。
有乙個頭結點,沒有值域,只有鏈域,專門存放第乙個結點的位址。
有乙個尾結點,有值域,也有鏈域,鏈域值始終為null。
所以,在單鏈表中為找第i個結點或資料元素,必須先找到第i - 1 結點或資料元素,而且必須知道頭結點,否者整個鍊錶無法訪問。
靜態鍊錶:
把線性表的元素存放在陣列中,這些元素可能在物理上是連續存放的,也有可能不是連續的,它們之間通過邏輯關係來連線,陣列單位存放鍊錶結點,結點的鏈域指向下乙個元素的位置,即下乙個元素所在的陣列單元的下標。顯然靜態鍊錶需要陣列來實現。
引出的問題:陣列的長度定義的問題,無法預支。
動態鍊錶:(實際當中用的最多)
改善了靜態鍊錶的缺點。它動態的為節點分配儲存單元。當有節點插入時,系統動態的為結點分配空間。在結點刪除時,應該及時釋放相應的儲存單元,以防止記憶體洩露。
迴圈鍊錶:
迴圈鍊錶,類似於單鏈表,也是一種鏈式儲存結構,迴圈鍊錶由單鏈表演化過來。單鏈表的最後乙個結點的鏈域指向null,而迴圈鍊錶的建立,不要專門的頭結點,讓最後乙個結點的鏈域指向鍊錶結點。
(迴圈鍊錶與單鏈表的區別)
區別一、鍊錶的建立。單鏈表需要建立乙個頭結點,專門存放第乙個結點的位址。單鏈表的鏈域指向null。而迴圈鍊錶的建立,不要專門的頭結點,讓最後乙個結點的鏈域指向鍊錶的頭結點。
區別二、煉表表尾的判斷。單鏈表判斷結點是否為表尾結點,只需判斷結點的鏈域值是否是null。如果是,則為尾結點;否則不是。而迴圈鏈表盤判斷是否為尾結點,則是判斷該節點的鏈域是不是指向鍊錶的頭結點。
雙鏈表:
雙鏈表也是基於單鏈表的,單鏈表是單向的,有乙個頭結點,乙個尾結點,要訪問任何結點,都必須知道頭結點,不能逆著進行。而雙鏈表則是新增了乙個鏈域。通過兩個鏈域,分別指向結點的前結點和後結點。這樣的話,可以通過雙鏈表的任何結點,訪問到它的前結點和後結點。但是雙鏈表還是不夠靈活,在實際程式設計中比較常用的是迴圈雙鏈表。但迴圈雙鏈表使用較為麻煩。
單鏈表:在每個節點中除了包含資料域外只設定乙個指標域,用來指向後繼節點,這樣的鍊錶稱為單鏈表。
為了方便刪除和插入運算,每個鍊錶帶有乙個頭結點,沒有資料域只有指標域,通過頭結點的指標唯一識別該鍊錶。
單鏈表的儲存結構
typedef struct lnode
linklist;
通過乙個含有n個資料的陣列來建立單鏈表
(1)從乙個空表開始,讀取字元陣列中的字元,生成新節點
(2)將讀取的資料存放到新節點的資料域中,然後將新節點插入到當前鍊錶的表頭上,直至結束。也就是說最後插入的節點成為首節點。
//頭插法
void createlistf(linklist *&l,elemtype a,int n)
釋放鍊錶l占用的記憶體空間,即逐一釋放全部節點的空間
//銷毀單鏈表
void destroylist(sqlist *&l)
free(pre);
}判斷頭結點指標域即可
//判斷空表
bool listempty(linklist *l)
返回單鏈表節點個數
//求鍊錶長度
int listlength(linklist *&l)
return n;
}//輸出鍊錶
void displist(linklist *&l)
if(p==null)
else }
bool listinsert(linklist *&l,int i,elemtype e)
{ int j=0;
linklist *p=l.*s;
while(j
//刪除元素
bool listdelete(linklist *&l,int i,elemtype &e)
{ int j=0;
linklist *p=l,*q;
while(j
順序表及鍊錶
順序表 將表中元素乙個接乙個的存入一組連續的儲存單元中,這種儲存結構是順序結構。利用陣列單元的物理位置上的 優點 儲存空間連續,允許元素隨機訪問 缺點 長度固定,在分配記憶體之前要先確定好陣列長度,致使可能造成空間浪費 單鏈表 用一組任意的儲存單元存放線性表的元素,只包含指向下乙個節點的指標,只能單...
順序表與鍊錶
單向鍊錶 雙向鍊錶 迴圈鍊錶 插入刪除過程要注意,初始指標應指向鍊錶尾節點 若當插入到頭前時,找不到前驅節點 當在更新尾節點時需要更新頭指標 鍊錶排序使用氣泡排序最為適合 資料結構 結構定義 結構操作 include include include include define malloc2 my...
順序表和煉表
定義 線性表是由n個具有相同特性的資料元素組成的有限序列,表中每個元素具有相同元素。邏輯上為連續的線性結構。常見的線性表 順序表,鍊錶 棧 佇列 字串 線性表根據物理儲存方式分為 順序表和煉表 線性表在邏輯上是線性結構,在物理上並不是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。動...