線性表是最簡單,最經常使用的一種數據結構。線性表的邏輯結構是n個數據元素的有限序列(a1,a2,…,an)。而線性表的物理結構,咱們已經學習過順序表,也就是數組 ;另外一種線性表的物理結構——鏈表 。
什麼是單鏈表
單鏈表(Singly Linked list)也稱線性鏈表。每一個元素佔用一個節點(Node)。一個節點至少包含兩個域,一個域存放數據信息info,其數據類型由應用問題決定,另外一個存放指向該鏈表中下一個節點的指針link。
單鏈表的c++實現思路
◆ 一、單鏈表節點的數據類型
typedef int Datatype; //節點的數據爲整型
struct node
{
Datatype info;//節點的數據信息
node *link;
//指向下一個節點的指針,是結構自身的指針類型,決不能是結構自身類型
};
◆ 二、由節點造成單鏈表
單鏈表的第一個節點首先經過new運算得到,並用鏈表的表頭指針head指向, head在使用中必須妥善保存,千萬不可丟失,不然單鏈表整個丟失,內存也發生泄漏。
……//有關node的聲明,見上段代碼
node *head;
head=new node;
//第一個節點的數據不賦值,則該節點僅做head
head->link=NULL;//指針初始化
單鏈表後面的節點能夠經過插入與刪除來維護:只要改變鏈中節點指針的指向,而無需移動表中的元素,就能實現插入和刪除操做。
單鏈表的基本插入算法
如今已經存在單鏈表「head」,插新節點時考慮三種狀況:
- 新插入節點做爲單鏈表的第一個結點;
- 也有可能新插入節點是中間節點;
- 也有可能新插入節點做爲最後一個節點。
首先要先產生新節點:
……//有關node的聲明
node *newone;
newone=new node;
newone->info=13;//給該節點的數據賦值
newone->link=NULL;//指針初始化
◆
一、新節點插在鏈首
//注意:鏈表操做次序很是重要
……//node、head、newone的聲明及定義,見上面
newone->link=head->link;
Head->link=newone;//注意指針賦值
◆
二、新節點插在單鏈表中間
首先用工做指針p找到指定節點,而讓指針q指向緊跟其後的節點;新節點插在p、q之間;
node *p,*q;
……//此段代碼實現:利用查找算法將p定位在指定節點(稍後將學習)
q=p->link; //注意指針賦值
newone->link=q;
//或newone->link=p->link;這樣就不須要q了
p->link=newone;
若有問題,歡迎和我聯繫。
個人郵箱 cq20151207@163.com