数据结构 之 带头循环双链表

在数据结构中我们经常会接触到链表,链表也分好多种,带头结点和不带头结点、循环和不循环、单向链表和双向链表
而在众多不同结构的链表中 带头循环双链表可以说是一种最优的链表结构
相比于单链表只能访问当前结点的后续结点的局限性,双链表既可以访问前面结点也可以访问后面结点
其次循环的情况下相比于非循环的链表在访问尾节点时,非循环的链表余姚遍历整个链表才能访问尾节点,而循环链表由于它的循环特性,不用遍历链表,头结点前一个结点就是尾节点,在访问速度上大大优于非循环链表
带头相对于不带头在对链表头插时候不会改变头结点的地址,不带头的每次头插和头删都会改变头指针,而带头结点可以解决这个问题


定义我们双链表结点的结构体,包括三个部分,_next和_prev指针分别指向下一个和前一个结点,_data用来存放数据
typedef  int  DataType ;
typedef  struct  DListNode //结点
{
        struct  DListNode * _next;
        struct  DListNode * _prev;
        DataType  _data;
} DListNode ;

对于双链表的基础操作包括结点的插入,结点的删除,寻找某个结点,打印链表,销毁链表等
DListNode* BuyDListNode( DataType  x ); //创建新结点
DListNode * DListInit(); //双链表初始化
void  DListDestory( DListNode *  head ); //销毁链表
void  DListPrint( DListNode *  head ); //打印链表
void  DListPushBack( DListNode *  head ,  DataType  x ); //尾插
void  DListPushFront( DListNode *  head ,  DataType  x ); //头插
void  DListPopBack( DListNode *  head ); //尾删
void  DListPopFront( DListNode *  head ); //头删
DListNode * DListFind( DListNode *  head ,  DataType  x ); //寻找值为x的结点,返回它的地址
void  DListInsert( DListNode *  pos ,  DataType 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值