●栈顶指针(或栈顶索引)通常指向栈中最新添加的元素,栈顶指针表示当前栈中元素的位置。
●栈容量是指栈能够存储的最大元素数量。
在栈的初始化中有这样一段代码:
ps->a 是指向栈中存储元素的数组的指针,在栈的实现中,通常使用动态数组来存储栈的元素,而 ps->a 就是这个动态数组的指针。ps->a[0] 表示栈底元素。
ps->top表示栈顶指针。
ps->capacity表示栈的总容量。


当栈为空时我们有两种表示方式:
ps->top=0 和 ps->top=-1
栈为空ps->top=0:
表示栈从 0 开始存储元素,ps->top 表示当前栈中元素的数量,同时也指向下一个元素应该存放的位置。
例如:当栈为空时,ps->top = 0;当栈中有 1 个元素时,ps->top = 1,依此类推。
栈满的判断条件:当 ps->top == ps->capacity 时,说明栈中元素的数量已经达到了栈的容量上限,栈已满。
例如:如果 ps->capacity = 10 且 ps->top = 10,说明栈中已经有 10 个元素,不能再添加新元素。
栈顶元素是: ps->a[ps->top - 1]。
例如,如果 ps->top = 3,表示栈中有 3 个元素,栈顶元素是 ps->a[2]。
压栈操作:
每次压入一个元素,先将元素放入 ps->a[ps->top],然后 ps->top++。

总结
如果 ps->top 从 0 开始,栈满的条件是 ps->top == ps->capacity。
特点是:
1.ps->top 指向栈顶元素的下一个位置。
2.栈为空时,ps->top = 0。
3.栈满时,ps->top = ps->capacity。
4.栈顶元素,ps->a[ps->top - 1]。
栈为空ps->top=-1:
栈满的判断条件:当ps->top == ps->capacity - 1时,说明栈中元素的数量已经达到了栈的容量上限,栈已满
例如:如果 ps->top 从 -1 开始,当栈中有 n 个元素时,ps->top 的值为 n - 1。当栈满时,栈中元素的数量等于栈的容量,即 ps->top == ps->capacity - 1。
栈顶元素是 ps->a[ps->top]。
例如,如果 ps->top = 2,表示栈中有 3 个元素,栈顶元素是 ps->a[2]。
压栈操作:
每次压入一个元素时,ps->top 会先增加(ps->top++),然后再将元素放入栈中ps->a[ps->top],因此,ps->top 始终指向栈顶元素的位置。

总结
如果 ps->top 从 -1 开始,栈满的条件是 ps->top == ps->capacity - 1。
特点是:
1.ps->top 指向栈顶元素的位置。
2.栈为空时,ps->top = -1。
3.栈满时,ps->top = ps->capacity - 1。
4.栈顶元素,ps->a[ps->top]。
对比总结
| 情况 | ps->top 从 0 开始 | ps->top 从 -1 开始 |
|---|---|---|
| 栈为空时 | ps->top = 0 | ps->top = -1 |
| 压栈操作 | 先放元素,再 ps->top++ | 先 ps->top++,再放元素 |
| 栈顶元素 | ps->a[ps->top - 1] | ps->a[ps->top] |
| 栈满条件 | ps->top == ps->capacity | ps->top == ps->capacity - 1 |
栈顶指针与栈容量的判断逻辑
6608

被折叠的 条评论
为什么被折叠?



