c语言c++链表问题

打印不出来,就是我想创建一个学生成绩链表,把大于平均分的保存到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;
}

img

代码缩进都没有,看着难受,你好歹用个电脑编程,笔记本电脑黄鱼上也就是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