wsdmzz 发表于 2019-3-14 14:47

c 信息管理系统链表

#include<stdio.h>
#include<malloc.h>
typedef struct student{
        int num;
        char name;
        float score;
        struct student *next;
}LinkList;

//创建链表并初始化
LinkList *creat(int n)
{
        int i;
       
        LinkList *head,*newer,*end;//头节点 新节点 尾节点
        head = (LinkList *)malloc(sizeof(LinkList));//给head分配地址
        end = head;
        for(i = 0;i < n;i++)
        {
                newer = (LinkList *)malloc(sizeof(LinkList));
                scanf("学号%d,姓名%s,成绩%f",newer->num,newer->name,newer->score);
                end->next = newer;
                end = newer;
        }
        end->next = NULL;//结束创建
        return head;
}

//头插入链表节点
void insert(LinkList *list, int n)
{
        LinkList *t = list,*p;
        int i=0;
        while(i < n && t != NULL)//循环整个链表
        {
                t = t->next;
                i++;
        }
        if(t != NULL)
        {
                p = (LinkList *)malloc(sizeof(LinkList));
                printf("输入要插入的值:");
                scanf("%d,%s,%f",p->num,p->name,p->score);
                p->next = t->next;//填充p节点的指针域,也就是说把p的指针域指向t的下一个节点
                t->next = p;   //填充t节点的指针域,把t的指针域重新指向p
        }
        else
        {
                printf("节点不存在\n");
        }
}
//修改链表节点
void change(LinkList *list,int n)
{
        LinkList *t = list;
        int i=0;
        while(i < n && t != NULL)//循环整个链表
        {
                t = t->next;
                i++;
        }
        if(t != NULL)
        {
                printf("输入要修改的值:");
                scanf("%d,%s,%f",t->num,t->name,t->score);
        }
        else
        {
                printf("节点不存在\n");
        }
}
//删除链表节点
void delet(LinkList *list, int n)
{
        LinkList *t = list,*p;
        int i=0;
        while(i < n && t != NULL)//循环整个链表
        {
                t = t->next;
                i++;
        }
        if(t != NULL)
        {
                p->next = t->next;
                free(t);
        }
        else
        {
                printf("节点不存在\n");
        }
}
//打印链表
void display(LinkList *h)
{
        while (h->next != NULL) {

                h = h->next;

                printf("%d,%s,%f\n",h->num,h->name,h->score);

        }
}
//提供选项的菜单函数
void menu()         
{

        printf("***************************************************************\n");
        printf("* 打印 插入    修改   删除 \n");
        printf("***************************************************************\n");
}
int main(void)
{
        int n,x=1;
        LinkList *a;//定义结构体类型变量
        printf("输入链表节点的个数:");
        scanf("%d",&n);
        a=creat(n);
       

        while(x)
        {
                menu();
                printf("给出想要操作的序号:");
                scanf("%d",&x);

                switch(x)
                {
                case 0:
                        display(a);
                        break;
                case 1:
                        insert(a,n);
                        break;
                case 2:
                        change(a,n);
                        break;
                case 3:
                        delet(a,n);
                        break;
                default:
            printf("重新输入\n");
            break;

                }
        }
        return 0;
}

页: [1]
查看完整版本: c 信息管理系统链表