gpt4 book ai didi

c - 使用链表的堆栈实现不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:45 25 4
gpt4 key购买 nike

我目前正在使用 C 中的链表 (LIFO) 实现堆栈。我已经阅读了一些教程以及一些堆栈溢出帖子,并提出了以下解决方案。

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

typedef struct node
{
char string[20];
struct node *next;
} node;

node *push(char *element, node *head);
node *pop(node *head);
void destroy_stack(node *p);

int main(void)
{


// create new stack
node *stack = NULL;

// push 6 "functions" to the stack
char *function[6] = {"first funct", "second funct", "third funct",
"fourth funct", "fifth funct", "sixt funct"};
for (int i = 0; i < 6; i++)
{
printf("function is : %s\n",function[i]);
stack = push(function[i], stack);
if (!stack)
{
fprintf(stderr,"Not enough memory space for new list");
return 1;
}
}


// display the stack
for (node *temp = stack; temp != NULL; temp = temp -> next)
{

printf("Elements of the stack are: %s\n", temp -> string);
}

// pop the elements from the stack
while (stack != NULL)
{

printf("Popped elemet is: %s\n", stack -> string);
stack = pop(stack);


}

destroy_stack(stack);
return 0;

}

node *push(char *element, node *head)
{
// create space for new element on stack
node *temp = sizeof(node);
if (!temp)
{
return NULL;
}

// if stack is empty
if (head == NULL)
{
strcpy(temp -> string, element);
temp -> next = NULL;
return temp;
}

strcpy(temp -> string, element);
temp -> next = head;
return temp;
}

node *pop(node * head)
{
// create a new head
node *newHead = head->next;

// pop the element from stack
free(head);

return newHead;

}

void destroy_stack(node *p)
{
if ( p == NULL )
{
return;
}
else
{
destroy_stack(p -> next);
}
free(p);
}

但由于缺乏 C 编程知识,我的代码无法正常工作,无法理解为什么会发生这种情况。谁能帮我解决这个问题?

最佳答案

这一行是错误的:

node * temp = sizeof(node);

您只需将节点的大小放入 temp 指针,而不是分配内存,这会触发编译器警告。

应该是:

node * temp = malloc(sizeof(node));

您没有收到编译器警告吗?

旁注

你不应该在 destroy_stack 中使用递归,一个简单的循环就可以了。

关于c - 使用链表的堆栈实现不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52724533/

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