鍊錶的基本操作

2022-09-10 11:24:12 字數 3248 閱讀 1243

在說鍊錶之前,我們先說說順序儲存。其中我們最熟悉的一種順序儲存的資料結構就是陣列,當我們想要給陣列中插入乙個元素時,為保證順序以及其他元素不丟失,我們需要在插入元素後,將後面的元素整體後移。所以容易看出這樣有著這兩個弊端:第一:我們所需要移動的元素有很多時,會浪費算力。第二:我們必須為陣列開足夠多的空間,否則會存在溢位風險。

為了避免這兩個弊端,我們引入鏈式儲存——鍊錶。

什麼是鍊錶?

簡單來說,鍊錶的利用結構體,額外開闢出乙份記憶體空間去作指標,它總是指向下乙個結點,乙個個結點通過指標相互串聯,這就形成了我們的鍊錶。

其中data資料元素(資料域),可以是int型別或char型別,甚至可以是結構體。next為乙個指標通常是用來指向下乙個結點,鍊錶的尾部next指向null,因為它沒有可以指向的空間了。

對於乙個單鏈表的結點定義:

1

//定義結點型別

2 typedef struct

node

3node,* pointnode;//

node表示結點的型別,pointnode表示指向node結點型別的指標型別

7```81

.對鍊錶進行初始化:910

```c

11pointnode initialize()12

19 h->next=null; //

指標指向null

20}

21```222

.建立單鏈表:

23<1>頭插法

24從乙個空表開始,生成新結點,並將資料存放到新結點的資料域中,然後將新結點插入到當前鍊錶的表頭即頭結點之後。

25```c

26pointnode listofhead()

2739

return

h;40}41

```42

<2>尾插法

43將新結點逐個插入到當前鍊錶的表尾上,增加乙個尾指標, 使其始終指向當前鍊錶的尾結點。

44```c

45pointnode listofend()

4661 l->next =null;

62return

h;63}64

```65 注意:頭插法的順序是逆序的:表頭->[n]->···->[2]->[1]->null

66 尾插法是正序的:表頭->[1]->[2]->····[n]->null673

.鍊錶的遍歷

6869

```c

70void

listoftr**el(pointnode h)

7180

81 }

2.鍊錶的插入

//鍊錶的插入

2 pointnode datainlist(pointnode h,int i,intx)3

10 node* p = (node*)malloc(sizeof

(node));

11 p->data =x;

12 p->next = preve->next;

13 preve->next =p;

14return

h;15 }

3.鍊錶修改

//

鍊錶的修改

pointnode moddata(pointnode h,int x,int

t)p = p->next;

}return

h;}

4.鍊錶刪除

//

鍊錶的刪除

pointnode freedata(pointnode h,int

x) preve->next = p->next;

free(p); //

刪除操作

return

h;}

5.完整**

#include#include

//定義結點型別

typedef struct

node

node, *pointnode;

//node表示結點的型別,pointnode表示指向node結點型別的指標型別

//鍊錶的初始化

pointnode initialize()

h->next = null; //

指標指向null }//

頭插法建立鍊錶

pointnode listofhead()

returnh;}

//尾插法

pointnode listofend()

l->next =null;

returnh;}

//遍歷鍊錶

void

listoftr**el(pointnode h)}//

鍊錶的插入

pointnode datainlist(pointnode h,int i,int

x) node* p = (node*)malloc(sizeof

(node));

p->data =x;

p->next = preve->next;

preve->next =p;

returnh;}

//鍊錶的修改

pointnode moddata(pointnode h,int x,int

t) p = p->next;

}returnh;}

//鍊錶的刪除

pointnode freedata(pointnode h,int

x) preve->next = p->next;

free(p); //

刪除操作

returnh;}

intmain()

完整操作

希望大家也可以關注本人的csdn,內容都是一致的!如有錯誤,請指正!!

鍊錶的基本操作

include include include include using namespace std struct listnode void initnode listnode node bool isempty listnode head void pushfront listnode hea...

鍊錶的基本操作

鍊錶操作是最基本的 必須掌握的知識點,最好滾瓜爛熟,透徹理解。工作時間短用的也不夠頻繁,還是總結一下比較好,以加強鞏固。1.單鏈表 結點形式 區分幾個概念 首節點 第乙個元素所在節點。頭指標 指向首節點的指標。頭結點 為了操作方便,在第乙個節點之前附設的乙個結點,此時指向頭結點的為頭指標。基本操作 ...

鍊錶的基本操作。。。

include node.h 列印鍊錶 void print node head printf n 從尾部插入 void insert tail node head,const int d while t next null t next p p next null 從頭部插入 void inser...