#include<stdio.h>
#include<stdlib.h>
#define Status int
#define ElemType int
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct DuLNode
{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
} DuLNode,*DuLinkList;
void CreateList_DuL(DuLinkList &L,int n)
{
DuLinkList p;
L=(DuLinkList)malloc(sizeof(DuLNode));
L->prior=L->next=L;
for(int i=0; i<n; i++)
{
p=(DuLinkList)malloc(sizeof(DuLNode));
scanf("%d",&p->data);
p->next=L->next;
p->prior=L;
L->next->prior=p;
L->next=p;
}
}
DuLinkList GetElemP_DuL(DuLinkList L,int i)
{
DuLinkList p;
p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i)
return NULL;
return p;
}
Status ListInsert_DuL(DuLinkList &L,int i,ElemType e)
{
DuLinkList p,s;
if(!(p=GetElemP_DuL(L,i)))
{
return ERROR;
}
if(!(s=(DuLinkList)malloc(sizeof(DuLNode))))
return ERROR;
s->data=e;
s->prior=p->prior;
p->prior->next=s;
s->next=p;
p->prior=s;
return OK;
}
Status ListDelete_DuL(DuLinkList &L,int i,ElemType &e)
{
DuLinkList p;
if(!(p=GetElemP_DuL(L,i)))
return ERROR;
e=p->data;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
return OK;
}
int main()
{
DuLinkList L,p;
int n,i;
ElemType e;
scanf("%d",&n);
CreateList_DuL(L,n);
for(p=L->next; p!=L; p=p->next)
printf("%d ",p->data);
printf("\n");
scanf("%d",&i);
p=GetElemP_DuL(L,i);
printf("e=%d\n",p->data);
scanf("%d%d",&i,&e);
ListInsert_DuL(L,i,e);
for(p=L->next; p!=L; p=p->next)
printf("%d ",p->data);
printf("\n");
scanf("%d",&i);
ListDelete_DuL(L,i,e);
for(p=L->next; p!=L; p=p->next)
printf("%d ",p->data);
printf("\n");
printf("e=%d\n",e);
return 0;
}
双向链表的算法设计和实现(数据结构)
最新推荐文章于 2023-01-28 22:13:11 发布