資料結構 迴圈鍊錶

2021-09-12 12:27:19 字數 1851 閱讀 4831

---------------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就行了。迴圈鍊錶也算是繼承自單鏈表,起到模擬環的效果。解決單鏈表無法首...