双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
#include<iostream>
using namespace std;
// 数据类型结构体
typedef int ElemType;
// 双向循环链表结构体
typedef struct _DualNode
{
ElemType data; // 存储的数据类型
struct _DualNode *prior; // 指向结点的前驱
struct _DualNode *next; // 指向结点的后继
}DualNode, *DuaLinkList;
// 初始化头节点
void InitDualLinkList(DuaLinkList *pHead)
{
*pHead = new DualNode;
if (NULL==*pHead)
{
return;
}
(*pHead)->prior=*pHead;
(*pHead)->next = *pHead;
}
// 获取链表的长度
int GetDualLInkListLength(DuaLinkList pHead)
{
int count = 0;
DuaLinkList nPos = pHead;
while (nPos->next!=pHead)
{
nPos = nPos->next;
count++;
}
return count;
}
// 判读链表是否为空
bool IsEmpty(DuaLinkList pHead)
{
if (pHead->next==pHead||pHead->prior==pHead)
{
return true;
}
else
{
return false;
}
}
// 返回第i个元素的值
ElemType GetElem(DuaLinkList pHead,int index)
{
if (index<=0||index>GetDualLInkListLength(pHead))
{
return -1;
}
for (int i = 0; i<index; i++)
{