压栈判定是压栈前必须的安全检查,核心是防止越界,关键依据栈满条件:数组栈按top定义判断是否top>=capacity或top>=capacity-1,链表栈需检查malloc是否成功。
压栈判定不是独立操作,而是压栈前必须做的安全检查。它的核心是防止数组越界或逻辑错误,确保新元素能合法存入栈中。
压栈判定的关键条件是栈是否已满
判断依据取决于栈的底层实现和 top 指针的定义方式:
若
top指向栈顶元素的下一个位置(即top == 0表示空栈),则栈满条件为:top >= capacity若
top指向当前栈顶元素的位置(即top == -1表示空栈),则栈满条件为:top >= capacity - 1
无论哪种定义,本质都是:可用存储位置已用尽。
实际编码中需配合容量管理
- 数组栈需预先设定固定大小(如
#define SIZE 100)或动态分配后记录capacity - 链表栈理论上无容量限制,但仍需检查内存分配是否成功(
malloc返回是否为NULL)
典型判定流程(以数组栈为例)
- 获取待压入元素
x - 检查
if (top >= capacity)- 是 → 报错:“栈满,无法压栈” 或返回错误码
- 否 → 执行
stack[top] = x; top++;(或stack[++top] = x;,注意运算符顺序)
容易出错的细节
- 忘记在压栈前判定,直接操作
stack[top++],导致写入非法内存 -
capacity值未正确初始化或更新(尤其在动态扩容场景) - 混淆
top的语义,把“满”的阈值算错一位(如该用>= SIZE-1却写了>= SIZE)
不复杂但容易忽略

















