#include<stdlib.h>
#include<iostream.h>
#include<malloc.h>
typedef int ElemType;
typedef struct DNode
{
ElemType data;
struct DNode *next;
struct DNode *prior;
}DLinkList;
void CreateListF(DLinkList *&L,ElemType a[],int n)
{
int i;
DLinkList *s;
L=(DLinkList *)malloc(sizeof(DLinkList));
L->next=L->prior=NULL;
for(i=0;i<n;i++)//双链表的创建与单链表的不同之处在于再将L的后指针指向s之前要判断L->next是否为空,若不为空将L->next的前区指针指向s;
{
s=(DLinkList *)malloc(sizeof(DLinkList));
s->data=a[i];
s->next=L->next;
if(L->next!=NULL)
L->next->prior=s;
L->next=s;
s->prior=L;
}
}
void CreateListR(DLinkList *&L,ElemType a[],int n)
{
int i;
DLinkList *s,*r;
L=(DLinkList *)malloc(sizeof(DLinkList));
L->next=L->prior=NULL;
r=L;
for(i=0;i<n;i++)
{
s=(DLinkList *)malloc(sizeof(DLinkList));
s->data=a[i];
r->next=s;
s->prior=r;
r=s;
}
r->next=NULL;
}
bool ListInsert(DLinkList *&L,int i,ElemType e)
{
DLinkList *s=L,*r;
i--;
while(i&&s!=NULL)
{
s=s->next;
i--;
}
if(s==NULL)
return false;
else
{
r=(DLinkList *)malloc(sizeof(DLinkList));
r->data=e;
r->next=s->next;
if(s->next!=NULL)
s->next->prior=r;
s->next=r;
r->prior=s;
return true;
}
}
bool ListDelete(DLinkList *&L,int i,ElemType &e)
{
i--;
DLinkList *s=L,*r;
while(i&&s!=NULL)
{
s=s->next;
i--;
}
if(s==NULL||s->next==NULL)
return false;
r=s->next;
s->next=r->next;
if(r->next!=NULL)
r->next->prior=s;
e=r->data;
free(r);
return true;
}
void DispDlinklist(DLinkList *L)
{
DLinkList *r=L->next;
while(r!=NULL)
{
cout<<r->data<<" ";
r=r->next;
}
cout<<endl;
}
int main()
{
DLinkList *L;
int e;
int a[]={1,2,3,4};
CreateListF(L,a,4);
DispDlinklist(L);
ListInsert(L,5,5);
DispDlinklist(L);
ListDelete(L,5,e);
cout<<e<<endl;
DispDlinklist(L);
CreateListR(L,a,4);
DispDlinklist(L);
ListInsert(L,5,5);
DispDlinklist(L);
ListDelete(L,5,e);
cout<<e<<endl;
DispDlinklist(L);
return 0;
}
数据结构第四版(P47~50)
最新推荐文章于 2020-11-07 11:38:30 发布