双向链表

本文介绍了双向链表的概念,展示了如何初始化、插入、删除元素以及反转和复制双向链表。通过C语言代码实现,包括头文件和源文件,详细解释了每个操作的过程。
摘要由CSDN通过智能技术生成

双向链表顾名思义它是一个链表,而且是一个双向的,双向的意思就是一个节点即引用了前一个节点也引用了后一个节点,他可以双向遍历,和单向链表一样只不过每个节点比单向链表多了一个前节点的引用

 

头文件:

#ifndef DOUBLE_LINK_LIST_H

#define DOUBLE_LINK_LIST_H

#include <stdio.h>

 

 

#define dlist_size(list) ((list)->size)

#define dlist_head(list) ((list)->head)

#define dlist_tail(list) ((list)->tail)

#define dlist_is_head(element) ((element)->pre==NULL)

#define dlist_is_tail(element) ((element)->next==NULL)

#define dlist_data(element) ((element)->data)

#define dlist_next(element) ((element)->next)

#define dlist_pre(element) ((element)->pre)

 

typedef struct DoubleLinkListElement_{

    void * data;

    struct DoubleLinkListElement_* pre;

    struct DoubleLinkListElement_ *next;

} DoubleLinkListElement,*DoubleLinkListElementP;

 

typedef struct DoubleLinkList_{

    int size;

    void (*destroy)(void*data);

    DoubleLinkListElementP head;

    DoubleLinkListElementP tail;

}DoubleLinkList,*DoubleLinkListP;

 

void dlist_init(DoubleLinkListP list,void (*destroy)(void *data));

void dlist_destroy(DoubleLinkListP list);

int dlist_ins_next(DoubleLinkListP list,DoubleLinkListElementP element,void *data);

int dlist_ins_pre(DoubleLinkListP list,DoubleLinkListElementP element,void *data);

int dlist_rm(DoubleLinkListP list,DoubleLinkListElementP element,void**data);

DoubleLinkListP reverse_copy(const DoubleLinkListP list);

void reverse(DoubleLinkListP list);

 

#endif//DOUBLE_LINK_LIST_H

 

源文件:

#include "double_link_li

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值