码迷,mamicode.com
首页 > 其他好文 > 详细

C 双向链表

时间:2015-09-13 13:16:21      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

单链表的结点都只有一个指向下一个结点的指针

单链表的数据元素无法直接访问其前驱元素

逆序访问单链表中的元素是极其耗时的操作!

len = LinkList_Length(list);

for (i=len-1; len>=0; i++) //O(n)

{

LinkListNode *p = LinkList_Get(list, i); //O(n)

//访问数据元素p中的元素

//

}

双向链表的定义

在单链表的结点中增加一个指向其前驱的pre指针

技术分享

技术分享

插入操作异常处理

插入第一个元素异常处理

0号位置处插入元素;

删除操作

技术分享

删除操作异常处理

 

双向链表的新操作

获取当前游标指向的数据元素

将游标重置指向链表中的第一个数据元素

将游标移动指向到链表中的下一个数据元素

将游标移动指向到链表中的上一个数据元素

直接指定删除链表中的某个数据元素

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);

技术分享

循环链表插入结点技术场景

技术分享

循环链表删除结点技术场景

技术分享

优点和缺点

优点:双向链表在单链表的基础上增加了指向前驱的指针

功能上双向链表可以完全取代单链表的使用

双向链表的NextPreCurrent操作可以高效的遍历链表中的所有元素

缺点:代码复杂

02 08 10

C 双向链表

标签:

原文地址:http://www.cnblogs.com/yaowen/p/4804556.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!