迴圈鍊錶的建立 帶頭結點

2021-09-24 02:15:41 字數 2874 閱讀 8255

1.迴圈鍊錶與單鏈表的區別

(1)初始化的時候,頭結點的next指向它自己;

(2)判斷條件上,由p!=null更換為p != *l;

(3)更新尾結點的時候,要由null改為*l;

/*

專案名稱:迴圈鍊錶的建立與基本操作

編譯環境:vc++ 2008

作者相關:。。。

最後修改:2019.5.31

學習目標:1.掌握迴圈鍊錶的基本操作

2.利用頭指標實現的迴圈鍊錶

注意事項:1.測試所有功能是否正常

*/#include #include #include #define ok 1

#define error 0

#define true 1

#define false 0

typedef int elemtype;

typedef bool status;

//定義鍊錶結點結構體

typedef struct node

node,*linklist;

//函式宣告

status initlist( linklist *l );

status listempty( linklist l );

status clearlist( linklist *l );

int lengthlist( linklist l );

int locateelem( linklist l, elemtype e );

status getelem( linklist l, int i, elemtype *e );

status listinsert( linklist *l, int i, elemtype e );

void createlisthead( linklist *l, int n );//頭插法

void createlisttail( linklist *l, int n );//尾插法

status listdelete( linklist *l, int i, elemtype *e );

status outlist( linklist l );

int main()

else

printf("迴圈鍊錶是空的!\n\n");

clearlist(&l1);

printf("清空鍊錶後:");

if(listempty(l1))

printf("l1為空!\n\n");

createlisthead(&l2,10);

printf("頭插法建立,");

outlist(l2);

createlisttail(&l3,10);

printf("尾插法建立,");

outlist(l3);

return 0;

}//初始化,建立頭結點,l指向此頭結點

status initlist( linklist *l )

status listempty( linklist l )

//清空鍊錶:只保留頭結點

status clearlist( linklist *l )

(*l)->next = *l;

return ok;

}int lengthlist( linklist l )

return count;

}//返回鍊錶中與e相等元素的位置,沒有則返回0

int locateelem( linklist l, elemtype e )

linklist p;

int i=1;

p = l->next;//p指向第乙個結點

while(p!=l) }

if(p == l) }

//用e返回鍊錶中第i個資料元素的值

status getelem( linklist l, int i, elemtype *e )

if(p==l||j>i)

return error;

*e = p->data;

return ok;

}//在第i個元素之前插入資料e

status listinsert( linklist *l, int i, elemtype e )

while(jnext;

++j;

} s=(linklist)malloc(sizeof(node));

s->data = e;

s->next = p->next;

p->next = s;

return ok;

}//隨機產生n個數,利用頭插法完成鍊錶的''整表建立''

void createlisthead( linklist *l, int n )

}//隨機產生n個數,利用尾插法完成鍊錶的''整表建立''

void createlisttail( linklist *l, int n )

p->next = *l;

}//刪除鍊錶中第i個資料元素

status listdelete( linklist *l, int i, elemtype *e )

if(p==*l||j>i)//i的值不存在

帶頭結點迴圈鍊錶

上乙個說的是單鏈表,其實迴圈鍊錶跟單鏈表類似,單鏈表最後乙個節點 p 的next域為null即p next null而迴圈鍊錶 plist 的則為頭結點的位址,即p next plist。其餘的基本操作和單鏈表幾乎一樣,僅僅是單鏈表迴圈結束條件為 null,而迴圈鍊錶是 plist。基本操作為 初始...

鍊錶 帶頭結點的雙向迴圈鍊錶

還需改進 creat node這個函式應有返回型別,來判斷新建結點是否成功,不然主函式中不管成不成功都會訪問該節點成員。改了這個函式,在主函式中create node後要判斷是否成功,不成功就提示並退出函式,退出前別忘了還要釋放鍊錶!同時create link這個函式中也要判斷head是否申請成功,...

不帶頭結點的雙向迴圈鍊錶

基本概念 迴圈鍊錶 將單鏈表中最後乙個結點的next指向頭結點或者空指標,就使得整個單鏈表形成乙個環,這種頭尾相接的單鏈表稱為單迴圈鍊錶,簡稱迴圈鍊錶。雙向鍊錶 是在單鏈表的每個結點中,再設定乙個指向其前驅結點的指標域prior,在雙向鍊錶的結點中有兩個指標域,乙個next指向直接後繼,乙個prio...