C / C ++打印堆栈从下到上递归

时间:2020-06-02 10:57:57

标签: c recursion stack

嘿,我正在尝试使用反射从下至上打印“堆栈”。代码中的所有内容均应正确无误,只应修改打印功能。我没有任何递归打印,但是不幸的是我不知道为什么。

struct element{
    int i;
    element *next;
};

struct stack{
    element *top;
};

void print(stack *st);

int main(){
    element *e5 = (element*) malloc(sizeof(element));
    element *e4 = (element*) malloc(sizeof(element));
    element *e3 = (element*) malloc(sizeof(element));
    element *e2 = (element*) malloc(sizeof(element));
    element *e1 = (element*) malloc(sizeof(element));

    e5->i = 5; e5->next = NULL;
    e4->i = 4; e4->next = e5;
    e3->i = 3; e3->next = e4;
    e2->i = 2; e2->next = e3;
    e1->i = 1; e1->next = e2;

    stack start;
    start.top = e1;
    element *e;

    print(&start);

    return 0;
}

void print(stack *st){
    stack nxt;
    nxt.top = st->top->next;
    if (st->top != NULL){
        print(&nxt);
        printf("%i\n", st->top);
    }
    else
        printf("%i\n", st->top->i);
}

谢谢您的输入!

2 个答案:

答案 0 :(得分:0)

在其他情况下,您可能在此行崩溃:

printf("%i\n", st->top->i); //<-- possible crash here

您应该更加清楚从程序中看到的错误。

在我看来,这将在打印任何内容之前使程序崩溃。

答案 1 :(得分:0)

还有其他问题(请参阅Botje的评论),但是:

printf("%i\n", st->top);

st->top是什么类型?如果以%i格式打印,会发生什么情况?