雙向迴圈鍊錶

2021-10-07 02:44:34 字數 3917 閱讀 8166

複習到資料結構的雙向迴圈鍊錶,用程式記錄一下

#include

#include

"linklist.h"

using

namespace std;

intmain

(int argc,

char

*ar**)

list_display

(head)

;list_del

(head,14)

;list_change

(head,5,

100)

;list_find_data

(head,8)

;list_display

(head)

; head =

list_deinit

(head)

;return0;

}

#include

#include

#include

"linklist.h"

using

namespace std;

//初始化鍊錶

intlist_init

(node *

*pnodo)

(*pnodo)

->data =0;

(*pnodo)

->prev =

*pnodo;

(*pnodo)

->next =

*pnodo;

return0;

}//釋放申請的記憶體

node *

list_deinit

(node *pnode)

node *head = pnode;

//記錄頭節點

pnode = pnode-

>next;

//指向頭節點的下乙個節點

node *p = pnode;

//刪除某個節點前,記錄下乙個要刪除的節點指標

while

(pnode != head)

//要刪除的節點指標為頭節點時,說明已經回到了起點,退出

return

null;}

//頭部插入

intlist_add_head

(node *pnode,

int data)

node *p =

(node *

)malloc

(sizeof

(node));

if(p ==

null

) p-

>data = data;

p->prev = pnode;

p->next = pnode-

>next;

p->next-

>prev = p;

pnode-

>next = p;

return0;

}//尾部插入

intlist_add_tail

(node *pnode,

int data)

node *p =

(node *

)malloc

(sizeof

(node));

if(p ==

null

) node *head = pnode;

//記錄頭節點

while

(pnode-

>next != head)

//找到最後乙個節點pnode

pnode = pnode-

>next;

p->data = data;

p->prev = pnode;

p->next = pnode-

>next;

pnode-

>next = p;

pnode-

>next-

>prev = p;

return0;

}//刪除指定元素

//暫不考慮兩個節點資料相同的情況

intlist_del

(node *pnode,

int data)

if(pnode-

>next ==

null

)while

(pnode-

>next !=

null

) pnode = pnode-

>next;

}return-1

;}//改變指定元素

//暫不考慮兩個節點資料相同的情況

intlist_change

(node *pnode,

int olddata,

int newdata)

if(pnode-

>next ==

null

) node *head = pnode;

//記錄頭節點

while

(pnode-

>next != head)

pnode = pnode-

>next;

}return-1

;}//查詢指定資料的元素

//暫不考慮兩個節點資料相同的情況

intlist_find_data

(node *pnode,

int data)

if(pnode-

>next ==

null

)int index =0;

node *head = pnode;

//記錄頭節點

while

(pnode-

>next != head)

pnode = pnode-

>next;

index++;}

return-1

;}//顯示所有元素

intlist_display

(node *pnode)

if(pnode-

>next ==

null

) cout <<

"list : "

; node *head = pnode;

//記錄頭節點

pnode = pnode-

>next;

while

(pnode != head)

cout << endl;

return0;

}

#ifndef linklist_h

#define linklist_h

//雙向迴圈鍊錶

typedef

struct linknode

node;

intlist_init

(node *

*pnode)

;node *

list_deinit

(node *pnode)

;int

list_add_head

(node *pnode,

int data)

;int

list_add_tail

(node *pnode,

int data)

;int

list_display

(node *pnode)

;int

list_del

(node *pnode,

int data)

;int

list_change

(node *pnode,

int olddata,

int newdata)

;int

list_find_data

(node *pnode,

int data)

;#endif

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

鍊錶 雙向迴圈鍊錶

雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...