---------------start reading---------------
在知道熟悉單鏈表的操作後,我們知道鍊錶有乙個資料域存放具體的資料,有乙個next域存放後繼的位址,如果我們將尾結點的next域指向之前的任意乙個節點,那麼就形成了乙個環。
下面我們就來說說迴圈鍊錶
如圖就是乙個迴圈鍊錶
在對迴圈鍊錶進行操作時要注意尾結點的後繼不是null,而是plist
迴圈條件要從p->next!=null變成p->next!=plist
迴圈鍊錶可以防止空指標解引用而引起的崩潰,同時也有一定風險會死迴圈。
下面是迴圈鍊錶的操作
定義標頭檔案
#pragma once
typedef struct cnode
cnode,*clist;
//鍊錶初始化
void initlist(clist plist);//node*
//頭插
bool insert_head(clist plist,int val);
//尾插
bool insert_tail(clist plist,int val);
//查詢
cnode *srearch(clist plist,int key);
//刪除
bool delete(clist plist,int key);
//獲取長度
int getlength(clist plist);
bool isempty(clist plist);
//清空資料
void clear(clist plist);
//摧毀
void destroy(clist plist);
//顯示
void show(clist plist);
迴圈鍊錶的實現
#include #include #include #include "clist.h"
//帶頭節點的迴圈鍊錶
//鍊錶初始化
void initlist(clist plist)
plist->next = plist;//plist->next = null;
}//頭插
bool insert_head(clist plist,int val)
//尾插
bool insert_tail(clist plist,int val)
//查詢
cnode *srearch(clist plist,int key)
} return null;
}//查詢前驅
static cnode *searchpri(clist plist,int key)
} return null;
}//刪除
bool delete(clist plist,int key)
cnode *q = p->next;
p->next = q->next;
free(q);
return true;
}int getlength(clist plist)
return count;
}bool isempty(clist plist)
void clear(clist plist)
void destroy(clist plist)
}void show(clist plist)
printf("\n");
}
資料結構 迴圈鍊錶
近期我在學習資料結構,於是我自己整理了單鏈表 迴圈單鏈表 雙向鍊錶 雙向迴圈鍊錶的相關 以鞏固這段時間的學習,也希望能夠幫助初學者,希望大家在閱讀以下 時發現問題糾正於我,一起 cyclinklist.h ifndef cyclinklist h define cyclinklist h inclu...
資料結構 迴圈鍊錶
迴圈鍊錶的結點 typedef struct circularnodecircularnode 迴圈鍊錶結構 typedef struct circularlinklistcircularlinklist 在迴圈鍊錶的指定位置插入元素 void insertcircularlinklist circ...
資料結構 迴圈鍊錶
目錄 迴圈鍊錶 迴圈鍊錶與單鏈表的區別和聯絡 迴圈鍊錶的訪問順序 迴圈佇列的常用操作 排序 合併合併並保留序列 反轉 判空後續操作待補充 實現 迴圈鍊錶和單鏈表最大區別就是最後乙個節點指向頭節點。遍歷時節點迭代指標 p!頭節點 l就行了。迴圈鍊錶也算是繼承自單鏈表,起到模擬環的效果。解決單鏈表無法首...