資料結構 雙向鍊錶的c語言實現

2021-09-28 11:23:36 字數 3119 閱讀 4117

dlinklist.h

#ifndef _dlinklist_h_

#define _dlinklist_h_

#include

typedef

void dlinklist;

typedef

struct _tag_dlinklistnode

dlinklistnode;

dlinklist*

dlinklist_create()

;void

dlinklist_destroy

(dlinklist* list)

;void

dlinklist_clear

(dlinklist* list)

;int

dlinklist_length

(dlinklist* list)

;int

dlinklist_insert

(dlinklist* list, dlinklistnode* node,

int pos)

;dlinklistnode*

dlinklist_get

(dlinklist* list,

int pos)

;dlinklistnode*

dlinklist_delete

(dlinklist*list,

int pos)

;dlinklistnode*

dlinklist_deletenode

(dlinklist*list, dlinklistnode* node)

;dlinklistnode*

dlinklist_reset

(dlinklist* list)

;dlinklistnode*

dlinklist_current

(dlinklist*list)

;dlinklistnode*

dlinklist_next

(dlinklist*list)

;dlinklistnode*

dlinklist_pre

(dlinklist*list)

;#endif

// !_dlinklist_h_

鍊錶結點中有next指標和pre指標

dlinklist.c

#include

"dlinklist.h"

#include

typedef

struct _tag_dlinklist

tdlinklist;

dlinklist*

dlinklist_create()

return ret;

}void

dlinklist_destroy

(dlinklist* list)

}void

dlinklist_clear

(dlinklist* list)

}int

dlinklist_length

(dlinklist *list)

return ret;

}int

dlinklist_insert

(dlinklist* list, dlinklistnode* node,

int pos)

next = current-

>next;

current-

>next = node;

node-

>next = next;

if(next !=

null

)//當鍊表插入第乙個元素,需要特殊處理

node-

>pre = current;

if(slist-

>length ==0)

//若在0位置插入,需要特殊處理,新來結點pre 指向null

if(current ==

(dlinklistnode*

)slist)

slist-

>length++;}

return ret;

}dlinklistnode*

dlinklist_get

(dlinklist* list,

int pos)

ret = current-

>next;

}return ret;

}//插入第乙個節點,刪除的是最後乙個節點,該如何處理

dlinklistnode*

dlinklist_delete

(dlinklist* list,

int pos)

ret = current-

>next;

next = ret-

>next;

current-

>next = next;

if(next !=

null)}

if(slist-

>slider == ret)

slist-

>length--;}

return ret;

}dlinklistnode*

dlinklist_deletenode

(dlinklist* list, dlinklistnode* node)

current = current-

>next;}if

(ret !=

null)}

return ret;

}dlinklistnode*

dlinklist_reset

(dlinklist* list)

return ret;

}dlinklistnode*

dlinklist_current

(dlinklist* list)

return ret;

}dlinklistnode*

dlinklist_pre

(dlinklist* list)

return ret;

}dlinklistnode*

dlinklist_next

(dlinklist* list)

return ret;

}

C語言資料結構 雙向鍊錶的實現

雙向鍊錶對比單向鍊錶增加了乙個指向前乙個節點的指標。雙向鍊錶和單向鍊錶節點的對比 1 單向鍊錶的節點 節點 typedef struct nodenode t 鍊錶的結構體 typedef struct link t 2 雙向鍊錶的節點 typedef struct nodenode t 鍊錶的結構...

資料結構學習筆記 雙向鍊錶(C語言實現)

像前邊寫過的鍊錶都是單向的,每乙個節點只包含資料和下乙個節點的指標,雙向鍊錶則是每個節點包含資料 上乙個節點的指標以及下乙個節點的指標。雙向鍊錶也可以是迴圈鍊錶。如下圖 空的雙向鍊錶 非空的雙向鍊錶 使用雙向鍊錶時,初始化方法和插入 刪除方法都需要在單鏈表基礎上做一些改變,單鏈表的增刪只改變乙個指標...

資料結構雙向鍊錶及基本操作實現 C語言實現

雙向鍊錶的特點 雙向鍊錶相對於單向鍊錶其優點在於其可以同時檢視某個節點的前驅節點和其後繼節點,當然因為乙個節點使用了兩個指標來記錄前後節點的位置,其每個節點占用的記憶體空間自然更大 其實現的基本操作 如下 include include include typedef int elementtype...