栈的push/pop操作需用top指针维护,初始化为0;push先判满再存值后top++,pop先判空再top–后取值,顺序错误或边界未检会导致越界、覆盖或读脏数据。
用固定大小数组实现栈的 push/pop 操作
核心就是维护一个 top 指针(或索引),指向栈顶元素的下一个位置。初始化时 top = 0,push 先存值再加一,pop 先减一再取值——顺序反了会越界或读脏数据。
常见错误现象:pop 后没检查 top == 0 就继续 pop,导致 top 变负;push 前没判断 top == capacity 就写入,覆盖数组尾部内存。
-
push必须先判满:if (top >= capacity) { /* 溢出处理 */ } -
pop必须先判空:if (top - 返回值设计:建议
pop返回bool表示是否成功,值通过引用参数传出,避免空栈时返回垃圾值
如何安全地获取栈顶元素而不弹出
top() 是只读操作,不改变 top 索引,但必须确保栈非空。它和 pop() 的区别不在逻辑上,而在边界检查后是否修改 top。
容易踩的坑:top() 直接返回 data[top](错!应是 data[top - 1]),因为 top 指向的是“下一个空位”。
立即学习“C++免费学习笔记(深入)”;