C語言 雙向帶頭迴圈鍊錶的增刪查改及優缺點

2021-10-18 21:38:40 字數 2858 閱讀 9697

二、雙向帶頭迴圈鍊錶優缺點

鍊錶的結構有很多種,其中用的比較多的就是單向不帶頭不迴圈鍊錶和雙向帶頭迴圈鍊錶,這兩種鍊錶都有各自應用的場合。

雙向帶頭迴圈鍊錶結構最複雜,一般用在單獨儲存資料。實際中使用的鍊錶資料結構,都是帶頭雙向迴圈鍊錶。今天就用c語言來實現一下帶頭雙向鍊錶的增刪查改。

首先:來看一下雙向帶頭迴圈鍊錶的結構

可以看到雙向帶頭迴圈鍊錶的每乙個節點都與前後相連線,因此組成了乙個迴圈,要實現該結構,需要先創造乙個頭結點,該頭結點的尾指標指向自己,頭指標也指向自己,在此基礎上實現其他節點的插入和刪除。

以下是**部分:

標頭檔案listnode.h

#define pragama once

#include

#include

#include

#include

//typedef方便修改結構體變數的型別

typedef

int ltdatatype;

//構建鍊錶結構體,結構體變數包括頭指標,尾指標及data值

typedef

struct listnode listnode;

//建立新節點

listnode*

buylistnode

(ltdatatype x)

;//鍊錶初始化->創造頭結點

listnode*

initlistnode()

;//列印鍊錶

void

listprint

(listnode* phead)

;//銷毀鍊錶

void

listdistory

(listnode* phead)

;//增刪查改

void

listpushback

(listnode* phead, ltdatatype x)

;void

listpushfront

(listnode* phead, ltdatatype x)

;void

listpopback

(listnode* phead)

;void

listpopfront

(listnode* phead)

;listnode*

listfind

(listnode* phead, ltdatatype x)

;void

listinsert

(listnode* pos, ltdatatype x)

;void

listerase

(listnode* pos)

;void

listchange

(listnode* pos, ltdatatype x)

;

主體

listnode.c

#include

"listnode.h"

listnode*

buylistnode

(ltdatatype x)

listnode*

initlistnode()

void

listprint

(listnode* phead)

printf

("\n");

}void

listdistory

(listnode* phead)

free

(phead)

; phead =

null;}

//以下注釋掉的**段和留下的**功能是一樣的

void

listpushback

(listnode* phead, ltdatatype x)

void

listpushfront

(listnode* phead, ltdatatype x)

void

listpopback

(listnode* phead)

void

listpopfront

(listnode* phead)

listnode*

listfind

(listnode* phead, ltdatatype x)

cur = cur->next;

}return

null;}

//pos之前插入

void

listinsert

(listnode* pos, ltdatatype x)

//pos不能是phead! 否則會破壞雙向鍊錶的結構;

void

listerase

(listnode* pos)

void

listchange

(listnode* pos, ltdatatype x)

測試**

test.c

#include

"listnode.h"

void

test()

intmain()

執行結果

以下雙向迴圈列表的優缺點都是與順序表和單向不迴圈煉表相比較的,因此同時總結了了下順序表的優缺點。

優點:

缺點:

帶頭雙向迴圈鍊錶增刪操作

標頭檔案list.h存放函式宣告 ifndef list h define list h include include include typedef int ltdatatype typedef struct listnodelistnode typedef struct listlist 初始...

雙向帶頭鍊錶的增刪查改

雙向帶頭鍊錶的增刪查改 雙向鍊錶也叫雙鏈表,是鍊錶的一種,它的每個資料結點中都有兩個指標,分別指向直接後繼和直接前驅。所以,從雙向鍊錶中的任意乙個結點開始,都可以很方便地訪問它的前驅結點和後繼結點。一般我們都構造雙向迴圈鍊錶。define crt secure no warnings 1 inclu...

雙向迴圈帶頭鍊錶的基礎操作 增刪改查

typedef int cldatatype 結點型別 typedef struct listnode listnode 鍊錶的頭 typedef struct list list 建立乙個雙向迴圈鍊錶結點 listnode buylistnode cldatatype x 初始化雙向迴圈帶頭鍊錶 ...