我正在测试我的双链表,但它没有显示任何内容。 我正在插入学生数据,然后尝试显示它。 我只是在推送功能上工作,只是按步骤显示它。 我是双重链接列表的新手。
#include <iostream>
#include <string>
#include "stdlib.h"
#include "time.h"
#include <ctime>
#include <cstdlib>
#include <time.h>
using namespace std;
class student
{
public:
int id; //student ID number
string name; //student’s name
string university; //student’ university
double GPA; //student’ GPA
};
//student list is a doubly linked list of students.
class studentList
{
private:
class node
{
public:
student data;
node * next;
node * prev;
};
node * head;
public:
studentList()
{
head = NULL;
}
//be sure to free all dynamically allocated memory!
~studentList()
{
delete head;
}
//return true if the list is empty, false if not
bool empty()
{
if ( head == NULL)
{
return true;
}
else
return false;
}
//insert student s into the front of the linked list
void push(student s)
{
node *tmp;
tmp = new node;
tmp->data = s;
tmp->next = head;
head = tmp;
}
//remove and return the student at the front of the list
student pop();
//locate and remove the student with given ID number
void removeStudent(int id);
//locate and return a copy of the student with given ID number
student getStudent(int id);
//locate the student with given ID number in list and set their GPA to gpa
void updateGPA(int id, double gpa);
//arrange students into increasing order based on either ID, name, or GPA. If
//variable 'field' has value "id", sort into increasing order by id.
//If 'field' has value "name", sort into alphabetical order by name.
//If 'field' has value "GPA", sort into order by GPA.
void sort(string field);
//a test function to simply display the list of students to the screen
//in the order they appear in the list.
void display()
{
node *current = head;
while (current!=NULL)
{
cout << ¤t->data << endl;
current = current->next;
}
}
};
int main()
{
studentList *my;
student *edwin;
edwin->name = "edwin";
edwin->university = "lsu";
edwin->GPA = 4.0;
edwin->id = 33;
my->push(*edwin);
my->display();
return 0;
}
答案 0 :(得分:2)
你的问题在这里,cout&lt;&lt; &amp; current-&gt; data&lt;&lt; ENDL;
究竟什么是数据?它是一些封装结构吗?我假设它是整个学生结构。如果是这种情况,那么你需要得到该结构,然后cout它的各种成员。 即 cout&lt;&lt; &amp; current-&gt; data-&gt; name&lt;&lt; ENDL;
即如果数据类型为student *,如果不是,那么您需要取消引用指向学生结构的指针然后cout它的成员。
此处您所拥有的不是双向链表,而是一个单一的链表。双向链接列表具有指向列表中下一个和上一个节点的next和prev指针。
答案 1 :(得分:2)
您没有正确初始化edwin
。这条线
student *edwin;
只是声明一个指向student
结构的指针。它不为它分配内存。在此之后立即使用edwin->name
是不正确的。
只需使用struct而不是指向它的指针student edwin; edwin.name="...";
。
您的push
无论如何都要复制结构。
正如40two所注意到的,你也没有初始化my
。我建议您尝试找到自己初始化它的正确方法。
另一个可能错误的地方:
cout << ¤t->data << endl;
你能解释一下这行吗?为什么不做cout << current->data.name
?
另请注意,您从未在prev
中设置node
指针(尽管您有此字段)。所以它不是一个正确的双链表(它本质上是单链接的。)