在說鍊錶之前,我們先說說順序儲存。其中我們最熟悉的一種順序儲存的資料結構就是陣列,當我們想要給陣列中插入乙個元素時,為保證順序以及其他元素不丟失,我們需要在插入元素後,將後面的元素整體後移。所以容易看出這樣有著這兩個弊端:第一:我們所需要移動的元素有很多時,會浪費算力。第二:我們必須為陣列開足夠多的空間,否則會存在溢位風險。
為了避免這兩個弊端,我們引入鏈式儲存——鍊錶。
什麼是鍊錶?
簡單來說,鍊錶的利用結構體,額外開闢出乙份記憶體空間去作指標,它總是指向下乙個結點,乙個個結點通過指標相互串聯,這就形成了我們的鍊錶。
其中data資料元素(資料域),可以是int型別或char型別,甚至可以是結構體。next為乙個指標通常是用來指向下乙個結點,鍊錶的尾部next指向null,因為它沒有可以指向的空間了。
對於乙個單鏈表的結點定義:
12.鍊錶的插入//定義結點型別
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 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.鍊錶修改
//4.鍊錶刪除鍊錶的修改
pointnode moddata(pointnode h,int x,int
t)p = p->next;
}return
h;}
//5.完整**鍊錶的刪除
pointnode freedata(pointnode h,int
x) preve->next = p->next;
free(p); //
刪除操作
return
h;}
#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...