现在使用图形,并且非常努力地创建链接列表(邻接列表)数组,尝试了几种变体,但是出现了以下错误:
[错误]与'operator >>'不匹配(操作数类型为'std :: istream {aka std :: basic_istream}'和'node *')
class node {
int data;
node* next;
node(int x){
data = x;
next = NULL;
}
};
void SS_in(){
int nver;
node **listik;
cout << "vvedite kolvo vershin";
cin >> nver;
for (int i=0; i<nver;i++){
cout << "V" << i << ": ";
cin >> listik[i];
}
}
答案 0 :(得分:1)
由于您的请求不清楚,因此我只会干预您遇到的编译错误,而不需要构建链接列表。
您必须在类中重载运算符>>
,然后才能使用它:
#include <iostream>
using namespace std;
class node {
public :
int data;
node* next;
node(int x){
data = x;
next = NULL;
}
friend istream & operator >> (istream &in, node &myNode);
};
istream & operator >> (istream &in, node &myNode)
{
cout << "Enter node data :"<< endl;
in >> myNode.data;
return in;
}
int main()
{
node myNode(2);
cin >> myNode;
return 0;
}
答案 1 :(得分:0)
仅定义了节点和图形(列表)。
在此阶段,错误可能已解决:
#include <iostream>
using namespace std;
class node {
public:
int data;
node* next;
node (int x) {
data = x;
next = NULL;
}
};
void SS_in () {
int nver;
std::cout << "vvedite kolvo vershin";
std::cin >> nver;
node** listik = new node * [nver];
int tempData;
for (int i = 0; i < nver; i++) {
cout << "V" << i << ": ";
cin >> tempData;
listik[i] = new node(tempData);
}
}
void main () {
SS_in ();
}
应该添加类adjacencyList(链接列表)。
答案 2 :(得分:0)
此代码:
node **listik;
...
...
cin >> listik[i];
有两种错误。
1)listik
未初始化,因此listik[i]
也未初始化。换句话说-您试图将您的程序(很可能是)不拥有的内容读入内存。
2)由于listik
是“指向节点的指针”,所以listik[i]
是“指向节点的指针”。要求用户键入指针值是没有意义的,而且很幸运,您遇到编译错误告诉您。
现在是您的真正问题:
...创建一个链接列表数组...
请记住,链表以head元素(即“指向节点的指针”)开头。因此,要获取链接列表的数组,您需要一个“指向节点的指针”数组。
例如:
node* arr_of_lists[20];
将是一个带有20个“指向节点的指针”的数组。因此,您可以将其用作20个链表的数组。
或更像c ++风格:
std::array<node*, 20> arr_of_lists;
或者使用动态分配,以便您可以在运行时控制数组大小:
node** arr_of_lists = new node*[desired_size];
从用户读取数据时,您需要两个信息:
1)要添加的节点的数据值
2)要将节点添加到哪个(例如20个)链接列表中。
赞:
cin >> data;
cin >> list_index;
// Skipping error checks here... but must be added to the real code
// You need a function like this to creat an new node holding
// data and insert the new node to the linked list at index "list_index"
list_insert(arr_of_lists, list_index, data);