数据库之双向链表

一、双向链表的定义

单链表的结点都只有一个指向下一个结点的指针单链表的数据元素无法直接访问其前驱元素逆序访问单链表中的元素是极其耗时的操作!

len = LinkList_Length(list);
for (i=len-1; len>=0; i++) //O(n)
{
	LinkListNode *p = LinkList_Get(list, i); //O(n)
	//访问数据元素p中的元素
}
双向链表的定义: 在单链表的结点中增加一个指向其前驱的 pre 指针


二、双向链表功能和操作

创建链表

1.销毁链表

2.获取链表长度

3.清空链表

4.获取第pos个元素操作

5.插入元素到位置pos

6.删除位置pos处的元素


三、设计和实现

1.插入操作

数据库之双向链表_第1张图片

2.删除操作

数据库之双向链表_第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);


四、有点和缺点

优点:双向链表在单链表的基础上增加了指向前驱的指针,功能上双向链表可以完全取代单链表的使用,循环链表的NextPreCurrent操作可以高效的遍历链表中的所有元素;

缺点:代码复杂






你可能感兴趣的:(C++)