資料結構與演算法2 鍊錶

2022-03-07 02:31:11 字數 2710 閱讀 2752

1. 鍊錶

鍊錶通常有兩個域

2.單鏈表的表示方式

3.鍊錶的儲存結構

4.鍊錶的分類

迴圈鍊錶:鍊錶首尾相接構成乙個環狀結構;

雙向鍊錶:單鏈表中增加乙個指向前驅的指標。

5.單鏈表的基本運算與實現示例

#include"

stdio.h

"#include

"malloc.h

"typedef

struct

datatype;

typedef

struct

node

listnode;

//線性表的建立

//頭插法

listnode *creatlist()

returnl;}

//初始化

listnode *initlist()

void printlist(listnode *l)

printf("\n

");}int getlength(listnode *l)

return

(num);

}void insertlist(listnode *l,int

i,datatype x)

/*找到插入位置

*/s->next=q->next;//

=p q->next=s; }//

按序號取元素

listnode *getnode(listnode *l,int

i) p=l->next;

while(p!=null&&j

returnp;}

//查詢運算

int locatelist(listnode *l,datatype x)

if(p==null)

return0;

else

returnk;}

//修改第i個元素

void editlist(listnode *p,int

i,datatype e)

while(k<=i)

p->data=e;

}void deletelist(listnode *l,int

i)

while(j

q=p->next;

p->next=q->next;

free

(q);}//

排序void sortlist(listnode *l)

}}void

main()

view code

6.迴圈鍊錶

在單鏈表中,最後乙個結點的指標域為空。訪問單鏈表中任何資料只能從煉表頭開始順序訪問,而不能進行任何位置的隨機查詢訪問。如要查詢的結點在鍊錶的尾部則需遍歷整個鍊錶。所以單鏈表的應用受到一定的限制。對單鏈表進行改進:

它將單鏈表中最後乙個結點的指標指向鍊錶的頭結點,使整個鍊錶頭尾相接形成乙個環形。

7.雙向鍊錶

雙向鍊錶用兩個指標表示結點間的邏輯關係。 其增加了乙個指向直接前驅的指標域,這樣形成的鍊錶有兩條不同方向的鏈,前驅和後繼,因此稱為雙鏈表。

雙向鍊錶結點的結構:

雙向鍊錶結點的定義如下:

typedef struct

dlistnodedlistnode;

雙向鍊錶結構示意圖:

雙向鍊錶的插入操作:

關鍵語句指標操作序列既不是唯一也不是任意的。操作①必須在操作③之前完成,否則*p的前驅結點就丟掉了。

雙向鍊錶的刪除操作:

另一種寫法:

void ddeletenode(dlistnode *p)

補:迴圈雙鏈表迴圈鍊錶+雙向鍊錶的結合帶頭結點且有n個結點的迴圈雙鏈表

鏈式儲存結構的特點:

優點:不足:

資料結構與演算法 鍊錶

題目 合併兩個已經排序好的鍊錶 非遞迴和遞迴兩種 方法1 cpp view plain copy print color 000000 合併鍊錶.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct listnod...

資料結構與演算法 鍊錶

在講述鍊錶之前讓我們對資料結構進行乙個簡單的回顧 我們知道,資料結構指的是描述實際問題中各個資料項節點之間的前後邏輯結構關係,即要麼是線性結構 即某一資料項的前繼節點和後繼節點有且只有乙個 要麼是非線性結構 即某一資料節點的前驅或者後繼節點不止乙個 在確定了實際資料項的資料結構之後,我們要採用某種儲...

資料結構與演算法 鍊錶

反轉鍊錶 def reverse head q none p heap while p temp p.next p.next q q pp temp return p判斷鍊錶環 def meetingnode head if not head return slow head fast head.n...