打印不出来,就是我想创建一个学生成绩链表,把大于平均分的保存到H2,然后打印。我把所有信息插入到那个H1里面了。
我想要知道改完的代码应该长啥样子啊,然后我是哪里出问题了呀
#include
#include
using namespace std;
float score_ave=0;
typedef struct stu
{
int num;
string name;
float score;
stu *next;
};
void save(stu *x,stu *H)
{
if(x->score>score_ave)
{
stu *p=new stu;
p->next=H->next;
H->next=p;
p->name=x->name;
p->num=x->num;
p->score=x->score;
}
}
int main()
{
void save(stu *x,stu *H);
stu *H1=new stu;
stu *H2=new stu;
H1->next=NULL;
H2->next=NULL;
char k;
int N=0;
do{
stu *p=new stu;
cout <<"请输入"<>p->name;
cin>>p->num;
cin>>p->score;
p->next=H1->next;
H1->next=p;
cout<<"是否继续输入"<>k;
cout << endl;
N++;
}while(k!='#');
score_ave=score_ave/N;
H2=H2->next;
save(H1,H2);
while(H2!=NULL){
cout<name<num<score<next;
}
return 0;
}
代码缩进都没有,看着难受,你好歹用个电脑编程,笔记本电脑黄鱼上也就是200块钱
修改了一下
#include <iostream>
#include <stdlib.h>
using namespace std;
typedef struct stu
{
int num;
string name;
float score;
stu *next;
}; // 需要添加分号
void save(stu *x, stu **H)
{
// 定义空链表头
if (*H == NULL)
{
*H = new stu;
(*H)->next = NULL;
}
// 动态分配内存并存储符合要求的学生
if (x->score > score_ave)
{
stu *p = new stu;
p->name = x->name;
p->num = x->num;
p->score = x->score;
p->next = (*H)->next;
(*H)->next = p;
}
}
int main()
{
void save(stu *x, stu **H);
stu *H1 = new stu;
stu *H2 = NULL;
H1->next = NULL;
char k;
int N = 0;
float score_sum = 0.0;
do{
stu *p = new stu;
cout <<"请输入学生姓名,学号和分数(以空格分隔):"<< endl;
cin >> p->name >> p->num >> p->score;
p->next = H1->next;
H1->next = p;
score_sum += p->score;
N++;
cout << "是否继续输入?(y/n)" << endl;
cin >> k;
} while (k == 'y' || k == 'Y');
score_ave = score_sum / N;
// 存储符合要求的学生
stu *p = H1->next;
while (p != NULL)
{
save(p, &H2);
p = p->next;
}
// 输出结果
p = H2;
while (p != NULL)
{
cout << p->name << "\t" << p->num << "\t" << p->score << endl;
p = p->next;
}
// 释放内存
p = H1;
while (p != NULL)
{
stu *q = p;
p = p->next;
delete q;
}
p = H2;
while (p != NULL)
{
stu *q = p;
p = p->next;
delete q;
}
return 0;
}
save函数不对,H2是个指针,你传递一个空指针,但函数里直接H->next操作了,死掉了啊
50和51行交换一下
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633