繁体   English   中英

使用结构的 C 堆栈实现

[英]C stack implementation using structures

我的教授没有太多解释,只是给出任务来完成。 我在这里看到了类似的任务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;

}

请勿更改此 function 中的参数。 我花了几个小时阅读不同的文章,但我似乎仍然无法理解它是如何工作的以及如何正确地提高大小、在输入值时分配 memory 以及如何将值堆叠在一起。 谢谢你。

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);
}

function

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;

以及由于此声明导致的 memory 泄漏

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM