#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct Student)
struct Student
{
int num;
char name[20];
float score[3];
float aver;
struct Student *next;
};
int n;
struct Student *creat()
{
struct Student *p1,*p2,*head;
n=0;//统计结点数
head=NULL;//初始化head(建立空表)
p1=p2=(struct Student*)malloc(LEN);//p1,p2初始化对齐
scanf("%d %s %f %f %f",&p1->num,p1->name,&p1->score[0],&p1->score[1],&p1->score[2]); //输入第一个学生数据
p1->aver=(p1->score[0]+p1->score[1]+p1->score[2])/3;
while(p1->num!=0)
{
/*
①结点链入
②指针对齐
③创建结点
*/
n=n+1;//统计结点,同时作为条件
//下面进行链接操作
//以下条件判断是否为空时进行不同的链接操作
if(n==1)head=p1; //头节点链入
else p2->next=p1; //普通结点链入
p2=p1;//指针对齐
p1=(struct Student*)malloc(LEN);//创建新结点
scanf("%d %s %f %f %f",&p1->num,p1->name,&p1->score[0],&p1->score[1],&p1->score[2]); //输入下一个学生数据
p1->aver=(p1->score[0]+p1->score[1]+p1->score[2])/3;
}
p2->next=NULL;//跳出循环后,表明此时p1->num=0,停止链接,创建的新的结点不应该被链接进表中
return(head);
}
void print(struct Student *head)
{
struct Student *p;
p=head;
if(head!=NULL)//表不为空
do //直到型循环(表不为空,则一直输出直到表尾)
{
printf("%ld %5s %6.1f %6.1f %6.1f %6.1f\n",p->num,p->name,p->score[0],p->score[1],p->score[2],p->aver);
p=p->next;
}while(p!=NULL);//未输出表尾表尾
printf("\n");
}
struct Student *sort(struct Student *head)//排序
{
if(head=NULL)return head;
struct Student *p1,*p2,*temp;
temp=(struct Student*)malloc(LEN);
for(p1=head;p1->next!=NULL;p1=p1->next)
{
for(p2=p1->next;p2->next!=NULL;p2=p2->next)
{
if(p1->num>p2->num)
{
//数据域交换
temp->num=p1->num;strcpy(temp->name,p1->name);temp->score[0]=p1->score[0];temp->score[1]=p1->score[1];temp->score[2]=p1->score[2];temp->aver=p1->aver;
p1->num=p2->num;strcpy(p1->name,p2->name);p1->score[0]=p2->score[0];p1->score[1]=p2->score[1];p1->score[2]=p2->score[2];p1->aver=p2->aver;
p2->num=temp->num;strcpy(p2->name,temp->name);p2->score[0]=temp->score[0];p2->score[1]=temp->score[1];p2->score[2]=temp->score[2];p2->aver=temp->aver;
}
}
}
free(temp);
return head;
int main()
{
//创建链表
struct Student *pt;
printf("请输入学生数据:\n");
pt=creat();
//排序(按学号大小)
pt=sort(pt);
printf("\n经排序,输出所有学生数据:\n");
print(pt);
return 0;
}
求解,这个链表的冒泡排序出了什么问题吗?仅输出是没问题的,排序后就输出不了了
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- qzjhjxj 2021-07-26 12:39关注
第70行: if(head=NULL)return head;这句错误,应改为:
if(head == NULL)return head;
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决评论 打赏 举报无用 1
悬赏问题
- ¥15 msix packaging tool打包问题
- ¥28 微信小程序开发页面布局没问题,真机调试的时候页面布局就乱了
- ¥15 python的qt5界面
- ¥15 无线电能传输系统MATLAB仿真问题
- ¥50 如何用脚本实现输入法的热键设置
- ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
- ¥30 深度学习,前后端连接
- ¥15 孟德尔随机化结果不一致
- ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
- ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线