c语言双循环链表,双向循环链表头文件C语言

这个东西,是在写斐波那契堆的时候发现的.觉得这东西很好,很好用,很方便.呵呵.所以啊,昨天给实现了,凑代码吗?不高级,实现的细节问题也不多.

呵呵,不多说了,贴出来吧.明天会休息呢,所以来调兵了,玩了会球,感觉不错呢.

/*DoubleCircularLinkedList .h -- 双向循环链表头文件*/

#include

#include

/*明显常量定义*/

#define FALSE (0)

#define TRUE (1)

/*数据类型定义*/

typedef int BOOL ;

typedef int Item ;

typedef struct node

{

Item item ;

struct node * left, * right ;

} Node ;

typedef struct doublecircularlinkedlist

{

Node * list ;

int current ;

} * DoubleCircularLinkedList ;

/*接口函数声明*/

/*操作:创建并初始化一个双向循环链表*/

/*操作前:pl 指向一个双向循环链表*/

/*操作后:如果内存分配成功, 创建并初始化该双向循环链表为空, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL Create_B (DoubleCircularLinkedList * const pl) ;

/*操作:确定一个双向循环链表是否为空*/

/*操作前:pl 指向一个已初始化的双向循环链表*/

/*操作后:如果该双向循环链表为空, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL IsEmpty_B (const DoubleCircularLinkedList * const pl) ;

/*操作:向一个双向循环链表中添加结点*/

/*操作前:pl 指向一个已初始化的双向循环链表, pi 指向待添加元素的数据*/

/*操作前:如果内存分配成功, 向该双向循环链表中添加该元素, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (1)*/

BOOL Insert_B (const DoubleCircularLinkedList * const pl, const Item * const pi) ;

/*操作:确定指定数据是否出现在双向循环链表中*/

/*操作前:pl 指向一个已初始化的双向循环链表, pi 指向待查找数据*/

/*操作后:如果找到该数据, 返回指向数据域为该数据的结点的指针 ; 否则返回 NULL*/

/*时间复杂度: O (N)*/

Node * Find_B (const DoubleCircularLinkedList * const pl, const Item * const pi) ;

/*操作:删除数据域为指定数据的结点*/

/*操作前:pl 指向一个已初始化的双向循环链表, pi 指向待删除数据*/

/*操作后:如果找到该结点, 删除该结点, 返回 TRUE ; 否则返回 FALSE*/

/*时间复杂度:O (N)*/

BOOL Delete_B (const DoubleCircularLinkedList * const pl, const Item * const pi) ;

/*操作:将一个函数依次作用于双向循环链表所有结点1次*/

/*操作前:pl 指向一个已初始化的双向循环链表, pfun 指向一个没有返回值, 接受一个 Node * 类型参数的函数*/

/*操作后:fpun 指向的函数被依次作用于该双向循环链表中所有结点1次*/

/*时间复杂度:O (N)*/

void Traversal_B (const DoubleCircularLinkedList * const pl, void (* pfun) (const Node * const pn)) ;

/*操作:释放一个双向循环链表所占用的内存空间*/

/*操作前:pl 指向一个已初始化的双向循环链表*/

/*操作后:该双向循环链表所占用的内存空间被释放*/

/*时间复杂度:O (N)*/

void Release_B (const DoubleCircularLinkedList * const pl) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值