
双向链表的实现和分析

双向链表的组成: 1.数据成员; 2.下一个指向下一个元素的指针; 3.上一个指向上一个元素的指针.
数据结构DListElmt: 表示双向链表中的单个元素(节点).

数据结构DList: 表示双向链表的数据结构. 该结构的成员类似于前面介绍的单个链表.
/*dlist.h*/ #ifndef DLIST_H #define DLIST_H /*定义双向链表中的元素*/ typedef struct DListLemt_ { void *data; struct DListElmt_ *prev; struct DlistElmt_ *next; }DListElmt; /*定义双向链表*/ typedef struct DList_ { int size; int (*match)(const void *key1,const void *key2); void (*destroy)(void *data); DListElmt *head; DlistElmt *tail; }DList; /*公共接口*/ void dlist_init(DList *list,void (*destroy)(void *data)) ; void dlist_destroy(DList *list); int dlist_ins_next(DList *list,DListElmt *element,const void *data); int dlist_ins_prev(Dlist *list,DListElmt *element,const void *data); int dlist_remove(DList *list,DlistElmt *element,void **data); #define dlist_size(list)((list)->size) #define dlist_head(list)((list)->head) #define dlist_tail(list)((list)->tail) #define dlist_is_head(element)((element)->prev == NULL ? 1 : 0) #define dlist_is_tail(element)((element)->next == NULL ? 1 : 0) #define dlist_data(element)((element)->data) #define dlist_next(element)((element)->next) #define dlist_prev(element)((element)->prev) #endif

示例2: 双链表抽象数据类型的实现
#c:6:8:c:f:7:c:3:d:f:9:3:5:4:e:6:1双向链表结构:1:1:5:b:d:0:2:7:9:a:1:4:7:6双向链表结构:8#


发布于@ 2017-11-19 21: 27DreamGo阅读(...)评论(...)编辑
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-151715-1.html
淘宝是假货的天堂