实现一系列链接列表

时间:2020-02-12 15:47:11

标签: c++ list pointers graph structure

现在使用图形,并且非常努力地创建链接列表(邻接列表)数组,尝试了几种变体,但是出现了以下错误:

[错误]与'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];
    }
}

3 个答案:

答案 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);