队列和栈的相互表示
来源:互联网 发布:网络信用卡 编辑:程序博客网 时间:2024/06/01 16:55
用栈表示队列
方法1:
1.用两个栈tmp和S,tmp当做中介。
2.每次有push操作时,先将s中的元素全部倒入tmp中(s若为空则无操作),此时再进行push操作压入新元素。
3.操作完成后再将tmp中所有元素倒入s中,从s中弹出的元素即为队列元素的弹出顺序。
4.pop操作则为s.pop(),empty则为s.empty()。top操作也是取s的top。
方法2(方法1的改进):
1.在方法1pop操作时先判断s是否为空,如果不为空直接进行s.pop(),如果为空,则此时直接将tmp中的元素倒入s中,对s进行pop;
2.取top操作和pop操作类似,判断栈空要看两个栈是否都为空,size操作也一样。
方法一代码
class Queue {public: stack<int> tmp, s; // Push element x to the back of queue. void push(int x) { while (!s.empty()){ tmp.push(s.top()); s.pop(); } tmp.push(x); while (!tmp.empty()){ s.push(tmp.top()); tmp.pop(); } } // Removes the element from in front of queue. void pop(void) { s.pop(); } // Get the front element. int peek(void) { return s.top(); } // Return whether the queue is empty. bool empty(void) { return s.empty(); }};
用队列表示栈
方法一
1.建立两个队列q和tmp,tmp为中介。
2.push:将q中的元素按出队列顺序倒入tmp中,然后元素压入q中,再将tmp中元素按顺序倒回q中。
3.pop:q.pop()。front:q.front();。empty:q.empty();
方法一代码
class Stack {public: queue<int> q, tmp; // Push element x onto stack. void push(int x) { while (!q.empty()){ tmp.push(q.front()); q.pop(); } q.push(x); while (!tmp.empty()){ q.push(tmp.front()); tmp.pop(); } } // Removes the element on top of the stack. void pop() { q.pop(); } // Get the top element. int top() { return q.front(); } // Return whether the stack is empty. bool empty() { return q.empty(); }};
0 0
- 队列和栈的相互表示
- 栈和队列的相互实现
- 栈和队列的相互模拟
- 栈和队列的相互实现
- 栈和队列的相互模拟
- 栈和队列的相互实现
- 栈和队列的相互转换替代
- 栈和队列的相互转换
- 栈和队列的相互实现
- 栈和队列相互实现
- C_栈和队列(ADT)-栈的表示和实现
- c3-01~05.h 栈和队列的存储表示
- 数据结构—栈和队列的相互模拟
- 【搜集】队列和栈的功能相互转换
- 队列的链式表示和实现
- 队列的顺序表示形式和实现
- 顺序队列的表示和实现
- 链式队列的表示和实现
- Java 判断文件夹、文件是否存在、否则创建文件夹
- WIN XP+LR11+IE8 IE打开卡死 网页显示为空白
- android api 说明
- JS日期格式化函数性能探底
- vs加载失败cocos2dx项目
- 队列和栈的相互表示
- JVM的DirectMemory设置
- apk文件的重新签名
- Sublime Text自动换行
- NFinal AJAX返回
- OpenGL ES 入门
- vs2010打开资源视图
- VC编译时出现 cannot open file '.'.\Debug\Test1.sbr': No such file or directory 怎么关闭Browser Info
- wince隐藏任务栏与去除桌面图标 快捷方式