顺序栈进栈与出栈

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--;