数据库之双向链表
2015-07-28 10:02
447 查看
一、双向链表的定义
单链表的结点都只有一个指向下一个结点的指针,单链表的数据元素无法直接访问其前驱元素,逆序访问单链表中的元素是极其耗时的操作!
len = LinkList_Length(list);
for (i=len-1; len>=0; i++) //O(n)
{
<span style="white-space:pre"> </span>LinkListNode *p = LinkList_Get(list, i); //O(n)
<span style="white-space:pre"> </span>//访问数据元素p中的元素
}
双向链表的定义:在单链表的结点中增加一个指向其前驱的pre指针
二、双向链表功能和操作
创建链表
1.销毁链表
2.获取链表长度
3.清空链表
4.获取第pos个元素操作
5.插入元素到位置pos
6.删除位置pos处的元素
三、设计和实现
1.插入操作
2.删除操作
获取当前游标指向的数据元素
DLinkListNode* DLinkList_Current(DLinkList* list);
将游标重置指向链表中的第一个数据元素
DLinkListNode* DLinkList_Reset(DLinkList* list);
将游标移动指向到链表中的下一个数据元素
DLinkListNode* DLinkList_Next(DLinkList* list);
将游标移动指向到链表中的上一个数据元素
DLinkListNode* DLinkList_Pre(DLinkList* list);
直接指定删除链表中的某个数据元素
DLinkListNode* DLinkList_DeleteNode(DLinkList* list, DLinkListNode* node);
四、有点和缺点
优点:双向链表在单链表的基础上增加了指向前驱的指针,功能上双向链表可以完全取代单链表的使用,循环链表的Next,Pre和Current操作可以高效的遍历链表中的所有元素;
缺点:代码复杂
单链表的结点都只有一个指向下一个结点的指针,单链表的数据元素无法直接访问其前驱元素,逆序访问单链表中的元素是极其耗时的操作!
len = LinkList_Length(list);
for (i=len-1; len>=0; i++) //O(n)
{
<span style="white-space:pre"> </span>LinkListNode *p = LinkList_Get(list, i); //O(n)
<span style="white-space:pre"> </span>//访问数据元素p中的元素
}
双向链表的定义:在单链表的结点中增加一个指向其前驱的pre指针
二、双向链表功能和操作
创建链表
1.销毁链表
2.获取链表长度
3.清空链表
4.获取第pos个元素操作
5.插入元素到位置pos
6.删除位置pos处的元素
三、设计和实现
1.插入操作
2.删除操作
获取当前游标指向的数据元素
DLinkListNode* DLinkList_Current(DLinkList* list);
将游标重置指向链表中的第一个数据元素
DLinkListNode* DLinkList_Reset(DLinkList* list);
将游标移动指向到链表中的下一个数据元素
DLinkListNode* DLinkList_Next(DLinkList* list);
将游标移动指向到链表中的上一个数据元素
DLinkListNode* DLinkList_Pre(DLinkList* list);
直接指定删除链表中的某个数据元素
DLinkListNode* DLinkList_DeleteNode(DLinkList* list, DLinkListNode* node);
四、有点和缺点
优点:双向链表在单链表的基础上增加了指向前驱的指针,功能上双向链表可以完全取代单链表的使用,循环链表的Next,Pre和Current操作可以高效的遍历链表中的所有元素;
缺点:代码复杂
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- JavaScript中数据结构与算法(五):经典KMP算法