單鏈表
1.概念
為了表示每個資料元素a(i)
與它下乙個元素a(i+1)
之間的邏輯關係,對資料元素a(i)
來說除了儲儲存本身的資訊之外,還需儲存乙個表示它下乙個元素的資訊。這兩部分資訊組成資料元素a(i)
的儲存映像,稱為節點
,它包括兩個域:存本身資訊的叫資料域
,存直接後繼位置的叫指標域
。n個節點鏈結成乙個鍊錶
,即為線性表(a1,a2,a3.....an)的鏈式儲存結構
。由於每個節點中只存在乙個指標域所以我們稱之為單鏈表
或線性鍊錶。
2.特點
1)順序訪問
2)儲存資料元素的儲存單元可連續可不連續。
3.補充
根據鍊錶節點所含指標個數、指標指向和指標鏈結方式,可將鍊錶分為單鏈表
、迴圈鍊錶、雙向鍊錶、二叉鍊錶
、十字鍊錶
、鄰接表
、鄰接多重表
等。其中單鏈表、迴圈鍊錶、和雙向鍊錶用於實現線性表的鏈式
儲存結構,其他形式多用於實現樹
和圖
等非線性結構。
例項4.單鏈表的儲存結構
typtypedef struct
book;
typedef struct lnode
lnode,*linklist; //linklist為指向結構體lnode的指標型別
注:
1)lnode *
和linklist
等價。
2)lnode *
強調定義鍊錶中的某個節點,如lnode *p
p代表指向某個節點的指標。
3)linklist
強調定義鍊錶指向頭結點的頭指標,如linklist l
l代表頭指標簡稱表l。
5.幾個概念區分
首元結點
:指向鍊錶中儲存第乙個資料元素a1的節點。
頭結點
:為處理方便在單鏈表第乙個節點之前附設的乙個節點,他的資料域可以為空。
頭指標
:指向鍊錶中第乙個節點的指標。有頭結點則指向頭結點,無頭結點則指向首元結點。
例項6-1.簡單鍊錶
#include #include #define ok 1
#define error 0
using namespace std;
typedef struct nodenode,*lnode;
void init(lnode &l)
void add(lnode &l,lnode &r,int d)
void display(lnode l)
}void newlist(lnode &l,lnode &r)
}int main()
6-2.簡單圖書管理系統
#include #include #define ok 1
#define error 0
using namespace std;
//資料元素
typedef struct
book;
//節點
typedef struct lnode
lnode,*linklist; //linklist為指向結構體lnode的指標型別
//單鏈表初始化
int initlist(linklist &l)
//取值
int getbook(linklist l,int i,book &b)
if(!p||j>i)//該節點不存在或i值不合法
b=p->data;
return ok;
}void out_book(book b);
//查詢
lnode *locatebook(linklist l,book b)
return p; //p為b的位址,查詢失敗p為null
}//插入
int listinsert(linklist &l,int i,book b)
if(!p||j>i-1) //i>l.length,或i<1
lnode *s=null; //構造新節點s
s->data = b;
s->next = p->next;
p->next = s;
return ok;
}//刪除
int listdelete(linklist &l,int i)
if(!(p->next)||(j>i-1))
lnode *t;
t = p->next;
p->next = t->next;
delete t;
return ok;
}//新增節點(後插法)
int addnode(linklist &l,linklist &r,book b)
void in_book(book &t)
void out_book(book b)
return;
}//建立單鏈表(後插法)
void createlist(linklist &l,linklist &r)
}//刪
void del_book(linklist &l)
//查void search_book(linklist &l)
//改void edi_book(linklist &l)
void get_book(linklist &l)
int main()
7-1.執行結果
7-2.執行結果
增
刪
查
改
取
此處按序號取第5個資料,即isbn為6的資料
8.附:前插法
//建立單鏈表(前插法)
int createlist(linklist &l,book b)
鍊錶(一) 單鏈表1
在使用順序結構儲存資料時,經常會有類似空間不足導致資料溢位,空間過大帶來記憶體浪費等情況。最常見的應該就是我們的陣列這種順序儲存結構。c語言中,有沒有辦法解決這個問題呢?答案是有的,可以用鍊錶這種資料結構來解決動態擴容的問題。使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利...
單鏈表 鍊錶倒置
鍊錶屬於動態資料結構,可以模擬成一 環 接一 環 的鏈條,這裡每一 環 視作乙個結點,結點串在一起形成鍊錶。這種資料結構非常靈活,結點數目無須事先指定,可以臨時生成。每個結點有自己的儲存空間,結點間的儲存空間也無需連線,結點之間的串連由指標來完成,指標的操作又極為靈活方便,無須移動大批資料,只需修改...
鍊錶之單鏈表
上週給前端的小夥伴們進行了講課,想著總結一下,但是直到推到現在,我才開始。上週講課的內容是es6和鍊錶。我大致把鍊錶的內容總結一下,也算是個回顧。一 初始鍊錶 鍊錶定義 使用一組任意的儲存單元儲存線性表的資料元素 可連續,也可是不連續 它是一種順序儲存。也就是說,鍊錶是線性結構,各個元素的儲存位置都...