标签:
思路:
假设两个栈分别为s1,s2,
实现进队列:进队列push到s1即可
实现出队列:首先判断s2中是否含有数据,如果有则pop即可,否则需要把s1中的数据逐个出栈,然后进入s2栈,pop s2栈即可(基本思想是一个栈负责进栈,另一个栈负责出栈)
代码如下:
#include<iostream> #include<stack> using namespace std; template<typename T> class squeue { public : squeue(){ } ~squeue(){} void append(const T& node); T deletedata(); private: stack<T> stack1; stack<T> stack2; }; //实现进队列 template<typename T> void squeue<T>::append(const T& node) { stack1.push(node); } //实现出队列 template<typename T> T squeue<T>::deletedata() { if(stack2.size()<=0)//首先判断s2是否含有数据 { while (stack1.size()>0) { T &temp=stack1.top(); stack1.pop(); stack2.push(temp); } } if(stack2.size()==0) throw exception("队列已满!"); T &t=stack2.top(); stack2.pop(); return t; } int main() { squeue<int> s; s.append(1); s.append(2); s.append(3); s.append(4); cout<<s.deletedata()<<endl; cout<<s.deletedata()<<endl; cout<<s.deletedata()<<endl; cout<<s.deletedata()<<endl; return 0; }
测试结果:
标签:
原文地址:http://www.cnblogs.com/runninglzw/p/4486097.html