單鏈表的頭插法與尾插法
學習完線性表的知識已經很長時間了,今天有空重新複習整理一下。線性表有兩種表示方法,順序表示和鏈式表示。
順序表示即就是陣列,其特點為:
優:(1)用陣列儲存資料元素,操作方法簡單,容易實現
(2)無須為表示結點間的邏輯關係而增加額外的儲存開銷
(3)儲存密度高
(4)順序表可按元素位序隨機存取結點
缺:(1)做插入、刪除操作時,需大量移動資料元素,效率非常低
(2)要佔用連續的儲存空間,儲存分配只能預先進行。分配過大,會導致空間浪費;分配過小將會造成資料溢位。
鏈式表示即就是連結串列,其特點為與順序表相反
連結串列不用事先估計儲存空間的大小,但其儲存密度較低(儲存密度:指一個結點中資料元素所佔的儲存單元數和整個結點所佔的儲存單元之比,順序表的儲存密度為1,鏈式儲存密度小於1)
連結串列的插入有兩種方式:頭插法和尾插法
頭插法:在頭結點(為了操作方便,在單鏈表的第一個結點之前附加一個結點,稱為頭結點。頭結點的資料域可以儲存資料標題、表長等資訊,也可以不儲存任何資訊,其指標域儲存第一個結點的首地址)H之後插入資料,其特點是讀入的資料順序與線性表的邏輯順序正好相反
//尾插法建立連結串列 void CreateListR(LinkList &L, int n) { // 給連結串列插入n個數據 int i; LinkList p = NULL, q; L = (LinkList)malloc(sizeof(LNode)); // 生成頭結點 L->next = NULL; q = L; cout << "請輸入" << n << "個數據:"; for (i = 1; i <= n; i++) { p = (LinkList)malloc(sizeof(LNode));//每次新生成的節點 cin >> p->data;//資料 q->next = p; q = q->next; } p->next = NULL;//最後節點,指向NULL }
//頭插法建立連結串列 void CreatelistL(LinkList &L, int n) { LinkList p,q; L=(LinkList)malloc(sizeof(LNode)); L->next=NULL; cout << "請輸入" << n << "個數據:"; for(int i=0;i<n;i++) { q=(LinkList)malloc(sizeof(LNode)); cin>>q->data; q->next=L->next; L->next=q; } L->next=NULL; }
--------------------------------------------------------------------------------------------------------------------------------------------------------
關於我自己
* 一個正派但不正經的程式設計師
* 18年計算機專業碩士畢業生,騰訊SNG部門實習生,現加盟快手科技 ,後端研發工程師一枚
* 喜歡技術,喜歡網際網路
* 民遙控 ,趙雷、陳粒、宋冬野
* 公眾號:程式設計美學,時不時寫篇文章,偶爾數羊,其實說到底,只是想和你聊聊