[算法浅析] 用两个栈实现队列
来源:互联网 发布:浙江外商直接投资数据 编辑:程序博客网 时间:2024/05/16 14:20
基本的思路还是很清晰的,第一个栈用来接收"进队"的数据,当要输出的时候,将第一个栈内的数据移到第二个栈里,相当于反转了第一个栈的内容。
入队:进到第一个栈里.
出队:先判断第二个栈是否为空,是的话把第一个栈的数据移过来。若第二个栈非空,说明"前一批数据"还没有处理完,那么直接输出第二个栈栈顶即可。
其实就相当于进来一批数据就处理一批数据,前一批数据没处理完的话,后面的"缓存"数据先堆着,等前一批处理完了再把"缓存"移过来继续处理。
#include <iostream>#include <stack>using namespace std;stack<int> s, t; // s为数据缓冲栈,t为交互栈(大概就先这么称呼着吧)void Init(){ while(!s.empty()) s.pop(); while(!t.empty()) t.pop();}void Push(int num) // 入队的数据全部存入s中{ s.push(num);}void StoT() // 此时t为空,将s中的数据全部移到t中{ while(!s.empty()) { t.push(s.top()); s.pop(); }}void TtoS() // 此时s为空,将t中的数据全部移到s中{ while(!t.empty()) { s.push(t.top()); t.pop(); }}int Pop() // t非空则直接出栈,否则s放入t后t出栈{ if(t.empty()) StoT(); if(!t.empty()) { int num = t.top(); t.pop(); return num; } else { printf("the queue is empty!\n"); return -1; }}void Front() // t非空则直接取top并显示,否则s放入t后再取top{ if(t.empty()) StoT(); if(!t.empty()) printf("%d\n", t.top()); else printf("the queue is empty!\n");}void Back() // 数据均存入s,故从s中取栈顶,否则t放回s然后取栈顶{ if(!s.empty()) { printf("%d\n", s.top()); } else { TtoS(); if(s.empty()) printf("the queue is empty!\n"); else printf("%d\n", s.top()); }}bool Empty() // 两个栈都空表示没有数据{ if(s.empty() && t.empty()) return true; return false;}void ShowHeadandTail() // 显示队头和队尾{ Front(); Back();}int main(){ Init(); Push(1), Push(2), Push(3); ShowHeadandTail(); Push(4), Push(5); ShowHeadandTail(); Pop(), Pop(); ShowHeadandTail(); printf("%s\n", Empty() ? "Empty" : "Not Empty"); Pop(), Pop(), Pop(); printf("%s\n", Empty() ? "Empty" : "Not Empty"); getchar(); return 0;}
0 0
- [算法浅析] 用两个栈实现队列
- 【算法】用两个栈实现一个队列
- [算法题]用两个栈实现队列
- 算法题目---用两个栈实现队列
- 用两个栈实现一个队列算法
- 【算法】用两个栈模拟实现队列
- 算法--两个栈实现队列
- 算法-两个栈实现队列
- 用两个栈实现一个队列,算法和实现
- 简单算法 - 用两个栈实现一个队列
- 算法习题57:用两个栈实现队列
- 面试算法(六)用两个栈实现队列
- C++算法之 用两个栈实现一个队列
- 算法导论 用两个队列实现一个栈 10.1-7
- 算法练习五:用两个栈实现队列
- 【算法和数据结构】1.11--用两个栈来实现队列
- 算法题目---用两个队列实现一个栈
- 简单算法 - 两个队列实现一个栈
- 2.2.4 Remove Duplicates from Sorted List
- 使用WM_MOUSEWHEEL
- hdu1525 Euclid's Game , 基础博弈
- MFC Static控件派生类,实现对函数图像的绘制。
- OpenCV3.0来啦
- [算法浅析] 用两个栈实现队列
- UVa10099_The Tourist Guide(最短路/floyd)(小白书图论专题)
- linux内核文档翻译 位置:Documentation/arm/Setup
- hdu 2147 kiki's game, 入门基础博弈
- 分别用普通过程,面向对象过程,和继承方法实现拖拽效果
- struct linger 用法
- jsonObject的使用
- 2.2.5 Remove Duplicates from Sorted List II
- [转]Python Profile 工具性能分析