#include <iostream>
using namespace std;
typedef struct DNode {
int data;
struct DNode *prior;
struct DNode *next;
}DNode,*DLinkList;
void CreatDListR(DLinkList& L,int a[],int n);
DNode* FindDNode(DLinkList&L,int x);
int InsertDNode(DLinkList &L,int index,int e);
int DeleteDNode(DLinkList &L,int i);
void PrintDList(DLinkList L);
int main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
DLinkList DL;
CreatDListR(DL,a,10);
PrintDList(DL);
int ans;
ans=InsertDNode(DL,2,55);
PrintDList(DL);
ans=DeleteDNode(DL,2);
PrintDList(DL);
}
void CreatDListR(DLinkList& L,int a[],int n)
{
L=(DLinkList)malloc(sizeof(DNode));
L->prior=NULL;
L->next=NULL;
DNode*s,*r;
r=L;
int i;
for(i=0;i<n;i++)
{
s=(DNode*)malloc(sizeof(DNode));
s->data=a[i];
s->next=r->next;
if(r->next!=NULL)
r->next->prior=s;
s->prior=r;
r->next=s;
r=s;
}
}
DNode* FindDNode(DLinkList&L,int x)
{
DNode*p=L;
while(p->next!=NULL)
{
if(p->next->data==x)
return p->next;
}
return NULL;
}
int InsertDNode(DLinkList&L,int i,int e)
{
if(i<1)return 0;
DNode*p=L;
int j=0;
while(p->next!=NULL&&j<i-1)
{
p=p->next;
j++;
}
DNode*s=(DNode*)malloc(sizeof(DNode));
s->data=e;
s->next=p->next;
if(p->next!=NULL)
p->next->prior=s;
s->prior=p;
p->next=s;
}
int DeleteDNode(DLinkList &L,int i)
{
if(i<1)return 0;
DNode*p=L->next;
int j=1;
while(p!=NULL&&j<i)
{
p=p->next;
j++;
}
if(p==NULL)return 0;
p->prior->next=p->next;
if(p->next!=NULL)
p->next->prior=p->prior;
return 1;
}
void PrintDList(DLinkList L)
{
DNode *p=L->next;
while(p!=NULL)
{
cout<<p->data<<endl;
p=p->next;
}
}