李我远点 2017-03-02 12:03 采纳率: 71.4%
浏览 872

请大家帮忙看一下我这个结果为什么没有排序啊?

#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,*s = NULL;int m;
node *q = (node
)malloc(sizeof(node));
q->next = NULL;
if(p->next != NULL)
return NULL;
else {
m = p->next->num;
q->next = p->next;
while((p->next )!= NULL)
{
if(m < (p->next->num))
{
m = p->next->num;
q->next =p->next;
s->next = p->next;
}

    p = p->next;
}
if(s->next != NULL)
{
     s->next=s->next->next; 
}


return q;

}
}

node* sort(node L)
{
node *s = (node
)malloc(sizeof(node));
s->next = NULL;
node *q,*p = s;
while(q = max(L))
{
p->next = q;
p = 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(sort(L1));

system("pause");

}

  • 写回答

3条回答 默认 最新

  • 普通网友 2017-03-02 13:10
    关注

    看不懂,操作链表我一般用的是头结点,游标,当前节点组合;不能排序你看看是因为传值调用还是传地址调用,再有就是变量的作用域的问题,这几点搞定了,代码逻辑就清晰多了

    评论

报告相同问题?

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图