最近在做课程设计,其中有一部分是定义一个List头文件,将学生信息存放在链表里面,定义如下:
有一个函数是根据学生总评成绩大小来排序并输出每个学生的信息(outputinfo)。本来想用冒泡法先排序再输出,结果在用的时候出现了一个一直解决不了的问题.......
outputinfo函数实现如图
然后在main函数里面先设置了几个学生的信息来测试一下这个函数,但是一直运行不出结果
希望各位大佬能帮忙看一下哪里有问题,要怎么改才能以总评成绩降序输出学生信息。
卑微小白在线感谢(~——V——)~
下面是部分代码
class Student_info
{
private:
string name;//姓名
double midterm;//期中考试成绩
double final;//期末考试成绩
vectorhomework;//平时成绩
double summary;//总评成绩
//vector::iterator it;
Student_info() {}
friend class List;
};
class List
{
//初始化链表类模板
struct Node
{
struct Node* prev;
struct Node* next;
Student_info* info;
};
typedef struct Node Node;
Node* head;
Node* tail;
int size;
void init()//类初始化
{
head = new struct Node;
tail = new struct Node;
head->next = tail;
tail->prev = head;
head->prev = NULL;
tail->next = NULL;
size = 0;
}
public:
List()//空链表
{
init();
cout << "**************链表初始化完成**************" << endl;
}
~List()
{
Node* p;
if (head == NULL)
cout << "**************链表销毁完毕****************" << endl;
while (head != NULL)
{
p = head->next;
delete head;
head = p;
}
cout << "****************链表销毁完毕******************" << endl;
}
//实现链表类模板函数功能
void Setfirst(string s, double g)//在链表类中提前录入学生数据,方便操作
{
Node* p = new struct Node;
p->info = new Student_info;
p->info->summary = g;
p->info->name = s;
size++;
p->next = head->next;//一开始采用头插的方式
head->next = p;
p->prev = head;
p->next->prev = p;
}
void outputinfo()
{
Node* p;
Node* q;
Node temp;//中间变量
for (p = head->next; p->next != NULL; p = p->next)
{
for (q = p->next; q != NULL; q = q->next)
{
if (p->info->summary < q->info->summary)
{
temp.info = p->info;
p->info = q->info;
q->info = temp.info;
}
}
}
Node* s = head;
for (int i = 0; i < size; i++)
{
s = s->next;
cout << "姓名:" << s->info->name << endl;
cout << "总评成绩:" << s->info->summary << endl;
}
}
};
最后再感谢一次!!1
0xCDCDCDCD 这还不明显么?这个指针所在的结构体new出来后,没有对指针初始化。
new出来,记得要把指针设置为 NULL