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