题目:给出队列声明,要求实现AppendTail和DeleteHead函数。

template <typename T>
class CQueue
{
public:
void AppendTail(const T& element);
T DeleteHead();
private:
stack<T> stack1;
stack<T> stack2;
};

思路:要用两个先进后出的栈实现先进先出的队列。压栈总是压入stack1,要获得队列头时:如果stack2为空,则把stack1依次弹出栈并压入stack2,取stack2栈顶元素;如果stack2不为空,则直接取stack2栈顶元素。

 #include <iostream>
#include <stack>
using namespace std; template <typename T>
class CQueue
{
public:
void AppendTail(const T& element);
T DeleteHead();
private:
stack<T> stack1;
stack<T> stack2;
}; template<typename T> void CQueue<T>::AppendTail(const T& element)
{
stack1.push(element);
} template<typename T> T CQueue<T>::DeleteHead()
{
T temp;
if(!stack2.empty())
{
temp = stack2.top();
stack2.pop();
}
else
{
if(stack1.empty())
{
cout<<"No element left!"<<endl;
//return;
}
else
{
while(!stack1.empty())
{
temp = stack1.top();
stack1.pop();
stack2.push(temp);
}
temp = stack2.top();
stack2.pop();
}
}
return temp;
} int main()
{
CQueue<int> my_queue;
int n,val;
cout<<"1 for Append"<<endl<<"2 for DeleteHead"<<endl;
while(scanf("%d",&n)!=)
{
if(n == )
{
scanf("%d",&val);
my_queue.AppendTail(val);
}
else if(n == )
{
val = my_queue.DeleteHead();
cout<<"The head of Queue:"<<val<<endl;
}
else
cout<<"Illegal n!"<<endl;
}
return ;
}

最新文章

  1. OneThink-nav标签
  2. escape(), encodeURI()和encodeURIComponent()(转)
  3. HTML页面优化
  4. word 多级列表设置
  5. MySQL更新优化
  6. 【转】Java魔法堂:String.format详解
  7. Oracle Exadata体系笔记
  8. 用PYTHON硬写SOCKET
  9. Android的Manifest配置文件介绍
  10. 【动态规划】XMU 1029 矩阵链乘法
  11. 内核对象kobject和sysfs(4)——kset分析
  12. ASP.NET Core开发期间部署到IIS自定义主机域名并附加进程调试
  13. sizeof(extern类型数组)
  14. Python 函数参数传递机制.
  15. about-php
  16. 刪除nodejs
  17. ReactNative系列组件用法(一)
  18. HDU 1403 Longest Common Substring(最长公共子串)
  19. 洛谷P3389 高斯消元 / 高斯消元+线性基学习笔记
  20. VS2015编译CURL7.54.0源码

热门文章

  1. 从头认识java-14.1 再次对照数组与容器
  2. kubernetes调度之pod优先级和资源抢占
  3. 啥是Restful?
  4. UltimateRecyclerView的用法具体解释
  5. crm操作销售订单实体
  6. Android版App的控件元素定位
  7. C#特性类的使用
  8. 【BZOJ1043】[HAOI2008]下落的圆盘 几何
  9. javaweb开发之EL表达式
  10. 微信分享配置(js-sdk)