用两个栈实现队列

来源:互联网 发布:阿里云国际版购买教程 编辑:程序博客网 时间:2024/05/16 00:37
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列的尾部插入节点和在队列的头部删除节点的功能。解析:队列的特点是先进先出,而栈的特点是后进先出。首先,我们声明两个栈s1和s2,入队列的元素,我们都插入在s1中。出队列的元素,我们都从s2中进行弹出元素。也就是appendTail操作只在s1中进行,deleteHead(int &val)操作只在s2中进行。出队列时可以分为三种情况,(1)两个栈s1和s2都为空,返回false。(2)栈s1为空,而s2不为空,直接从s2中弹出要出队的元素,把出队元素保存在一个变量中。(3)栈s2不为空,直接从s2中弹出元素保存在变量中。
#include<iostream>#include<stack>using namespace std;class CQueue{private:stack<int> s1;//入队列时,进入的栈stack<int> s2;//出队列时,弹出的栈public:void appendTail(int val)//入队的操作{s1.push(val);}bool deleteHead(int &val)//出队列操作,出队元素保存在val中{if(s2.empty() && s1.empty())//判断两个栈是否为空{return false;}if(!s2.empty())//s2不为空格{val = s2.top();s2.pop();return true;}if(s2.empty() && !s1.empty())//s2为空,s1不为空{while(!s1.empty()){s2.push(s1.top());s1.pop();}val = s2.top();s2.pop();return true;}}};int main(void){CQueue q;int val;q.appendTail(3);q.appendTail(4);while(q.deleteHead(val)){cout<<val<<" ";}cout<<endl;system("pause");return 0;}
输出结果:
3 4
0 0
原创粉丝点击