判断栈空的条件有很多个吗

图一应该选什么

img

图二s.top==m-1;这不是判断栈满的条件吗?为什么还选它?

img

图三是书上写的栈空的条件,s.top==-1;

img

要看栈的方向
你可以从0开始存第一个元素,也可以从M-1开始存第一个元素
具体取决于如何实现
但是可以排除M/2和不等式
不管从哪边开始存,不可能从中间开始存
不等式最多能判断不满或非空,不能判断是空的
所以用排除法就行了,不需要管具体实现

看你的具体实现,顺序表的话,只要1个参数就可以了。

该回答引用GPTᴼᴾᴱᴺᴬᴵ

  • 判断栈空的条件通常只有一种,即栈顶指针等于初始值(一般为-1),表示栈中没有元素。因此,在题目中,答案为D和A都是正确的,而其他选项都不正确。

  • 关于图一中的问题,应该选择选项D,因为判断栈是否为空时,栈顶指针应该等于-1,而不是等于栈的最大容量。

  • 关于图二中的问题,确实s.top==m-1是判断栈满的条件,不是判断栈空的条件。因此,该选项不应该被选择。

脱离具体实现让你去选择,纯粹在胡扯。所有条件均可以作为判断空的依据,就看你如何去实现。只是有些不常用,有些甚至没人用。
拿图1来看:假设都以数组来实现栈,说一些最简单的实现逻辑
A. 令数组长度为M + 1,M/2为哨兵节点(不存数据),数据从M/2+1开始存放一直到M/2-1,即从数组中间开始存放数据,那自然top == M/2 就是判空条件
B. 题目甚至没有说top是头指针,top一定要是头指针吗?假设top就是记录栈是否为空的变量,不为空则令top = M/2,为空则令top = 除了M/2的任意数,那自然top != M/2 就是判空条件
C. 与B一样,就不多说了
D. 和A一样,令数组长度为M + 1,M为哨兵节点(不存数据),数据从M-1开始存放一直到0,即反向使用数组,那自然top == M就是判空条件
当然了,ABC都是不常用的,或者说不会这么去实现,当然D也不常用,能正向为什么一定要反向呢。
正常人的做法一般是会有一个头指针,也就是文中的top,top = -1,或者说小于0时,栈为空。