資料結構 帶頭雙向迴圈鍊錶的實現

2021-09-27 13:43:00 字數 2395 閱讀 5025

在實際工作中用雙向鍊錶又更多一點, 因為雙向鍊錶比單鏈表效率更高, 雙鏈表結構複雜, 但是使用**實現以後會發現結構會帶來

很多優勢,實現反而簡單了

其實寫了單鏈表之後再看雙鏈表其實非常簡單, 只不過就是多了乙個指標域而已, 再沒有什麼特別難的地方. 我們就直接上**吧

dlist.h

#pragma once

#include #include #include typedef struct node

node;

typedef struct dlist

dlist;

//初始化

void dlistinit(dlist* dl);

//建立乙個結點

node* buynode(int val);

//銷毀

void dlistdestory(dlist* dl);

//頭插

void dlistpushfront1(dlist* dl, int x);

void dlistpushfront2(dlist* dl, int x);

//頭刪

void dlistpopfront(dlist* dl);

//尾插

void dlistpushback1(dlist* dl, int x);

void dlistpushback2(dlist* dl, int x);

//尾刪

void dlistpopback(dlist* dl);

//查詢

node* dlistfind(dlist* dl, int x);

//隨機插入

void dlistinsert(node* pos, int x);

//隨機刪除

void dlisterase(node* pos);

//移除值為val的所有元素

void dlistremove(dlist* dl, int x);

//列印

void dlistprint(dlist* dl);

realize.c

#include "dlist.h"

//初始化

void dlistinit(dlist* dl)

//申請乙個結點

node* buynode(int val)

//銷毀

void dlistdestory(dlist* dl)

free(dl->_head);

dl->_head = null;

}//頭插(1) o(1)

void dlistpushfront1(dlist* dl, int x)

//頭插(2)

void dlistpushfront2(dlist* dl, int x)

//頭刪

void dlistpopfront(dlist* dl)

//尾插(1)

void dlistpushback1(dlist* dl, int x)

//尾插(2)

void dlistpushback2(dlist* dl, int x)

//尾刪

void dlistpopback(dlist* dl)

//隨機插入

void dlistinsert(node* pos, int x)

//隨機刪除

void dlisterase(node* pos)

//移除指定value的所有元素

void dlistremove(dlist* dl, int x)

}//查詢

node* dlistfind(dlist* dl, int x)

cur = cur->_next;

} printf("%d is not exits!!!\n", x);

return null;

}//列印

資料結構 棧的雙向帶頭迴圈鍊錶實現

使用雙向帶頭迴圈鍊錶來表示棧,表頭和表尾均可表示為棧頂,這裡以表頭為棧頂為例。進行入棧操作 頭插 進行出棧操作 頭刪 include include typedef int stdatatype typedef struct lstknode listnode typedef struct stac...

資料結構 雙向迴圈帶頭結點鍊錶

前面我們寫過了不帶頭結點的單鏈表,由於沒有頭結點,在對單鏈表進行頭插 刪的時候需要傳入二級指標 在需要進行尾插 刪的時候,需要先根據頭指標找到頭結點,然後從頭往後遍歷找到最後乙個結點再進行相應操作。而我們今天要寫的雙向迴圈帶頭結點鍊錶,相對於不帶頭結點的單鏈表做增刪時,將會方便許多。typedef ...

資料結構 實現帶頭雙向迴圈鍊錶增刪查改

初始化 listnode listinit clear鍊錶 void listclear listnode phead 摧毀鍊錶 void listdestroy listnode pphead 動態申請乙個節點 並返回指標 listnode buylistnode ltdatatype x 列印 ...