我的双向链表管理系统(供参考)

这是一个C语言实现的双向链表数字管理系统,包括插入、查询、删除和清空等操作。用户可以输入数字对并选择相应操作,系统会根据用户的选择执行对应功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码如下:

#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");
}

程序运行结果

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值