全自己写的哦,没有看书哦
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ElemType int
typedef int Status;
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
//建表
void Creat(DuLinkList &L,int n)
{
L=(DuLinkList)malloc(sizeof(DuLNode));
L->next=L;
L->prior=L;
DuLinkList p;
int i;
for(i=0;i<n;i++)
{
p=(DuLinkList)malloc(sizeof(DuLNode));
scanf("%d",&(p->data));
p->next=L->next;
p->prior=L;
L->next=p;
p->next->prior=p;
if(i==0) L->prior=p;
}
}
//正序遍历
void TravserFIFO(DuLinkList L)
{
DuLinkList p;
p=L->prior;
for(;p!=L;)
{
printf("%d ",p->data);
p=p->prior;
}
printf("\n");
}
//倒序遍历
void TravserLIFO(DuLinkList L)
{
DuLinkList p;
p=L->next;
for(;p!=L;)
{
printf("%d ",p->data);
p=p->next ;
}
printf("\n");
}
//插入
Status Insert(DuLinkList &L,int i,int e)
{
DuLinkList s,p;
p=L;
s=(DuLinkList )malloc(sizeof(DuLNode));
s->data=e;
int j;
for(j=0;j<i-1;j++)
{
p=p->prior ;
}
p->prior->next=s;
s->prior=p->prior;
s->next=p;
p->prior=s;
return OK;
}
//删除
int Del(DuLinkList &L,int i)
{
DuLinkList p;
p=L;
int j,e;
for(j=0;j<i;j++)
{
p=p->prior ;
}
p->prior->next=p->next;
p->next->prior=p->prior;
e=p->data ;
free(p);
return e;
}
void main()
{
DuLinkList L;
while(1){
printf("1. 构建双向循环链表\n");
printf("2. 正序遍历\n");
printf("3. 倒序遍历\n");
printf("4. 插入元素\n");
printf("5. 删除元素\n");
printf("0. 退出系统\n");
int c;
scanf("%d",&c);
switch(c)
{
case 1:{ //建表
int n;
printf("请输入要输入的元素数目\n");
scanf("%d",&n);
printf("请输入元素:\n");
Creat(L,n);
break;}
case 2:{TravserFIFO(L);break;}
case 3:{TravserLIFO(L); break;}
case 4:{
printf("请输入要输入的数据:\n");
int i,e;
scanf("%d",&e);
printf("请输入要插入的位置(正序):\n");
scanf("%d",&i);
Insert(L,i,e);
break;}
case 5:{
printf("请输入要删除的元素的位置(正序):\n");
int i,e;
scanf("%d",&i);
e=Del(L,i);
printf("%d已被删除\n",e);
break;}
case 0:exit (0);
}
}
}