严凯 发表于 2021-3-31 18:09:30

快乐链表

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<string.h>
int y=0;
typedef struct student
{
        char name;
        char number;
        int score;
        struct student *next;
}STU;
/*int lenth(STU **head)
{
        int k=0;
        STU *stu1;
        stu1=*head;
        while(stu1!=NULL)
        {
                stu1=stu1->next;
                k++;
        }
        printf("%d",k);
        return k;
}*/
void insert(STU *head)
{
        STU *stu1,*s;
        stu1=head;
        int i,k;
        s=(STU *)malloc(sizeof(STU));
        printf("请问你要在哪里插入?");
        scanf("%d",&i);
        if(i>y||i<=0)
        {
                printf("插入位置出错!");
        }
        else
        {
                printf("请输入姓名");
        scanf("%s",s->name);
        printf("请输入学号");
        scanf("%s",s->number);
        printf("请输入分数");
        scanf("%d",&s->score);
        if(i==1)
        {
                s->next=stu1;
                s=head;
                printf("插入完成");
        }
        else{
                for(k=1;k!=i;k++)
                {
                        stu1=stu1->next;
                }
                s->next=stu1->next;
                stu1->next=s;
                y++;
                printf("插入完成!");
        }
        }
}
void remove(STU *head)
{
        STU *stu,*r,*e;
        stu=head;
        int i,k;
        printf("你要删除哪一个?(输入他的位置)");
        scanf("%d",&i);
        if(i<=0||i>y)
        {
                printf("删除位置有错!");
        }
        else
        {
                for(k=1;stu->next!=NULL&&k!=i;k++)
                {
                        stu=stu->next;
                }
                r=stu->next;
                stu->next=r->next;
                e=r;
                free(e);
                y--;
        }
}
void seek(STU *head)
{
        char number1;
        printf("请输入你要查找的学号:");
        scanf("%s",number1);
        STU *stu;;
        stu=head;
        while(stu!=NULL)
        {
                if(strcmp(stu->number,number1)!=0)
                {
                        stu=stu->next;
                }
                else
                {
                        printf("你要查找的人的姓名是%s\n",stu->name);
                        printf("这个人的学号是%s\n",stu->number);
                        printf("这个人的成绩是%d\n",stu->score);
                        break;
                }
        }
}
void getInput(STU *stu)
{
        printf("请输入姓名");
        scanf("%s",stu->name);
        printf("请输入学号");
        scanf("%s",stu->number);
        printf("请输入分数");
        scanf("%d",&stu->score);
        y++;
}
void add(STU **head)
{
        STU *stu,*temp;
        stu=(STU *)(malloc(sizeof(STU)));
        if(stu==NULL)
        {
                printf("失败!");
                exit(1);
        }
        getInput(stu);
        if(*head!=NULL)
        {
                temp=*head;
                *head=stu;
                stu->next=temp;
        }
        else
        {
                *head=stu;
                stu=stu->next;
        }
}
void print(STU *head)
{
        STU *stu;
        stu=head;
        while(stu!=NULL)
        {
                printf("姓名:%s\n",stu->name);
                printf("学号:%s\n",stu->number);
                printf("分数:%d\n",stu->score);
                stu=stu->next;
        }
}
void quit(STU *head)
{
        STU *stu,*temp;
        stu=head;
        while(stu!=NULL)
        {
                temp=stu;
                stu=stu->next;
                free(temp);
        }
}
int main()
{
        int i=0;
        STU *head;
        while(i<16)
        {
                printf("*");
                printf("-");
                i++;
        }
        printf("我有以下操作!\n");
        printf("\t输入一个学生的信息(1)\t");
        printf("插入某一学生的信息(2)\n");
        printf("\t删除某一学生的信息(3)\t");
        printf("查找某个学生的信息(按学号)(4)\n");
        printf("\t打印(5)\t");
        printf("退出(6)\n");
        while(i!=6)
        {
                printf("你要进行什么操作?");
                scanf("%d",&i);
        switch(i)
        {
        case 1:add(&head);break;
        case 2:insert(head);break;
        case 3:remove(head);break;
        case 4:seek(head);break;
        case 5:print(head);break;
        case 6:quit(head);break;
        }
        }
        return 0;
}



//说实话,感觉我这个一大堆的错啊,但是还是可以运行的,比如,插入功能,我先输入了两个学生的信息,当我再插入一个学生信息的时候,我选择插入位置再第一个位置,就会插入失败(就是没有插入进去),但是我选择插入在第二个位置的时候又插入进去的,这个程序给我的感觉就是,我让他插入,删除,某些位置,它会找不到,我给它的位置。大佬,求救!

人造人 发表于 2021-4-7 11:51:01

提供一下
1. 这个程序的一组或多组输入
2. 这些输入对应的输出
3. 你期望的输出

严凯 发表于 2021-4-7 15:38:36

额,看不懂。。。。
页: [1]
查看完整版本: 快乐链表