我正在尝试制作一个推送函数,但由于某种原因,我无法使其工作。在运行该函数后,(*top)->next
仍然指向top
。
以下是功能:
int isEmpty(StackNode *top)
{
if(!top->current)
return 1;
else
return 0;
}
void push(StackNode **top, Node *node)
{
if (isEmpty(*top))
{
(*top)->current = node;
}
else
{
StackNode *newStackNode = malloc(sizeof(StackNode));
if (newStackNode)
{
newStackNode->current = node;
newStackNode->prev = NULL;
(*top)->prev = newStackNode;
newStackNode->next = (*top);
(*top) = newStackNode;
printf("%pn%pn", (*top), (*top)->next);
}
}
}
以下是structs Node和StackNode的定义:
typedef struct Node
{
State state;
Move action;
struct Node *parent;
unsigned int depth;
unsigned int fValue;
}
Node;
typedef struct StackNode
{
Node *current;
struct StackNode *prev;
struct StackNode *next;
}
StackNode;
newStackNode->next = (*top);
(*top) = newStackNode;
"*top"现在是"newStackNode",字段"next"指向"*top(。
前推:
newStackNode->prev = NULL;
newStackNode->next = (*top);
(*top)->prev = newStackNode;
推回:
newStackNode->prev = (*top);
newStackNode->next = NULL;
(*top)->next = newStackNode;
最后:
(*top) = newStackNode;
初始元素(所有创建的节点中的第一个(的prev和next应该指向NULL。
一切都应该好起来。我还不清楚你的意思是哪一个"顶部",你想要一个循环列表,这样最后一个元素的下一个指向第一个元素,第一个元素的上一个指向最后一个吗?