您的位置:首页 > 其它

两个栈实现队列(完整理解)

2015-10-05 12:12 309 查看
自己总结了两个栈实现队列的三种方法:

方法1:

入队时候:将元素压入栈s1.

出队时候:将s1的所有元素逐个(出栈并入栈到)s2中;将s1的栈顶元素弹出作为出队列元素。

之后再将s2的所有元素(出栈并入栈)到s1.

实用范围:一次出队列,一次入队列,交替出现的情况。

优化:将s1的元素(出栈并入栈到)s2中,s1的栈底元素不用入栈到深,直接作为出队元素。

方法2:

入队时候:先判断s1是否为空,如不为空,直接入栈,如果为空,将s2的所有元素(出栈并入栈)到s1,再入队。

出队时候:先判断s2是否为空,如不为空,直接弹出s2的栈顶元素,如果为空,将s1的元素(出栈并入栈)s2,并将s1的栈底元素

出队列。

实用范围:多次出队列,多次入队列,没有规律。

方法3(最高效的方法):

入队时候:将元素直接压入s1;

出队时候:

先判断s2是否为空,如不为空,直接弹出s2的栈顶元素,如果为空,将s1的元素(出栈并入栈)s2,并将s1的栈底元素

出队列。

实用范围:所有情况。

第三种方法难以理解的地方:如果最初s1的元素为(1,2,3,栈底到栈顶的顺序,入队4,这个时候出队列,1出去。s1为空,再入队列,直接放在

s1中,这个时候s2没有空,再次出栈,直接出栈,直到s2空的时候,再倒入s1,。简化了很多步骤。(此处个人仔细理解,原因是栈的特点)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: