代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
double a;
double b;
}Elemtype;
typedef struct LNode
{
Elemtype datas;
struct LNode *prior;
struct LNode *next;
}*LinkList;
main();
void jie_mian_system();
void scanfList(LinkList *a0);
void Delete_datas(LinkList *a);
void jiemian_datas();
void FputsList(LinkList *L);
void PutsList(LinkList *L);
void ListInsert2(LinkList *L,int a,Elemtype e);
void GetsList(Elemtype *e);
void DeleteList(LinkList *L,int i);
main()
{
jie_mian_system();
return 0;
}
void jie_mian_system()
{
char a[]="Math Dash的双向链表数字管理系统(试运行)";
char b[sizeof(a)+6];
sprintf(b,"title %s",a);
system(b);
puts(a);
jiemian_datas();
}
void jiemian_datas()
{
LinkList a0;
ListInsert(&a0);
for(;;)
{
fflush(stdin);
puts("1.【退 出】\n2.【插 入】\n3.【从前往后查询】\n4.【从后往前查询】\n5.【删 除】\n6.【清 空】");
char a[500];
for(;;)
{
gets(a);
if((strcmp(a,"1")==0)||(strcmp(a,"2")==0)||(strcmp(a,"3")==0)||(strcmp(a,"4")==0)||(strcmp(a,"5")==0)||(strcmp(a,"6")==0))
{
break;
}
else if(strlen(a)==0)
{
printf("内容不能为空!");
}
else
{
printf("输入错误!请重新输入!");
}
printf("重新输入的内容为:");
}
if(strcmp(a,"1")==0)
{
a0->next=NULL;
a0->prior=NULL;
free(a0);
return;
}
if(strcmp(a,"2")==0)
{
scanfList(&a0);
}
if(strcmp(a,"3")==0)
{
PutsList(&a0);
}
if(strcmp(a,"4")==0)
{
FputsList(&a0);
}
if(strcmp(a,"5")==0)
{
Delete_datas(&a0);
}
if(strcmp(a,"6")==0)
{
ListInsert(&a0);
printf("清空成功!\n");
}
system("pause");
}
}
void ListInsert(LinkList *a)
{
*a=(struct LNode*)malloc(sizeof(struct LNode));
(*a)->prior=NULL;
LinkList L;
L=(struct LNode*)malloc(sizeof(struct LNode));
L->next=NULL;
L->prior=*a;
(*a)->next=L;
}
void scanfList(LinkList *a0)
{
Elemtype e;
GetsList(&e);
int b;
double c;
puts("请输入位置");
while((scanf("%lf",&c)!=1)||((int)c!=c))
{
getchar();
fflush(stdin);
printf("输入错误!请重新输入!重新输入的内容为:");
}
b=(int)c;
ListInsert2(&(*a0),b,e);
}
void Delete_datas(LinkList *a)
{
int b;
double c;
puts("请输入位置");
while((scanf("%lf",&c)!=1)||((int)c!=c))
{
getchar();
fflush(stdin);
printf("输入错误!请重新输入!重新输入的内容为:");
}
b=(int)c;
DeleteList(&(*a),b);
}
void GetsList(Elemtype *e)
{
puts("请输入第一个数");
double a0,b0;
while(scanf("%lf",&a0)!=1)
{
getchar();
fflush(stdin);
printf("输入错误,请重新输入,重新输入的内容为:");
}
puts("请输入第二个数");
while(scanf("%lf",&b0)!=1)
{
getchar();
fflush(stdin);
printf("输入错误,请重新输入,重新输入的内容为:");
}
e->a=a0;
e->b=b0;
}
void PutsList(LinkList *L)
{
LinkList a;
a=(*L)->next;
if(!a->next)
{
printf("无信息\n");
return;
}
int s=0;
while(a->next)
{
s++;
printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
a=a->next;
}
}
void FputsList(LinkList *L)
{
LinkList a;
a=(*L)->next;
if(!a->next)
{
printf("无信息\n");
return;
}
while(a->next->next)
{
a=a->next;
}
int s=0;
while(a->prior)
{
s++;
printf("%d:%lf\t%lf\n",s,a->datas.a,a->datas.b);
a=a->prior;
}
}
void ListInsert2(LinkList *L,int a,Elemtype e)
{
LinkList k=(*L)->next;
int j=0;
while(k&&(j<a-1))
{
k=k->next;
}
if((!k)||(j>a-1))
{
printf("插入失败!\n");
return;
}
LinkList o;
o=(struct LNode*)malloc(sizeof(struct LNode));
o->datas=e;
o->prior=k->prior;
k->prior->next=o;
o->next=k;
k->prior=o;
printf("插入成功!\n");
}
void DeleteList(LinkList *L,int i)
{
LinkList a=(*L)->next;
int j=0;
while((a->next)&&(j<i-1))
{
a=a->next;
}
if(!(a->next)||(j>i-1))
{
printf("删除失败!\n");
return;
}
a->prior->next=a->next;
a->next->prior=a->prior;
free(a);
printf("删除成功!\n");
}
程序运行结果