实现1
s1:用于入栈;
s2:出栈时用于辅助;
入队列:直接压入s1中;
出队列:将s1的元素倒入s2中,s2弹出栈顶元素,再把元素倒回s1中;
实现2
s1:用于入栈;
s2:用于出栈。
所有元素都在同一个栈里面。
入队列:如果s1为空,把s2中所有的元素倒到s1中,再把元素压入s1;否则直接压入s1;
出队列:如果s2为空,把s1的所有元素全部倒到s2中,再弹出s2的栈顶元素;否则,直接把s2中的栈顶元素弹出;
与实现一相比,实现一把来回倒的操作都放在了出队列中,而实现二把它分摊到入队列和出队列中;
实现三
s1:用于入栈;
s2:用于出栈。
入队列:直接将元素压入s1;
出队列:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部倒到s2中,再弹出s2的栈顶元素;
举个例子:
s1:1 2 3 4 5
s2:
pop()
s1:
s2: 5 4 3 2
push(6)
s1: 6
s2: 5 4 3 2
pop()
s1: 6
s2: 5 4 3
很明显,只有在s2被倒空了,s1才会再往s2中倒元素,这样子就不用来回倒,节省了很多时间。