gpt4 book ai didi

c - 如何编写一个使用链表的推送函数?

转载 作者:行者123 更新时间:2023-11-30 16:14:44 24 4
gpt4 key购买 nike

我正在编写一个练习程序,其中要求我编写一个与链表一起使用的堆栈处理程序。这是代码:

#include <stdio.h>
#include <stdlib.h>

struct stackNode {
char data;
struct stackNode *nextPtr;
};

typedef struct stackNode StackNode;
typedef struct stackNode *StackNodePtr;

void push(StackNodePtr *topPtr, char value)
{
StackNodePtr firstNode = *topPtr;
while (1) {
if (*topPtr == NULL) {
*topPtr = (StackNodePtr) malloc(sizeof(StackNode));
if (*topPtr == NULL) {
puts("Error: Out of memory for push.");
return;
}
(*topPtr)->nextPtr = NULL;
(*topPtr)->data = value;
break;
}
*topPtr = (*topPtr)->nextPtr;
}
*topPtr = firstNode;
}

int main()
{
StackNodePtr stack = NULL;
push(&stack, 'c'); // Program terminates in this function
putchar(stack->data);
return 0;
}

我还没有声明并实现 pop 函数,因为我对此没有任何问题。问题出在 push 函数上。我希望程序将“c”字符插入堆栈,然后打印它,但它终止了。你能更正我的代码吗?

最佳答案

您的推送是不必要的循环,并且不必要地尝试解释您实际上不应该关心的情况(无论 *topPtr 是否为 null):

void push(StackNode **topPtr, char value)
{
StackNode *p = malloc(sizeof *p);
if (p != NULL)
{
p->data = value;
p->next = *topPtr;
*topPtr = p;
}
else
{
perror("Failed to push value on stack");
}
}

就是这样。您的原始代码看起来像是您正在尝试实现一个队列,而不是一个堆栈。不同的野兽。堆栈实际上更容易,因为它不需要在插入之前蹒跚到序列的另一端。

关于c - 如何编写一个使用链表的推送函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57449262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com