int SortList(struct student *head) // 按总分成绩排序学生信息(降序) { // 冒泡排序 int count=0; struct student *p,*q,*temp; temp=(struct student*)malloc(sizeof(struct student)); int length=0; p=head; p=p->next; for (;p!=NULL;p=p->next) { length++;//记录表长 } for (int i=0;i<length-1;i++) { for(p=head;q!=NULL;) { p=p->next; q=p->next; if ((p->dst)<(q->dst)) //排序 { temp=p; p=q; q=temp; } } } p=head; printf("数据结构成绩降序排行:\n"); TraverseList(head); }
时间: 2024-03-05 14:47:31 浏览: 53
这段代码存在以下几个问题:
1. `q` 没有初始化,会导致程序崩溃。建议将 `q` 初始化为 `p->next`。
2. 排序过程中,没有交换节点数据,只是交换了节点指针。应该交换节点的数据域,而不是指针。
3. 排序结束后,没有释放 `temp` 所指向的内存空间,会导致内存泄漏。
下面是修改后的代码:
```c
int SortList(struct student *head) // 按总分成绩排序学生信息(降序)
{
// 冒泡排序
int count = 0;
struct student *p, *q, *temp;
temp = (struct student *)malloc(sizeof(struct student));
int length = 0;
p = head->next;
for (; p != NULL; p = p->next)
{
length++; //记录表长
}
for (int i = 0; i < length - 1; i++)
{
for (p = head->next; p->next != NULL; p = p->next)
{
q = p->next;
if ((p->dst) < (q->dst)) //排序
{
*temp = *p;
*p = *q;
*q = *temp;
}
}
}
free(temp);
printf("数据结构成绩降序排行:\n");
TraverseList(head);
}
```
以上代码仅供参考,仍可能存在其他问题,如有需要,请自行进行测试和调试。
阅读全文