單鏈表的建立

2021-09-28 16:34:24 字數 2812 閱讀 2682

線性表的順序儲存結構的特點是邏輯關係上相鄰的兩個元素在物理位置上也相鄰,因此可以隨機訪問表中的任意乙個元素。但在對順序表進行插入,刪除操作時需要對順序表中的資料元素進行移位操作,降低了效率。鏈式儲存結構就很好的解決了移位這個問題,它不需要一塊連續的位址空間,因為他不要求邏輯結構上相鄰的兩個數物理結構上也要相鄰,它是通過「鏈」的形式建立資料元素之間的邏輯關係,插入,刪除元素時不需要進行移位操作。鍊錶可以分為單鏈表,迴圈鍊錶,雙向鍊錶。

單鏈表是通過一組任意的儲存單元來儲存線性表中的元素的,單鏈表是由乙個乙個結點相連構成的,每個結點都有兩個域,分別是存放資料的資料域,存放後繼節點位址的指標域。n個元素通過每個結點的指標域拉成乙個鍊子,相互連在一起,稱為鍊錶。因每個節點中只有乙個指向後繼結點的指標,這樣的鍊錶稱之為單鏈表。

單鏈表儲存結構可以表示為:

typedef

struct node

lnode,

*linklist;

通常用乙個頭指標來標識乙個單鏈表,若頭指標為null,則表示乙個空表。

通常在鍊錶之前設定乙個頭結點。頭結點的資料域可以不存放任何資料,當然也可以存放鍊錶的結點個數,設定表頭結點可以簡化鍊錶的操作。

頭結點和頭指標的不同

頭指標1.指向第乙個結點的指標,若煉表有頭結點則為指向頭結點的指標 2.具有標識作用,常用頭指標作為鍊錶的名字

頭結點1.放在第乙個元素之前,資料域一般無意義(可以放鍊錶的長度) 2. 有了頭結點,在第乙個元素結點之前插入和刪除第乙個結點,其操作與其他結點的操作就統一了   3.造成儲存空間浪費

帶頭結點和不帶頭結點的鍊錶的區別

帶頭結點

1.鍊錶為空:l->next==null 為真  2.鍊錶的第乙個資料元素由l->next指向   3.插入刪除操作統一

不帶頭結點

1.鍊錶為空l==null  2.鍊錶的第乙個資料元素由l指向   3.在第乙個元素之前插入乙個元素和刪除第乙個元素要單獨處理

單鏈表的建立

1.頭插法建立單鏈表(鍊錶頭部依此插入結點建立單鏈表)

演算法思路:

①建立乙個帶頭結點的空的單鏈表

②如果沒有遇到結束標誌,則申請結點,放入資料,將結點插入到頭結點之後。

具體過程如下圖:

#include

#include

//結構體來定義結點

typedef

struct node

node,

*plist;

void

initlist

(plist plist)

//初始化頭結點

plist->next =

null;}

node *

getnode

(int val)

//得到乙個結點 用來動態開闢記憶體

void

inserthead

(plist plist,

int val)

//頭插法建立鍊錶

void

show

(plist plist)

//列印鍊錶

printf

("\n");

}int

main()

上述**列印結果為:60 50 40 30 20 10

因為為頭插法建立,所以在最後乙個輸入的最先列印出來

2.尾插法建立單鏈表(鍊錶尾部依此插入結點建立單鏈表)演算法思路:

①建立乙個帶頭結點的空的單鏈表,設乙個指標r指向線性表表尾

②按照線性表元素順序依此讀入資料元素,如果不是結束,申請結點,將結點插入到表最後乙個結點的後面,然後讓r指向新的表尾結點

具體過程如下圖:

#include

#include

//定義結點

typedef

struct node

node,

*plist;

void

initlist

(plist plist)

//初始化頭結點

plist->next =

null;}

node *

getnode

(int val)

//得到乙個結點 用來動態開闢記憶體

void

inserttail

(plist plist,

int val)

//尾插法建立單鏈表

pcur->next = pget;

}void

show

(plist plist)

printf

("\n");

}int

main()

上述**列印結果為:10 20 30 40 50 60

尾插法建立的單鏈表列印順序和輸入順序一樣

無論哪種建立鍊錶的方法,重點要知道在建立鍊錶的過程中指標的變化過

單鏈表的建立

include stdio.h include stdlib.h typedef int datatype typedef struct node listnode typedef listnode linklist linklist createlist void 單鏈表的建立,從後向前生成 s ...

單鏈表的建立

單鏈表的建立 演算法思路 先建立乙個空資料域的煉表頭指標 從該節點依次插入新節點讀入資料 直至輸入ctrl z結束輸入 include include typedef int elemtype 定義資料鏈表結構 typedef struct nodenode,linklist 建立鍊錶 頭插法,先是...

單鏈表的建立

單鏈表的建立 public class linkedlistdemo 管理英雄結點 class linkedlist temp temp.next temp.next heronode public void showlist 從頭結點的下乙個就是我們需要的鍊錶 heronode temp head...