使用双链表的堆栈实现中的C推送函数



我正在尝试制作一个推送函数,但由于某种原因,我无法使其工作。在运行该函数后,(*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。

一切都应该好起来。我还不清楚你的意思是哪一个"顶部",你想要一个循环列表,这样最后一个元素的下一个指向第一个元素,第一个元素的上一个指向最后一个吗?

最新更新