俊熙君 2022-11-25 10:54 采纳率: 85.7%
浏览 3

关于C语言链表输出的问题!

问题遇到的现象和发生背景

是教材上的一个题目,要求用链表实现,写了好长时间了写不出来人的麻了。
成绩的排序都解决的,但是题目里要求如果成绩相同则并排输出且输出该成绩的人数
输出这一块真的写不出来。

用代码块功能插入代码,请勿粘贴截图

//定义学生信息结构

#include <stdio.h>
#include <malloc.h>
struct student
{
    int id;
    int score;
    struct student* next;
};
typedef struct student Info;

create(Info* head)
{
    Info* p, * q;
    int id, score;
    int flag = 1, no = 1;
    printf("Input Info\n");
    printf("Enter ID = -1 -> end\n");
    do
    {
        printf("Student %d\n", no);
        no++;
        printf("ID:\t");
        scanf("%d", &id);
        printf("SOCRE:\t");
        scanf("%d", &score);
        //如果id输入为-1,则停止创建结点
        if (id == -1)
        {
            flag = 0;
        }
        else
        {
            p = (Info*)malloc(sizeof(Info));
            p->id = id;
            p->score = score;
            q = head;
            while (q->next != NULL)
            {
                if ((p->score) > (q->next->score))
                {
                    break;
                }
                else
                {
                    q = q->next;
                }
            }
            p->next = q->next;
            q->next = p;
        }
    } while (flag);
}

output(Info* head)
{
    Info* p;
    int i = 0, prv, k = 0, rank = 1;
    p = head->next;
    while (p -> next != NULL)
    {
        prv = p->score;
        printf("NO.%d\t", rank);
        printf("SCORE: %d\t", p->score);
        if (p->score != p->next->score)
        {
            printf("PEOPLE: 1\t");
            printf("%d\n", p->id);
        }
        else
        {
            printf("%d\t", p->id);
        }
        p = p->next;
    }
}

void main()
{
    Info* head;
    head = (Info*)malloc(sizeof(Info));
    head->next = NULL;
    create(head);
    output(head);
}

output(Info* head)
{
    Info* p;
    int i = 0, prv, k = 0, rank = 1;
    p = head->next;
    while (p -> next != NULL)
    {
        prv = p->score;
        printf("NO.%d\t", rank);
        printf("SCORE: %d\t", p->score);
        if (p->score != p->next->score)
        {
            printf("PEOPLE: 1\t");
            printf("%d\n", p->id);
        }
        else
        {
            printf("%d\t", p->id);
        }
        p = p->next;
    }
}

void main()
{
    Info* head;
    head = (Info*)malloc(sizeof(Info));
    head->next = NULL;
    create(head);
    output(head);
}


我想要达到的结果

output那个函数我不知道怎么写

  • 写回答

4条回答 默认 最新

  • 於黾 2022-11-25 11:40
    关注

    你缺一个函数
    排序后,要从头到尾的遍历一遍,看有没有相同的,有相同的删除next,然后cur++
    student里少一个属性,人数,默认1,output的时候如果这个是1就不输出,如果不是1要输出人数

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月25日

悬赏问题

  • ¥15 求解决为什么json数据完整,却解析失败
  • ¥15 打开Smart schedule运行examples/transformer-xl/scripts/run_enwik8_base_moe.sh 报错
  • ¥15 求一个C# sm4 加密解密的代码
  • ¥15 想做个网络加速器,怎么实现
  • ¥20 centos7下载mysql提示DNS解析异常
  • ¥20 vx转账功能对方不能领取
  • ¥15 vue2+codemirror 运行后页面光标太大了
  • ¥15 pdfjs库如何在前端实现打印、旋转等功能
  • ¥15 combobox数据绑定问题
  • ¥15 maven打包时,为什么有的依赖打不进去包