複習到資料結構的雙向迴圈鍊錶,用程式記錄一下
#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...