●栈顶指针(或栈顶索引)通常指向栈中最新添加的元素,栈顶指针表示当前栈中元素的位置。
●栈容量是指栈能够存储的最大元素数量。
在栈的初始化中有这样一段代码:
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 |