迴圈鍊錶企業鍊錶

2021-10-03 01:25:39 字數 2954 閱讀 1629

一、特點

讓鍊錶的最後乙個結點的next指標指向頭結點。初始化小節點時直接讓next指標指向鍊錶的頭結點。

二、**

#include

#include

#include

//小結點

typedef

struct listnode

listnode;

//鍊錶結點

typedef

struct circularlist

circularlist;

//資料

typedef

struct person

person;

//輸出函式指標

typedef

void

(*print)

(listnode*);

void

myprint

(listnode* data)

//比較函式指標

typedef

int(

*compared)

(listnode*

,listnode*);

intmycompared

(listnode* data1 ,listnode* data2)

else

return-1

;}//迴圈鍊錶初始化

circularlist*

init_circularlist()

//迴圈鍊錶的插入

void

insert_circularlist

(circularlist* list ,

int pos ,listnode* data)

if(pos<

0||pos>list->size)

//插入

data->next =

&(list->head)

; listnode* pcur1 =

&(list->head)

;for

(int i =

0; i < pos ; i++

) data->next = pcur1->next;

pcur1->next = data;

list->size++;}

//迴圈鍊錶的值刪除

void

valuedelete

(circularlist* list,listnode* data,compared mycompared)

if(data ==

null

)//刪除

listnode* pcur1 =

&(list->head)

; listnode* pcur2 =

null

;int flag =-1

;for

(int i=

0; isize; i++

)else

pcur1=pcur1->next;}if

(flag ==-1

)else

}//迴圈鍊錶的位置刪除

void

posdelete

(circularlist* list ,

int pos)

if(pos<

0||pos>list->size)

//刪除

listnode* pcur =

&(list->head)

;for

(int i =

1;i) pcur->next = pcur->next->next;

list->size--;}

//迴圈鍊錶的列印

void

print_circularlist

(circularlist* list , print myprintf)

//列印

listnode* pcur = list->head.next;

for(

int i =

0; i <

(list->size)*2

; i++

)//迴圈的次數 (list->size)*2}}

//迴圈鍊錶的長度

intsize_circular

(circularlist* list)

//兩個迴圈鍊錶的合併

void

twolist

(circularlist* list1 ,circularlist* list2)

//合併

listnode* list1_lastnode = list1->head.next;

//list1的最後乙個結點

for(

int i =

1; isize ; i++

) listnode* list2_lastnode = list2->head.next;

//list2的最後乙個結點

for(

int i =

1; isize ; i++

) list1_lastnode->next = list2->head.next;

//將list1的最後乙個結點指向list2第乙個結點

list2_lastnode->next =

&(list1->head)

;//將list2最後乙個結點指向list1的頭結點

list1->size = list1->size + list2->size;

//長度

}//迴圈鍊錶的清空

void

emptylist

(circularlist* list)

list->size =0;

}//迴圈鍊錶的記憶體釋放

void

freespace

(circularlist* list)

free

(list);}

intmain()

迴圈鍊錶,雙向鍊錶

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

鍊錶之迴圈鍊錶

單向鍊錶 鍊錶之單向鍊錶 迴圈鍊錶是單向鍊錶的變化形式。單向鍊錶的尾部的指標域是空的,而迴圈鍊錶的尾部指標是指向鍊錶的頭結點的,其結構如圖一所示。圖 一循 環鏈表結 構圖一 迴圈鍊錶結構 圖一迴圈鍊錶 結構從上面結構可以看出,迴圈鍊錶的節點形成了乙個圈。在進行遍歷時,可以從任意節點開始。如果記錄了尾...

鍊錶 雙向迴圈鍊錶

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