gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:45 24 4
gpt4 key购买 nike

我自己想的,不是书上的,而是我自己的观点,为什么没有按场景实现呢?

堆栈因代码长度而省略空和满

#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

最佳答案

您的代码实际上是:

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;a->top++ 的部分在末尾递增。所以此时你的最高指数等于 3。但是当你弹出你的函数时,你应该做 --a->top 来首先减少你的索引

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

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

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

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

关于c - 为什么堆栈看起来像这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com