【发布时间】:2023-03-09 14:53:02
【问题描述】:
以这个函数为例:
#include <stdlib.h>
#define MAX 100
typedef struct stack {
int sp;
int val [MAX];
} STACK;
void initStack (STACK *s){
s->sp = 0;
}
int push (STACK *s, int x){
if(s->sp == MAX) return -1;
else s->val[s->sp++] = x;
return 0;
}
int main(){
STACK s;
int pushval, p;
initStack(&s);
p = push(&s, 1);
pushval = s.val[s.sp-1];
printf("pushval %d\n", pushval);
return 0;
}
所以在这种情况下,如果我执行 s.val[s.sp],我就会胡言乱语。如果我这样做 s.val[s.sp-1] 我会得到我推入堆栈的值。我不知道堆栈指针是否应该指向“下一个可用空间”,即等于数组中的元素数,或应该等于数组最后一个元素的索引,也就是 数组中的元素数 - 1
【问题讨论】:
-
你可以做你喜欢的,但你也需要一个空栈的表示。使用您当前的代码,将
sp设置为0表示一个空堆栈。如果sp索引堆栈中的顶部元素,则需要通过将sp设置为-1来表示空堆栈。