typedef struct tree_node{
int table_node[4][4];
struct tree_node* parent;
struct tree_node* children[4];
}tree_node;
struct tree_node* new_Node(int **field, tree_node* parent){
tree_node* newNode = (tree_node*)malloc(sizeof(tree_node));
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
newNode->table_node[i][j] = field[i][j];
}
}
newNode->parent = parent;
for(int i = 0; i < 4;i++) {
newNode->children[i] = NULL;
}
return newNode;
}
typedef struct Stack{
int top;
int capacity;
tree_node* nodes;
}Stack;
struct Stack* new_Stack(){
struct Stack* stack = (struct Stack*)malloc(sizeof(struct Stack));
stack->capacity = 1000;
stack->top = -1;
stack->nodes = (tree_node*)malloc(stack->capacity * sizeof(tree_node));
}
我创建了一棵树和一个堆栈来保存它们,但我在下面的推送函数中收到一条错误消息:
void push(struct Stack* stack, tree_node* node){
if(is_Full(stack))
return;
stack->nodes[++stack->top] = node;
}
消息内容为:“无法将“tree_node *”类型的值分配给“tree_node”类型的实体”,并且其在行中的等号处显示为错误: 堆栈->节点[++堆栈->顶部] = 节点;
我该如何解决这个问题,是什么原因导致的?
stack->nodes = (tree_node*)malloc(stack->capacity * sizeof(tree_node));
创建一个树节点数组。
`
stack->nodes[++stack->top]
则为树节点,而不是树节点指针。
在
void push(struct Stack* stack, tree_node* node)
中,你可以看到node实际上是一个指向节点的指针。
要么将
stack->nodes
更改为指针数组,以便可以直接使用 stack
结构体释放指针。
或者您可以使用
node
取消引用 push
中的 stack->nodes[++stack->top] = *node
但请记住,您将如何从原始节点释放内存,因为堆栈是一个副本。
您似乎想将堆栈更改为结构指针数组。
希望这有帮助:)