两个栈实现队列(完整理解)
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,。简化了很多步骤。(此处个人仔细理解,原因是栈的特点)。
方法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,。简化了很多步骤。(此处个人仔细理解,原因是栈的特点)。
相关文章推荐
- 对象只能建立在栈上(堆上)
- java Exception RuntimeException
- DataKit CrossManager 2015.4 Win32_64 1CD
- 中英文美国电厂热平衡类计算Thermoflow.Pro.v19.0+PLS-CADD v12.3电力软件GateCycle 6.1.1
- SCPC / ACM2015国庆培训正式赛
- POJ 1741 Tree 树 点分治
- JavaScript中的运算符
- imageNamed 与 imageWithContentsOfFile差额
- C# 中栈和队的区别
- andriod开发点滴(在listView上添加了一个checkbox后,点击list无响应)
- 生命游戏
- Android 学习经典教材(Eclips)
- linux常用命令总结
- centos在设置时区
- 多种数据输入
- 【软考】设计模式(上午题)
- unity官方demo学习之Stealth(二十一)敌人动画设置类
- android eclipse ndk使用记录
- [PAT]1098. Insertion or Heap Sort (25)
- leetcode - Sort Colors