李我远点 2017-02-27 11:46 采纳率: 71.4%
浏览 707
已采纳

错误应该是在 max()函数或者 sort 函数里,是逻辑错误吗?请帮忙指出或帮忙改正一下

#include
#include
#include
#include

typedef struct Student
{
int num;
float score;
struct Student *next;
}node;

node* create()
{
int n;
printf("please input n:\n");
scanf("%d",&n);
node L,*newp,*end;
L = (node
)malloc(sizeof(node));
L->next = NULL;
end = L;

for(int i = 0;i < n;i++)
{
newp = (node*)malloc(sizeof(node));
scanf("%d%f",&newp->num,&newp->score);
end->next = newp;
end = newp;

}
end->next = NULL;
return L;

}

void combine(node* L1,node* L2)
{
node *p1,*p2;
p1 = L1->next;
p2 = L2;
while(p1->next!=NULL)
{
p1 = p1->next;
}
p1->next = p2->next;

}

node* max(node *L)
{
node *p = L,*q = NULL;
int max = p->next->num;
while((p->next )!= NULL)
{
if(max < (p->next->num))
{
max = p->next->num;
q = p->next;
q->next = NULL;
p->next = p->next->next;
}
else p = p->next;
}
return q;

}

node* sort(node L,node *L1)
{
node *q,*k;
k = (node
)malloc(sizeof(node));
k = L;
k->next = NULL;
while((q = max(L1)) != NULL)
{

    k->next = q;
    k = q;
}
return L;

}

void print(node *L)
{
node *p = L->next;
while(p!= NULL)
{
printf("%d %f \n",p->num,p->score);
p = p->next;
}
}

void main()
{
node L1,*L2;
node *L = (node
)malloc(sizeof(node));
L->next = NULL;
L1 = create();
L2 = create();
combine(L1,L2);
//print(L1);

//sort(L,L1);

print(sort(L,L1));


system("pause");

}

  • 写回答

4条回答 默认 最新

  • 伪造的时空 2017-03-01 00:05
    关注

    对不起啊,前两天没用电脑。。。我感觉你代码中对指针的用法出现了错误,导致链表发生了变化,才得不到正确的结果。我改了下你的代码,最后没有加回收申请的空间的代码,你看看:

    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    
    
    typedef struct Student
    {
        int num;
        float score;
        struct Student *next;
    }node;
    
    node* create()
    {
        int n;
        printf("please input n:\n");
        scanf("%d",&n);
        node *L,*newp,*end;
        L = (node *)malloc(sizeof(node));
        L->next = NULL;
        end = L;
    
        for(int i = 0;i < n;i++)
        {
            newp = (node*)malloc(sizeof(node));
            scanf("%d%f",&newp->num,&newp->score);
            end->next = newp;
            end = newp;
    
        }
        end->next = NULL;
        return L;
    
    }
    
    void combine(node* L1,node* L2)
    {
        node *p1,*p2;
        p1 = L1->next;
        p2 = L2;
        while(p1->next!=NULL)
        {
            p1 = p1->next;
        }
        p1->next = p2->next;
    
    }
    
    node* max(node *L)
    {
        node *p = L,*q = NULL;
    
        int max = p->next->num;
        while((p->next )!= NULL)
        {
            if(max < (p->next->num))
            {
                max = p->next->num;
    
                q=p->next;
    
                if (p->next->next!=NULL)
                {
                    p->next=p->next->next;
                }
                else
                    p->next=NULL;
    
                q->next=L->next;
                L->next=q;                  
            }
            else 
                p = p->next;
        }
        return L;
    
    }
    
    node* sort(node *L,node *L1)
    {
        node *q,*k=NULL,*res=NULL;
    
        while((q = max(L1)) != NULL)
        {
            k = (node *)malloc(sizeof(node));
            k->num=q->next->num;
            k->score=q->next->score;
            k->next=NULL;
            if (res==NULL)
            {
                res=k;
            }
            else
            {
                node *ss=res;
                while (ss->next!=NULL)
                {
                    ss=ss->next;
                }
                ss->next=k;
            }
    
            if (L1->next->next!=NULL)
            {
                L1->next=L1->next->next;
            }
            else
                break;      
    
        }
        return res;
    
    }
    
    void print(node *L)
    {
        node *p = L;
        while(p!= NULL)
        {
            printf("%d %f \n",p->num,p->score);
            p = p->next;
        }
    }
    
    void main()
    {
        node *L1,*L2;
        node *L = (node *)malloc(sizeof(node));
        L->next = NULL;
        L1 = create();
        L2 = create();
        combine(L1,L2);
    
        print(sort(L,L1));
    
        system("pause");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)