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...