#include"DualLinkList.h"
#include<iostream>
#include<cstdio>
using namespace std;
//初始化双向链表
status InitDualLinkListList(DualLinkListList &l)
{
if(l=(DualLinkListList)malloc(sizeof(DualLinkListNode)))//如果分配成功,设置节点
{l->next=NULL;
return 1;
}
else
return 0;//表示失败
}
//销毁链表
void DestroyDualLinkListList(DualLinkListList &l)
{
DualLinkListList p=l,q;
while(p)
{
q=p->next ;
free(p);
p=q;
}
l=NULL;
}
//清空链表
void ClearDualLinkListList(DualLinkListList &l)
{
DualLinkListList p=l->next ,q;
while(p)
{
q=p->next ;
free(p);
p=q;
}
l->next =l->prior=l;
}
//获取双向链表的长度
//如果链表只有头结点,那么长度就为0
int DualLinkListListLength(DualLinkListList l)
{ DualLinkListList p=l->next;
int i=0;
while(p)
{ i++;
p=p->next ;
}
return i;
}
//判断链表是否为空
bool DualLinkListListEmpty(DualLinkListList l)
{
return (l->next==NULL);
}
//获取当前位置的数据
status GetDualLinkListListElem(DualLinkListList l,int i,ElemType &e)
{ int k=0;
DualLinkListList p=l->next;
if(i<1||i>DualLinkListListLength(l))
return 0;
//1,寻找第i个节点
while(p&&k<i)
k++,p=p->next;
e =p->data ;
return 1;
}
//添加数据到双向链表中
status InsertDualLinkListList(DualLinkListList &l,int i,ElemType e)
{
int k=0;
DualLinkListList p;
DualLinkListList q=new DualLinkListNode[sizeof(DualLinkListNode)];//分配空间
p=l;
if(i<1||i>DualLinkListListLength(l)+1)
return 0;
while(p->next&&k<i)
k++,p=p->next;
if(DualLinkListListLength(l)==0&&i==1)
{ q->data=e;
l->next=q;
q->prior=l;
q->next=NULL;
}
else if(DualLinkListListLength(l)!=0&&i==1)
{q->data=e;
q->next=l->next;
q->prior=l;
q->next->prior=q;
l->next=q;
}
else
{
q->data=e;
q->prior=p->prior ;
p->prior->next=q;
q->next=p;
p->prior=q;
}
return 1;
}
//删除双向链表的某一位置的数据
status DeleteDualLinkListList(DualLinkListList &l,int i)
{
int k=0;
DualLinkListList p=l->next;
if(i<1||i>DualLinkListListLength(l))
return 0;
//1,寻找第i-1个节点
while(p&&k<i-1)
k++,p=p->next;
p->prior->next=p->next;
p->next->prior=p->prior;
delete p;
return 1;
}
//打印当前链表的数据
void PrintDualLinkListList(DualLinkListList l)
{
DualLinkListList p=l->next ;
int i=1;
while(p)
{
cout<<p->data<<" " ;
if(i%5==0)
cout<<endl;
p=p->next,i++ ;
}
}