Почему стек выглядит так? - PullRequest
0 голосов
/ 25 октября 2019

Это сделано из моего собственного ума, не из книги, а из моей собственной точки зрения, так почему же он не был реализован в соответствии со сценарием?

Стек опущен пустым и полным из-за длины кода

#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 Ответ

2 голосов
/ 25 октября 2019

Ваш код на самом деле:

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.

Чтение В чем разница между int ++ и ++ int? , если вы хотите получить более подробные объяснения относительно i ++ и ++ i (или i-- и -я).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...