【问题标题】:Why does the stack look like this?为什么堆栈看起来像这样?
【发布时间】:2020-02-21 09:21:40
【问题描述】:

这是我自己的想法,不是从书上,而是从我自己的角度来看,为什么没有按照场景实现呢?

由于代码长度,堆栈省略了空和满

#include<stdio.h>

typedef struct stack{
    int key[100];
    int top;
}stack;

void init(stack* a){
    int i;
    for(i=0;i<100;i++){
        a->key[i]=0;
    }
    a->top = 0;
}

void push(stack* a, int num){
    a->key[a->top++] = num;
}

int pop(stack* a){
    return a->key[a->top--];
}

int main(void){
    stack a;
    init(&a);

    push(&a,10); push(&a,20); push(&a,30);
    printf("%d ",pop(&a)); printf("%d ",pop(&a)); printf("%d ",pop(&a));

    return 0;
}

我希望输出 30 20 10 但实际输出是 0 30 20

【问题讨论】:

    标签: c stack


    【解决方案1】:

    您的代码实际上是这样的:

    push(&amp;a, 10); 堆栈:key[0] = 10

    push(&amp;a, 20); 堆栈:key[0] = 10 / key[1] = 20

    push(&amp;a, 20); 堆栈:key[0] = 10 / key[1] = 20 / key[2] = 30

    因为在a-&gt;key[a-&gt;top++] = num; 中,带有a-&gt;top++ 的部分最后会增加。 所以此时你的最高索引等于 3。 但是当你弹出你的函数时,你应该先做--a-&gt;top 来减少你的索引

    pop(&amp;a); 堆栈:key[0] = 10 / key[1] = 20 / key[2] = 30,您的顶部索引现在等于 2。

    pop(&amp;a); stack: key[0] = 10 / key[1] = 20, top = 1 您的顶部索引现在等于 1。

    pop(&amp;a); stack: key[0] = 10,您的顶部索引现在等于 0。

    如果您想对 i++ 和 ++i(或 i-- 和 --i)有更好的解释,请阅读 What is the difference between int++ and ++int?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 2011-04-29
      • 2018-06-08
      • 1970-01-01
      • 2016-04-07
      • 2011-07-09
      相关资源
      最近更新 更多