разработчики!У меня вопрос о методе push () стека в C!
Я реализовал свой собственный метод push () в C!но я не могу понять результаты!
Мой код стека ниже
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
int top = -1;
int array[MAX_SIZE];
void init(){
top = -1;
}
void push(int array[], int data){
if(top > MAX_SIZE-1)
fprintf(stderr, "invalid top %d\n", top+1);
else{
array[++top] = data; // top == 9, ++top == 10
printf("top: %d data: %d\n", top+1, array[top]); // top == 11, top == 10
}
}
void pop(int array[]){
}
void peek(int array[]){
}
int main() {
int data = 1;
for (int i=0; i<MAX_SIZE; i++)
push(array, data++);
push(array, 100);
push(array, 200); // invalid top
push(array, 300); // invalid top
return 0;
}
, а результат этого кода ниже
top: 1 data: 1
top: 2 data: 2
top: 3 data: 3
top: 4 data: 4
top: 5 data: 5
top: 6 data: 6
top: 7 data: 7
top: 8 data: 8
top: 9 data: 9
top: 10 data: 10
top: 11 data: 100
invalid top 11
invalid top 11
То, что я наденуне понимаю, это .. в результатах, когда top: 11, на самом деле, это как top: top + 1.Если вы посмотрите на оператор else в моем методе push (), вы можете заметить его.
, но в выражении else, когда
printf("top: %d data: %d\n", 11, array[10]);
the result: top: 11 data: 100
, я думаю, что это должно быть ошибкой.потому что я объявил размер массива как 10, который является MAX_SIZE.поэтому размер индекса будет 0 ~ 9. но как мог работать массив [10] ??
Я действительно не понимаю этого.