Yixihan1 2020-03-26 13:00
浏览 274

pta上的一道题,有一个段错误,望大神指错,谢谢!

题目:本题要求实现多个函数完成对链表的各项基本操作:创建链表,按要求查找,在指定位置添加结点,删除结点,链表排序,输出链表等操作。 链表中为若干个学生的信息(学号、成绩),当输入学号为0时结束;查找并输出不及格的学生信息;新增一个学生信息到指定的学号前面;将指定学号的学生从链表中删除。 将链表中的学生信息按照分数降序排序。

函数接口定义:
Stu * Creatlink( );
void Printlink(Stu * head);
void Search(Stu * head);
Stu *Delnode(Stu * head,int n);
Stu * Addnode(Stu * head,int n);
Stu *Sortnode(Stu * head);

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct stu)
struct stu
{ 
  int num;
  float score;
  struct stu *next;
};
typedef struct stu Stu;

Stu *Creatlink();
void Printlink(Stu *head);
void Search(Stu *head);
Stu *Delnode(Stu *head,int n);
Stu *Addnode(Stu *head,int n);
Stu *Sortnode(Stu *head);

int main()
{ 
    Stu *head = NULL; 
    int num;
    head = Creatlink(); 
    if(head !=NULL)
            Printlink(head);
    else
    { 
        printf("Empty list\n"); 
            return 0;       
    }
    printf("The student no pass:\n"); 
    Search(head);

    scanf("%d",&num);
    head=Delnode(head,num);
    if(head !=NULL)
    {
            printf("After delete the student:\n"); 
        Printlink(head);
    }
    else
    { 
        printf("After delete:empty list\n"); 
            return 0;       
    }

    scanf("%d",&num);
    head=Addnode(head,num);
    printf("After add the student:\n");
    Printlink(head);

    head = Sortnode(head);
    printf("After sorted:\n");
    Printlink(head);
    return 0;
}

/* 请在这里填写答案 */

输入样例:
2,58
3,69
4,98
5,45
6,30
9,80
11,40
0,0
6
9
7,88

输出样例:
2,58
3,69
4,98
5,45
6,30
9,80
11,40
The student no pass:
2,58
5,45
6,30
11,40
After delete the student:
2,58
3,69
4,98
5,45
9,80
11,40
After add the student:
2,58
3,69
4,98
5,45
7,88
9,80
11,40
After sorted:
4,98
7,88
9,80
3,69
2,58
5,45
11,40

我的代码:

Stu * Creatlink( )
{
    Stu *head = NULL, *cur = NULL, *tail = NULL;
    tail = cur = (Stu *)malloc (LEN);
    scanf ("%d,%f", &cur->num, &cur->score);
    while (cur->num != 0 && cur->score != 0)
    {
        if (head == NULL)
            head = cur;
        else
            tail->next = cur;
        tail = cur;
        cur = (Stu *)malloc (LEN);
        scanf ("%d,%f", &cur->num, &cur->score);
    }
    tail->next = NULL;
    return head;
}

void Printlink(Stu * head)
{
    Stu *p;
    p = head; 
    while (p)
    {
        printf ("%d,%.0f\n", p->num, p->score);
        p = p->next;
    }
}
void Search(Stu * head)
{
    Stu *p = head;
    while (p != NULL)
    {
        if (p->score < 60)
            printf ("%d,%.0f\n", p->num, p->score);
        p = p->next;
    }
}
Stu *Delnode(Stu * head,int n)
{
    Stu *p = head, *q = NULL;
    while (n != p->num && p != NULL)
    {
        q = p;            
        p = p->next;    
    }
    if (n == p->num)
    {
        if (p == head)    
            head = p->next;
        else           
            q->next = p->next;
    }
    else            
        return NULL;
    return head;     
}

Stu * Addnode(Stu * head,int n)
{
    Stu *p = head, *q = NULL, *temp = NULL;
    q = (Stu *) malloc (LEN);
    scanf ("%d,%f", &q->num, &q->score);
    while (n != p->num && p != NULL)
    {
        temp = p;            
        p = p->next;    
    }
    q->next = temp->next;
    temp->next = q; 
    return head;
}

Stu *Sortnode(Stu * head)
{
    Stu *p = head, *q = head;
    int M;
    float m;
    while (p != NULL)
    {
        q = p;
        while (q != NULL)
        {
            if (p->score < q->score)
            {
                m = p->score;   p->score = q->score;    q->score = m;
                M = p->num;     p->num = q->num;        q->num = M;
            }
            q = q->next; 
        }
        p = p->next;
    }
    return head;
}

有一个段错误,不知道该如何处理

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 flink cdc无法实时同步mysql数据
    • ¥100 有人会搭建GPT-J-6B框架吗?有偿
    • ¥15 求差集那个函数有问题,有无佬可以解决
    • ¥15 【提问】基于Invest的水源涵养
    • ¥20 微信网友居然可以通过vx号找到我绑的手机号
    • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
    • ¥15 解riccati方程组
    • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
    • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
    • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决