c++链表创建linked list of linked list
c++ linked list creation linked list of linked list
这行代码发送错误
课程["CS"].student=新课程*[1];
我想创建包含学生链表的课程链表
这是代码
struct Student{
string name;
int id;
int grade;
Student(string n, int i, int gd ){
name=n;
id=i;
grade=gd;
}
};
struct Course{
string C_Name;
Student **student;
int index;
void add_student(Student *new_student){
student[++index]=new_student;
}
};
Course course[4];
void init(){
course["CS"].student=new Course*[1];
}
在 C++ 中你没有定义课程 ["string"],所以你不能使用 "CS" 作为 Course 类型对象的索引
*.student 是 class Student 的 对象,而不是 Course 类型
#include <iostream>
#include <stdexcept>
using namespace std;
struct Student{
string name;
int id;
int grade;
Student(string n, int i, int gd ){
name=n;
id=i;
grade=gd;
}
};
struct Course{
string C_Name;
Student **student;
int index;
void add_student(Student *new_student){
student[++index]=new_student;
}
};
Course course[4];
void init(){
// Need allocate space for a new object of class "Course"
Course course;
course.student = new Student*[1];// "student" is Student type but not Course
}
int main()
{
try{
init();
}
catch(...){
return -1;
}
std::cerr <<"your debug info" <<endl;
return 0;
}
我个人认为,在 C++ 中,您可以尝试参考,它与 class 课程对 class 学生的定义相反。以这种方式使用打印机可能会导致意外错误。
您的代码不包含任何类型的链表,而只包含普通数组。
除此之外,最后一行 (course["CS"].student=new Course*[1];
) 包含一些无效语法。
- 必须使用整数或枚举类型来访问数组(
string
s 或 char[]
不起作用)
- 不允许将
Course**
分配给 Student**
对象
链表包含节点,每个节点都有指向下一个节点的指针。最后一个节点通常有一个值为 nullptr
(C++11) 或 0
(旧标准)的指针。注意:还有一个所谓的双链表,其中每个节点还存储一个指向前一个节点的指针。
节点包含您希望它存储的所有数据。
示例:
struct Node {
Node* next;
// other node data here
};
要创建链表,首先要从一个节点开始并设置 next = nullptr; // 0
。要添加另一个节点,只需创建一个新节点并更改第一个节点的指针。
示例:
Node* node1 = new Node();
node1 -> next = nullptr;
Node* node2 = new Node();
node2 -> next = nullptr;
node1 -> next = node2;
你开始看到一个规律。要在前面插入,只需创建一个新的 Node
并将其 next
设置为第一个已经存在的节点。要在两个节点之间插入,请说 node1
和 node2
:
node1 -> next = newNode;
newNode -> next = node2;
为了让它更漂亮,通常会编写一个包装器 class,其中包含诸如
之类的函数
InsertNodeAt(Node* node, uint index);
Node* GetNodeAt(uint index);
RemoveNodeAt(uint index);
由于您有两种不同类型的对象(Student
和 Curse
),您可能希望使用模板并避免为每种类型编写链表 class。
如果你想自己创建链表,我建议你做一些额外的研究(google 是你的朋友)因为我只提到了一些事情。
如果您不介意使用 c++ 标准库,您可能有兴趣使用已经预制的链表 classes std::forward_list
(标准链表)和 std::list
(双向链表)。
这行代码发送错误 课程["CS"].student=新课程*[1];
我想创建包含学生链表的课程链表
这是代码
struct Student{
string name;
int id;
int grade;
Student(string n, int i, int gd ){
name=n;
id=i;
grade=gd;
}
};
struct Course{
string C_Name;
Student **student;
int index;
void add_student(Student *new_student){
student[++index]=new_student;
}
};
Course course[4];
void init(){
course["CS"].student=new Course*[1];
}
在 C++ 中你没有定义课程 ["string"],所以你不能使用 "CS" 作为 Course 类型对象的索引 *.student 是 class Student 的 对象,而不是 Course 类型
#include <iostream>
#include <stdexcept>
using namespace std;
struct Student{
string name;
int id;
int grade;
Student(string n, int i, int gd ){
name=n;
id=i;
grade=gd;
}
};
struct Course{
string C_Name;
Student **student;
int index;
void add_student(Student *new_student){
student[++index]=new_student;
}
};
Course course[4];
void init(){
// Need allocate space for a new object of class "Course"
Course course;
course.student = new Student*[1];// "student" is Student type but not Course
}
int main()
{
try{
init();
}
catch(...){
return -1;
}
std::cerr <<"your debug info" <<endl;
return 0;
}
我个人认为,在 C++ 中,您可以尝试参考,它与 class 课程对 class 学生的定义相反。以这种方式使用打印机可能会导致意外错误。
您的代码不包含任何类型的链表,而只包含普通数组。
除此之外,最后一行 (course["CS"].student=new Course*[1];
) 包含一些无效语法。
- 必须使用整数或枚举类型来访问数组(
string
s 或char[]
不起作用) - 不允许将
Course**
分配给Student**
对象
链表包含节点,每个节点都有指向下一个节点的指针。最后一个节点通常有一个值为 nullptr
(C++11) 或 0
(旧标准)的指针。注意:还有一个所谓的双链表,其中每个节点还存储一个指向前一个节点的指针。
节点包含您希望它存储的所有数据。
示例:
struct Node {
Node* next;
// other node data here
};
要创建链表,首先要从一个节点开始并设置 next = nullptr; // 0
。要添加另一个节点,只需创建一个新节点并更改第一个节点的指针。
示例:
Node* node1 = new Node();
node1 -> next = nullptr;
Node* node2 = new Node();
node2 -> next = nullptr;
node1 -> next = node2;
你开始看到一个规律。要在前面插入,只需创建一个新的 Node
并将其 next
设置为第一个已经存在的节点。要在两个节点之间插入,请说 node1
和 node2
:
node1 -> next = newNode;
newNode -> next = node2;
为了让它更漂亮,通常会编写一个包装器 class,其中包含诸如
之类的函数InsertNodeAt(Node* node, uint index);
Node* GetNodeAt(uint index);
RemoveNodeAt(uint index);
由于您有两种不同类型的对象(Student
和 Curse
),您可能希望使用模板并避免为每种类型编写链表 class。
如果你想自己创建链表,我建议你做一些额外的研究(google 是你的朋友)因为我只提到了一些事情。
如果您不介意使用 c++ 标准库,您可能有兴趣使用已经预制的链表 classes std::forward_list
(标准链表)和 std::list
(双向链表)。