複習 順序表 鍊錶

2021-08-21 02:23:30 字數 2215 閱讀 6746

鍊錶:鏈式儲存的線性表,簡稱鍊錶。鍊錶由多個鍊錶元素組成,這些元素稱為節點。結點之間通過邏輯連線,形成鏈式儲存結構。儲存結點的記憶體單元,可以是連續的也可以是不連續的。邏輯連線與物理儲存次序沒有關係。

鍊錶分為兩個域:

值域(資料域):用於存放結點的值

鏈域(指標域):用於存放下乙個結點的位址或位置

從記憶體角度出發: 鍊錶可分為 靜態鍊錶、動態鍊錶。

從鍊錶儲存方式的角度出發:鍊錶可分為 單鏈表、雙鏈表、以及迴圈鍊錶。

單鏈表:

單鏈表是一種順序儲存的結構。

有乙個頭結點,沒有值域,只有鏈域,專門存放第乙個結點的位址。

有乙個尾結點,有值域,也有鏈域,鏈域值始終為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個具有相同特性的資料元素組成的有限序列,表中每個元素具有相同元素。邏輯上為連續的線性結構。常見的線性表 順序表,鍊錶 棧 佇列 字串 線性表根據物理儲存方式分為 順序表和煉表 線性表在邏輯上是線性結構,在物理上並不是連續的,線性表在物理上儲存時,通常是以陣列和鏈式結構的形式儲存。動...