为什么堆栈看起来像这样?

时间:2019-10-25 02:37:31

标签: c stack

它是出于我的想法而不是本书,而是出于我自己的观点,所以为什么没有根据情况实施它呢?

由于代码长度,堆栈省略为空且已满

#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

1 个答案:

答案 0 :(得分:2)

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

extension PhoneNotificationViewController: PhoneNotificationHeaderViewDelegate { func pushNotificationSwitchTapped() { guard let phoneNotificationHeader = Bundle(for: type(of: self)).loadNibNamed("PhoneNotificationHeaderView", owner: self, options: nil)?.first as? PhoneNotificationHeaderView else { return } if phoneNotificationHeader.pushSwitch.isOn{ //Disable Firebase from sending Globals.sharedInstance.pushStatus = true phoneNotificationHeader.pushSwitch.setOn(false, animated: true) }else{ Globals.sharedInstance.pushStatus = false phoneNotificationHeader.pushSwitch.setOn(true, animated: true) } self.refreshUI() } 堆栈:push(&a, 10);

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

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

因为在key[0] = 10 / key[1] = 20 / key[2] = 30中带有a->key[a->top++] = num;的部分在末尾递增。 因此,此时您的最高索引等于3。 但是,当您弹出函数时,应该执行a->top++首先减少索引

--a->top堆栈:pop(&a);,您的最高索引现在等于2。

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

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

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