如何将邻接表添加到 C 中已定义类型的节点?
How I can add an adjacency list to a node of defined type in C?
我为图形节点定义了节点类型:
struct node{
int data;
int neighboursNumber;
node * neighbours;
};
我正在尝试为每个节点添加一些这样的邻居:
node * n1 = (node *)malloc(sizeof(node));
n1->data = 1;
n1->neighboursNumber = 2;
n1->neighbours = (node *)malloc(sizeof(node) * n1->neighboursNumber);
node * n2 = (node *)malloc(sizeof(node));
n2->data = 2;
n2->neighboursNumber = 1;
n2->neighbours = (node *)malloc(sizeof(node) * n2->neighboursNumber);
node * n3 = (node *)malloc(sizeof(node));
n3->data = 3;
n3->neighboursNumber = 1;
n3->neighbours = (node *)malloc(sizeof(node) * n3->neighboursNumber);
n1->neighbours[0] = n2;
n1->neighbours[1] = n3;
n2->neighbours[0] = n1;
n3->neighbours[0] = n1;
但是我在构建时遇到错误
error C2679: binary '=' : no operator found which takes a right-hand operand
of type 'node *' (or there is no acceptable conversion)
这不是正确的做法吗?
而不是
struct node{
int data;
int neighboursNumber;
node * neighbours;
};
这样写:
typedef struct _node{
int data;
int neighboursNumber;
struct _node * neighbours;
} node;
但正如其他人在评论中指出的那样,邻居应该
struct _node ** neighbors;
(借用)我认为这对你有用...
typedef struct _node {
int data;
int neighboursNumber;
struct _node **neighbours;
} node;
int main( void ) {
node *n1 = (node *)malloc(sizeof(node));
n1->data = 1;
n1->neighboursNumber = 2;
n1->neighbours = (node **)malloc(sizeof(node *) * n1->neighboursNumber);
node * n2 = (node *)malloc(sizeof(node));
n2->data = 2;
n2->neighboursNumber = 1;
n2->neighbours = (node **)malloc(sizeof(node *) * n2->neighboursNumber);
node * n3 = (node *)malloc(sizeof(node));
n3->data = 3;
n3->neighboursNumber = 1;
n3->neighbours = (node **)malloc(sizeof(node *) * n3->neighboursNumber);
到此为止...我不确定您是如何使用它的,但是,我不认为您的邻居在逻辑意义上是一致的...??
n1->neighbours[0] = n2;
n1->neighbours[1] = n3;
n2->neighbours[0] = n1;
n3->neighbours[0] = n1;
我为图形节点定义了节点类型:
struct node{
int data;
int neighboursNumber;
node * neighbours;
};
我正在尝试为每个节点添加一些这样的邻居:
node * n1 = (node *)malloc(sizeof(node));
n1->data = 1;
n1->neighboursNumber = 2;
n1->neighbours = (node *)malloc(sizeof(node) * n1->neighboursNumber);
node * n2 = (node *)malloc(sizeof(node));
n2->data = 2;
n2->neighboursNumber = 1;
n2->neighbours = (node *)malloc(sizeof(node) * n2->neighboursNumber);
node * n3 = (node *)malloc(sizeof(node));
n3->data = 3;
n3->neighboursNumber = 1;
n3->neighbours = (node *)malloc(sizeof(node) * n3->neighboursNumber);
n1->neighbours[0] = n2;
n1->neighbours[1] = n3;
n2->neighbours[0] = n1;
n3->neighbours[0] = n1;
但是我在构建时遇到错误
error C2679: binary '=' : no operator found which takes a right-hand operand
of type 'node *' (or there is no acceptable conversion)
这不是正确的做法吗?
而不是
struct node{
int data;
int neighboursNumber;
node * neighbours;
};
这样写:
typedef struct _node{
int data;
int neighboursNumber;
struct _node * neighbours;
} node;
但正如其他人在评论中指出的那样,邻居应该
struct _node ** neighbors;
(借用)我认为这对你有用...
typedef struct _node {
int data;
int neighboursNumber;
struct _node **neighbours;
} node;
int main( void ) {
node *n1 = (node *)malloc(sizeof(node));
n1->data = 1;
n1->neighboursNumber = 2;
n1->neighbours = (node **)malloc(sizeof(node *) * n1->neighboursNumber);
node * n2 = (node *)malloc(sizeof(node));
n2->data = 2;
n2->neighboursNumber = 1;
n2->neighbours = (node **)malloc(sizeof(node *) * n2->neighboursNumber);
node * n3 = (node *)malloc(sizeof(node));
n3->data = 3;
n3->neighboursNumber = 1;
n3->neighbours = (node **)malloc(sizeof(node *) * n3->neighboursNumber);
到此为止...我不确定您是如何使用它的,但是,我不认为您的邻居在逻辑意义上是一致的...??
n1->neighbours[0] = n2;
n1->neighbours[1] = n3;
n2->neighbours[0] = n1;
n3->neighbours[0] = n1;