顺序栈进栈与出栈
1. 空栈
top 指向栈顶元素。空栈没有栈顶元素,所以令 top = -1。
data[0]
data[1]
data[2]
data[3]
top = -1
void InitStack(SqStack *stack) {
stack->top = -1;
}
2. 进栈:top 先上移
栈未满时,先让 top++ 指向新栈顶位置,再写入元素。
x
data[1]
data[2]
data[3]
top = 0
if (stack->top == MaxSize - 1) return false;
stack->top++;
stack->data[stack->top] = value;
3. 出栈:先取值再下移
栈非空时,先读取当前栈顶,再令 top--。读写顺序反了会取不到正确元素。
a1
a2
data[2]
data[3]
pop a2, then top = 0
if (stack->top == -1) return false;
*value = stack->data[stack->top];
stack->top--;