我的教授没有解释太多,只是给出了要完成的任务。我在这里看到类似的任务Push Item into Stack with C ,但我希望我能看到完整的代码,因为我不明白 top 和 node 指的是什么。
typedef struct Stack
{
int* array;
int size;
}Stack;
void initStack(Stack *s)
{
s->size = 0;
s->array = NULL;
}
不要更改此函数中的参数。我花了几个小时阅读不同的文章,但我似乎仍然无法理解它是如何工作的以及如何正确地提高大小,在输入值时分配内存以及如何将值堆叠在一起。谢谢。
void push(Stack *s, int data){
Stack* m = (Stack*)malloc(sizeof(Stack));
s = (Stack*)malloc(sizeof(Stack));
m->array = value;
m->size = 1;
s = m;
printf("%d %d",s->size,s->array);
}
最佳答案
功能
void push(Stack *s, int data){
Stack* m = (Stack*)malloc(sizeof(Stack));
s = (Stack*)malloc(sizeof(Stack));
m->array = value;
m->size = 1;
s = m;
printf("%d %d",s->size,s->array);
}
没有任何意义,并且由于此声明而具有未定义的行为
m->array = value;
由于此语句导致内存泄漏
s = m;
你需要的是这样的
int push( Stack *s, int data )
{
int *p = realloc( s->array, ( s->size + 1 ) * sizeof( int ) );
int success = p != NULL;
if ( success )
{
s->array = p;
s->array[s->size] = data;
++s->size;
}
return success;
}
这是一个演示程序
#include <stdio.h>
#include <stdlib.h>
typedef struct Stack
{
int* array;
int size;
}Stack;
void initStack(Stack *s)
{
s->size = 0;
s->array = NULL;
}
int push( Stack *s, int data )
{
int *p = realloc( s->array, ( s->size + 1 ) * sizeof( int ) );
int success = p != NULL;
if ( success )
{
s->array = p;
s->array[s->size] = data;
++s->size;
}
return success;
}
int main(void)
{
Stack s;
initStack( &s );
push( &s, 10 );
return 0;
}
关于使用结构体的 C 堆栈实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58877637/