C語言實現雙向鍊錶

2021-09-07 23:23:46 字數 1677 閱讀 6217

1.定義兩個結構體,乙個表示鍊錶的乙個單元,另乙個表示鍊錶的頭結點;

2.鍊錶的初始化(必須讓頭結點的next和prev指向自己)、清除(不刪除頭結點)、銷毀(刪除頭結點);

3.增操作:每次增加需要開闢乙個單元,所以直接建立乙個函式用來建立單元;頭插、尾插、pos結點之前插;

4.刪操作:分為三種:刪除pos結點,頭刪(不是頭結點)、尾刪,只需要完成刪除pos結點,對頭刪和尾刪呼叫它;

5.改操作:找到結點,直接修改val的值就可以;

6.查操作:通過查詢val的值來查詢結點;

7.列印:檢測**實現是否正確;

#pragma once

#include #include #include typedef int dldatatype;

typedef struct dlistnode

dlistnode;

typedef struct

dlist;

//內部介面

dlistnode* dlistnodebuy(dldatatype val)

//初始化、銷毀

void dlistinit(dlist* dlist)

//清除,不清楚頭結點

void dlistclear(dlist* dlist)

dlist->head->next = dlist->head;

dlist->head->prev = dlist->head;

}//銷毀

void dlistdestroy(dlist* dlist)

//增刪改查

//頭插

void dlistpushfront(dlist* dlist, dldatatype val)

#if 0

void dlistpushfront(dlist* dlist, dldatatype val)

#endif

//尾插

//空也可以

void dlistpushback(dlist* dlist, dldatatype val)

#if 0

void dlistpushback(dlist* dlist, dldatatype val)

#endif

//在pos之前做插入

void dlistinsert(dlistnode* pos, dldatatype val)

//頭刪

void dlistpopfront(dlist* dlist)

#if 0

void dlistpopfront(dlist* dlist)

#endif

//尾刪

void dlistpopback(dlist* dlist)

#if 0

void dlistpopback(dlist* dlist)

#endif

//刪除pos結點,pos不是頭結點

void dlisterase(dlistnode* pos)

//查詢

dlistnode* dlsitfind(dlist* dlist, dldatatype val)

} return null;

}//列印

void dlistprint(dlist* dlist)

printf("\n");

}

雙向鍊錶C語言實現

ifndef stdlist h define stdlist h typedef struct tagstdnode stdnode,lpstdnode typedef struct tagstdlist stdlist,lpstdlist 鍊錶資料結構 struct tagstdnode 鍊錶節...

c語言實現雙向鍊錶

單向鍊錶有一定的缺陷,其中乙個就是只能一條路走到黑,只能前進不能後退,但雙向鍊錶就解決了這一問題 include include typedef struct node node,linklist void create list tail linklist l 頭插法建立 void create ...

C語言實現雙向鍊錶

linklist.h ifndef linklist h define linklist h 節點 包含前置指標和後置指標 struct listnode struct list define listnextnode x x x next null define listhead x x x he...