风und桥 2022-11-23 21:34 采纳率: 86.4%
浏览 5
已结题

为什么插入和删除后的链表输出不了?

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#define ERROR 0
#define OK 1

typedef struct Stu_Node {
    char name[20];
    int number;
    float score;
    struct Stu_Node* next;
}Stu_Node, * LinkList;
//初始化
LinkList InitList(LinkList L)
{
    L = (LinkList)malloc(sizeof(Stu_Node));
    L->next = NULL;
    return L;
}
//头插
void CreateFromHead(LinkList L)
{
    Stu_Node* s;
    int flag = 1;
    char name[20];
    int number;
    float score;

    while (flag)
    {

        printf("请输入学生信息:");
        scanf("%s %d %f", &name, &number, &score);
        if (name != '$' && number != 0 && score != 0)
        {
            s = (Stu_Node*)malloc(sizeof(Stu_Node*));
            strcpy(s->name, name);
            s->number = number;
            s->score = score;
            s->next = L->next;
            L->next = s;
        }
        else flag = 0;
    }
}

//查找
//查找第i个结点,
Stu_Node* Get(LinkList L, int i)
{
    Stu_Node* p;
    int j = 1;
    p = L;
    while (p->next != NULL && j < i)
    {
        p = p->next;
        j++;
    }
    if (i == j)
    {
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
    }
    else
        return NULL;
}
//查找值等于key的结点
Stu_Node* Locate(LinkList L, int number)
{
    Stu_Node* p;
    p = L->next;
    while (p != NULL)
    {
        if (p->number != number)
            p = p->next;
        else
            break;
        printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
    }
    
    

}
//插入
int InsList(LinkList L, int i, char name, int number, float score)
{
    Stu_Node* pre, * s;
    int k;
    pre = L;
    k = 0;
    while (pre != NULL && k < i - 1)
    {
        pre = pre->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("插入的位置不合理");
        return ERROR;
    }
    s = (Stu_Node*)malloc(sizeof(Stu_Node*));
    strcpy(s->name, name);
    s->number = number;
    s->score = score;
    s->next = pre->next;
    pre->next = s;
    return OK;
}
//删除
int DelList(LinkList L, int i, char *name,int *number,float *score)
{
    Stu_Node* p, * r;
    int k;
    p = L;
    k = 0;
    while (p->next != NULL && k < i - 1)
    {
        p = p->next;
        k++;
    }
    if (k != i - 1)
    {
        printf("删除结点的位置i不合理");
        return ERROR;
    }
    r = p->next;
    p->next = p->next->next;
    *name = r->name;
    *number = r->number;
    *score = r->score;
    free(r);
    return OK;
}
//求链表长度
int ListLength(LinkList L)
{
    Stu_Node* p;
    p = L->next;
    int j = 0;
    while (p != NULL)
    {
        p = p->next;
        j++;
    }
    printf("学生的总人数为%d", j);
    return j;
}


//输出
void Printlist(LinkList L)
{
    printf("学生链表的内容为:\n");
    printf("姓名 学号 成绩\n");
    L = L->next;
    while (L != NULL)
    {

        printf("%s %d %f\n", L->name, L->number, L->score);
        L = L->next;
    }

}

int main()
{
    LinkList L = NULL;
    int i;
    int x;
    char name;
    int number;
    float score;
    char *name1=NULL;
    int *number1=NULL;
    float *score1=NULL;
    L = InitList(L);
    
    printf("头插法创建学生链表\n");
    CreateFromHead(L);
    Printlist(L);
    
    printf("请输入要查询学生的序号:");
    scanf("%d", &i);
    Get(L,i);
    
    printf("请输入要查询的学生的学号:");
    scanf("%d", &number);
    Locate(L,number);
    
    printf("请输入要插入的位置及要插入的学生信息:");
    scanf("%d %s %d %f", &x, &name, &number, &score);
    InsList(L, x, name, number, score);
    Printlist(L);
    
    printf("请输入要删除的学生序号及信息:");
    scanf("%d &s %d %f",&i,&name, &number,&score);
    DelList(L, i, name1, number1, score1);
    Printlist(L);
    
    ListLength(L);





}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-11-23 21:43
    关注

    if (name != '$' && number != 0 && score != 0) 这都不对的。name是字符串,'$'是字符啊。

    
    
    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <string.h>
    #define ERROR 0
    #define OK 1
    typedef struct Stu_Node {
        char name[20];
        int number;
        float score;
        struct Stu_Node* next;
    }Stu_Node, * LinkList;
    //初始化
    LinkList InitList(LinkList L)
    {
        L = (LinkList)malloc(sizeof(Stu_Node));
        L->next = NULL;
        return L;
    }
    //头插
    void CreateFromHead(LinkList L)
    {
        Stu_Node* s;
        int flag = 1;
        char name[20];
        int number;
        float score;
        while (flag)
        {
            printf("请输入学生信息:");
            scanf("%s %d %f", &name, &number, &score);
            if (strcmp(name,"$") != 0 && number != 0 && score != 0)
            {
                s = (Stu_Node*)malloc(sizeof(Stu_Node));
                strcpy(s->name, name);
                s->number = number;
                s->score = score;
                s->next = L->next;
                L->next = s;
            }
            else flag = 0;
        }
    }
    //查找
    //查找第i个结点,
    Stu_Node* Get(LinkList L, int i)
    {
        Stu_Node* p;
        int j = 1;
        p = L;
        while (p->next != NULL && j < i)
        {
            p = p->next;
            j++;
        }
        if (i == j)
        {
            printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
            return p;
        }
        return NULL;
    }
    //查找值等于key的结点
    Stu_Node* Locate(LinkList L, int number)
    {
        Stu_Node* p;
        p = L->next;
        while (p != NULL)
        {
            if (p->number != number)
                p = p->next;
            else
                break;
        }
        if(p!=NULL)
            printf("你要查找的学生信息为:姓名:%s 学号:%d 成绩:%f\n", p->name, p->number, p->score);
        return p;
    }
    //插入
    int InsList(LinkList L, int i, char *name, int number, float score)
    {
        Stu_Node* pre, * s;
        int k;
        pre = L;
        k = 0;
        while (pre != NULL && k < i - 1)
        {
            pre = pre->next;
            k++;
        }
        if (k != i - 1)
        {
            printf("插入的位置不合理");
            return ERROR;
        }
        s = (Stu_Node*)malloc(sizeof(Stu_Node));
        strcpy(s->name, name);
        s->number = number;
        s->score = score;
        s->next = pre->next;
        pre->next = s;
        return OK;
    }
    //删除
    int DelList(LinkList L, int i, char name[],int *number,float *score)
    {
        Stu_Node* p, * r;
        int k;
        p = L;
        k = 0;
        while (p->next != NULL && k < i - 1)
        {
            p = p->next;
            k++;
        }
        if (k != i - 1)
        {
            printf("删除结点的位置i不合理");
            return ERROR;
        }
        r = p->next;
        p->next = p->next->next;
        strcpy(name,r->name);
     //   name = r->name;
        *number = r->number;
        *score = r->score;
        free(r);
        return OK;
    }
    //求链表长度
    int ListLength(LinkList L)
    {
        Stu_Node* p;
        p = L->next;
        int j = 0;
        while (p != NULL)
        {
            p = p->next;
            j++;
        }
        printf("学生的总人数为%d", j);
        return j;
    }
    //输出
    void Printlist(LinkList L)
    {
        printf("学生链表的内容为:\n");
        printf("姓名 学号 成绩\n");
        L = L->next;
        while (L != NULL)
        {
            printf("%s %d %f\n", L->name, L->number, L->score);
            L = L->next;
        }
    }
    int main()
    {
        LinkList L = NULL;
        int i;
        int x;
        char name[20];
        int number;
        float score;
        char name1[20];
        int *number1=NULL;
        float *score1=NULL;
        L = InitList(L);
        printf("头插法创建学生链表\n");
        CreateFromHead(L);
        Printlist(L);
        printf("请输入要查询学生的序号:");
        scanf("%d", &i);
        Get(L,i);
        printf("请输入要查询的学生的学号:");
        scanf("%d", &number);
        Locate(L,number);
        printf("请输入要插入的位置及要插入的学生信息:");
        scanf("%d %s %d %f", &x, &name, &number, &score);
        InsList(L, x, name, number, score);
        Printlist(L);
        printf("请输入要删除的学生序号及信息:");
        scanf("%d &s %d %f",&i,&name, &number,&score);
        DelList(L, i, name1, number1, score1);
        Printlist(L);
        ListLength(L);
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题