雙向迴圈鍊錶

2021-10-01 10:53:21 字數 2096 閱讀 5034

dlinkedlist.c

#include

"dlinkedlist.h"

// 建立返回鍊錶的頭結點.

listnode*

listcreate()

// 雙向鍊錶銷毀

void

listdestory

(listnode* plist)

free

(plist);}

// 雙向鍊錶列印

void

listprint

(listnode* plist)

printf

("\n");

}listnode*

buynode

(ltdatatype x)

// 雙向鍊錶尾插

void

listpushback

(listnode* plist, ltdatatype x)

// 雙向鍊錶尾刪

void

listpopback

(listnode* plist)

}// 雙向煉表頭插

void

listpushfront

(listnode* plist, ltdatatype x)

// 雙向煉表頭刪

void

listpopfront

(listnode* plist)

// 雙向鍊錶查詢

listnode*

listfind

(listnode* plist, ltdatatype x)

first = first->_next;

}return

null;}

// 雙向鍊錶在pos的前面進行插入

void

listinsert

(listnode* pos, ltdatatype x)

// 雙向鍊錶刪除pos位置的節點

void

listerase

(listnode* pos)

dlinkedlist.h

#pragma once

#include

#include

// 帶頭+雙向+迴圈鍊錶增刪查改實現

typedef

int ltdatatype;

typedef

struct listnode

listnode;

// 建立返回鍊錶的頭結點.

listnode*

listcreate()

;// 雙向鍊錶銷毀

void

listdestory

(listnode* plist)

;// 雙向鍊錶列印

void

listprint

(listnode* plist)

;// 雙向鍊錶尾插

void

listpushback

(listnode* plist, ltdatatype x)

;// 雙向鍊錶尾刪

void

listpopback

(listnode* plist)

;// 雙向煉表頭插

void

listpushfront

(listnode* plist, ltdatatype x)

;// 雙向煉表頭刪

void

listpopfront

(listnode* plist)

;// 雙向鍊錶查詢

listnode*

listfind

(listnode* plist, ltdatatype x)

;// 雙向鍊錶在pos的前面進行插入

void

listinsert

(listnode* pos, ltdatatype x)

;// 雙向鍊錶刪除pos位置的節點

void

listerase

(listnode* pos)

;

雙向鍊錶和雙向迴圈鍊錶

和單向鍊錶相比,多了乙個前驅結點。如果他為空,那麼next和prior都指向自己。而對於雙迴圈鍊錶,只需要最後乙個元素的next指向head next,head next的prior指向最後乙個節點即可。新節點s插入鍊錶,s next給p結點,s prior給p prior,然後,p prior n...

迴圈鍊錶,雙向鍊錶

迴圈鍊錶 迴圈鍊錶與順序鍊錶之間的區別 迴圈鍊錶最後乙個資料的next指標域不為空,而是指向頭結點,其他基本操作大體相同,只是在判斷表結束的條件變為判斷節點的引用域是否為頭引用 雙向鍊錶 author neosong date oct 10,2017 4 43 01 pm program of in...

鍊錶 雙向迴圈鍊錶

雙向迴圈鍊錶與單鏈表一樣,都是邏輯連續 物理不連續的儲存方式,但它的效果要遠遠優於單鏈表,其結構如下 雙向迴圈鍊錶首先要有乙個頭節點,頭節點中不存放資料,真正的資料從頭節點的下乙個節點開始存放 然後每乙個節點都有兩個指標,分別指向前乙個節點和後乙個節點 最後頭尾相連,就成了雙向迴圈鍊錶。includ...