gpt4 book ai didi

c - 在C中用栈实现链表

转载 作者:行者123 更新时间:2023-11-30 17:37:08 25 4
gpt4 key购买 nike

对于预实验(意味着它不是为了成绩),我应该使用链表实现我的第一个堆栈。我编写它时只将一件事添加到堆栈中作为练习,这就是为什么它如此短。无论如何,我没有编译错误,除了它说“new”在我的 create_stack 函数中未初始化。这也是我遇到段错误的地方,因为它没有打印出我的第一个 printf 函数。我还猜测问题不仅仅是我初始化堆栈,但这是我的问题的开始。如果事情很简单,请对我宽容一些,因为就像我说的,这是我第一次做堆栈,感谢您的帮助。

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

typedef struct node_{
char data;
struct node_ *next;
}node;

typedef struct stack_{
unsigned int size;
node* stack;
}stack;

stack* create_stack();
void push(stack* s, char val);
char top(stack* s);
void pop(stack*s);

int main(void) {

char value, val;

stack* new = create_stack();

printf("Enter a letter: ");
scanf("%c", &value);

push(new, value);

val = top(new);

printf("%c\n", val);

pop(new);

return 0;
}

stack* create_stack(){ //initializes the stack

stack* new;

new->size = 0;
new->stack = NULL;

return new;

}

void push(stack* s, char val) {

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

if ( temp == NULL ) {
printf("Unable to allocate memory\n");
}

else{
temp->next = s->stack;
temp->data = val;
s->stack = temp;
s->size = (s->size) + 1; //bumps the counter for how many elements are in the stack
}

}

void pop(stack* s) {

node* temp;

temp = s->stack;
s->stack = temp->next;
free(temp);
s->size = (s->size) - 1; //subtracts from counter

}

char top(stack* s) {

node* temp = s->stack;

char value = temp->data;

return value;
}

最佳答案

它崩溃的原因是您在创建堆栈时从未分配任何内存。在 create_stack 函数中执行 stack* new = malloc (sizeof(stack));

将来您可能想要使用更好的变量名称。例如,使用 new 作为堆栈的名称并不是那么好 - 它不是很有描述性,而且它是多种语言(例如 C++)中的保留关键字。

关于c - 在C中用栈实现链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22494785/

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