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...