在学C语言 2021-11-20 22:03 采纳率: 86.4%
浏览 62
已结题

谭浩强C语言程序设计9.3链表


#include<stdio.h>
#include<stdlib.h>
struct node {
    long num;
    float score;
    struct node* next;
} node;
void creat(){
    node* head=(node*)malloc(sizeof(node));
    head->num = 0;
    head->score = 0;
    node* p = head;
    do {
        node* newNode = (node*)malloc(sizeof(node));
        scanf("%ld,%f", newNode->num, newNode->score);
        newNode->next = NULL;
        p->next = newNpde;
        p = p->next;
    } while (newNode->num);
    return head;
}
void printNode(node* head) {
    node* p = head;
    while (p != NULL) {
        printf("%ld%f", p->num, p->score);
        p = p->next;
    }
}
void del(node* head){
    int val;
    scanf("%ld", val);
    node* p = head->next;
    node* prev = head;
    while (p != NULL) {
        if (p->num = val) {
            prev->next = p->next;
            free(p);
            break;
        }
        else {
            prev = p;
            p = p - >next;
        }
    }
}
void insert(node* head){
    node* newNode = (node*)malloc(sizeof(node));
    newNode->next = NULL;
    int n;
    scanf("%ld%f%d", &newNode->num, &newNode->score,&n);
    p = head;
    for (int i = 1; i <= n, i++) {
        p = p->next;
        if (i ==n)
        {
            newNode->next = p->next;
            p->next = newNode;
        }
    }
}
int main()
{   creat(head);
    del(head);
    insert(head);
    printfNode(head);
    return 0;
}

我快要废了,谁来帮帮我


10101,90.0

10102,88.5

10103,95.0

10104,93.5

10105,88.0(输入数据)

0(输入结束)

10101(删除数据)

10106,98.0(插入数据)

2(插入位置)
  • 写回答

2条回答 默认 最新

  • Autumn0923 2021-11-21 11:33
    关注

    代码我给你调通了,很多都是语法问题,这个希望你再精进一下你的语言能力,先上结果

    img

    首先是你的creat函数,你是一个void类型的函数怎么可以有返回值呢,这种当然你用void也可以,但是你必须往creat函数里面传入一个头节点,不然你在这个函数里面对头节点进行的操作都保存不下来啊,函数结束你创建的东西都找不到了,再就是你像我一样,把你的create函数改成一个有返回值类型的,返回一个node指针类型,当然你定义结构体的时候你要用到typedef,不然你的node只是一个结构体的成员,你是不能用他来表示结构体的
    还有一个是do-while语句里的scanf,你在输入值的时候就必须告诉程序你这个值要输入到哪里,所以必须加取地址符,不然就会发生错误
    还有do-while语句的判断条件,实际上我也比较好奇,但是我现在可能无法解释,就是while的判断条件不能在do-while里面定义,不然电脑发现不了这个变量,可能电脑在执行的时候不管你do-while里面是什么样子,但是这个while判断条件要单独处理吧,你这个时候把你的条件变量定义在do-while里面计算机就发现不了你定义过这个变量,所以我用while给你改了一个下面是我修改好的代码,供你参考

    #include<stdio.h>
    #include<stdlib.h>
    typedef struct node {
        long num;
        float score;
        struct node* next;
    } node;
    node* creat(){
        node* head=(node*)malloc(sizeof(node));
        head->num = 0;
        head->score = 0;
        node* p = head;
        while(1)
        {
            node* newNode = (node*)malloc(sizeof(node));
            scanf("%ld%f", &newNode->num, &newNode->score);
            if(newNode->num == 0)
            {
                break;
            }
            newNode->next = NULL;
            p->next = newNode;
            p = p->next;
        }
    //    do {
    //        node* newNode = (node*)malloc(sizeof(node));
    //        scanf("%ld,%f", &newNode->num, &newNode->score);
    //        newNode->next = NULL;
    //        p->next = newNode;
    //        p = p->next;
    //    }while(newNode->num);
        return head;
    }
    void printNode(node* head) {
        node* p = head->next;
        while (p != NULL) {
            printf("\n%ld %f\n", p->num, p->score);
            p = p->next;
        }
    }
    void del(node* head){
        long val;
        scanf("%ld", &val);
        node* p = head->next;
        node* prev = head;
        while (p != NULL) {
            if (p->num == val) {
                prev->next = p->next;
                free(p);
                break;
            }
            else {
                prev = p;
                p = p ->next;
            }
        }
    }
    void insert(node* head){
        node* newNode = (node*)malloc(sizeof(node));
        newNode->next = NULL;
        int n;
        scanf("%ld%f%d", &newNode->num, &newNode->score,&n);
        node* p = head;
        for (int i = 1; i <= n; i++) {
            p = p->next;
            if (i ==n)
            {
                newNode->next = p->next;
                p->next = newNode;
                break;
            }
        }
    }
    int main()
    {
        node* head;
        head = creat();
        del(head);
        insert(head);
        printNode(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月4日
  • 已采纳回答 1月27日
  • 修改了问题 11月20日
  • 修改了问题 11月20日
  • 展开全部

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度