博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
{面试题7: 使用两个队列实现一个栈}
阅读量:5222 次
发布时间:2019-06-14

本文共 2182 字,大约阅读时间需要 7 分钟。

From 剑指Offer 何海涛 著

#include 
#include
#include
template
class CStack { public: CStack(void); ~CStack(void); T& top(void); void push(const T&); void pop(void); private: std::queue
queue1; std::queue
queue2;};template
CStack
::CStack() { }template
CStack
::~CStack() { }template
T& CStack
::top() { if(queue1.empty()) { if(queue2.empty()) { throw std::exception(); }#if __cplusplus >= 201103L queue1.swap(queue2);#else while(queue2.size() > 1) { T& t = queue2.front(); queue1.push(t); queue2.pop(); } T& t = queue2.front(); queue1.push(t); queue2.pop(); return t;#endif } while(queue1.size() > 1) { T& t = queue1.front(); queue2.push(t); queue1.pop(); } T& t = queue1.front(); queue2.push(t); queue1.pop(); return t;}template
void CStack
::push(const T& value) { if(queue1.empty()) {#if __cplusplus >= 201103L queue1.swap(queue2);#else queue2.push(value); return;#endif } queue1.push(value); }template
void CStack
::pop() { if(queue1.empty()) { if(queue2.empty()) { throw std::exception(); }#if __cplusplus >= 201103L queue1.swap(queue2);#else while(queue2.size() > 1) { T& t = queue2.front(); queue1.push(t); queue2.pop(); } queue2.pop(); return ;#endif } while(queue1.size() > 1) { T& t = queue1.front(); queue2.push(t); queue1.pop(); } queue1.pop();}

测试集:

template 
void test(const T& actual, const T& expected) { std::cout << std::boolalpha << (actual == expected) << std::endl;}int main(int argc, char* argv[]) { CStack
stack; try { stack.top(); } catch(std::exception& e) { std::cout << "true" << std::endl; } stack.push('a'); stack.push('b'); stack.push('c'); test(stack.top(), 'c'); stack.pop(); test(stack.top(), 'b'); stack.push('d'); test(stack.top(), 'd'); stack.pop(); stack.pop(); stack.pop(); try { stack.pop(); } catch(std::exception& e) { std::cout << "true" << std::endl; } return 0;}

 

转载于:https://www.cnblogs.com/long3216/p/4439715.html

你可能感兴趣的文章
例1-1
查看>>
马达调速器,直流马达调速器,直流调速器
查看>>
前端编码规范小记
查看>>
C#编程(二十五)----------接口
查看>>
c如何弹出保存路径/保存文件对话框
查看>>
HTML标签二
查看>>
Python 3语法小记(九) 异常 Exception
查看>>
使用shared memory 计算矩阵乘法 (其实并没有加速多少)
查看>>
Django 相关
查看>>
git init
查看>>
训练记录
查看>>
IList和DataSet性能差别 转自 http://blog.csdn.net/ilovemsdn/article/details/2954335
查看>>
Hive教程(1)
查看>>
Java集合框架学习
查看>>
第16周总结
查看>>
C#编程时应注意的性能处理
查看>>
Fragment
查看>>
比较安全的获取站点更目录
查看>>
苹果开发者账号那些事儿(二)
查看>>
5.0以上机器XPOSED框架安装流程
查看>>