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

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

题目链接:http://ac.jobdu.com/problem.php?pid=1512

思路:题目要求我们利用两个“先进后出”的栈实现一个“先进先出”的队列。

插入时,将插入的元素放入stack1中。假设现在stack1中已经插入了若干元素,

要进行删除操作。显然现在栈顶的元素是后插入的应该后出,栈底的元素才应该

被删除,而在stack1中无法直接删除栈底元素。此时就应该借助stack2,之前

未对stack2进行操作,stack2为空。将stack1中的元素逐个出栈压入stack2中,

那么stack2中的栈顶元素就是要删除的元素。之后要插入元素就压入stack1中,

要删除元素就将stack2栈顶元素删除,若stack2为空,则将stack1的全部元素

逐个出栈压入stack2中,再完成删除,若stack1和stack2都为空,无法完成删除操作。

注意:

1、本题最好写成模板,更为通用。

2、可以写个判断队列是否非空的函数。

code:

1 #include 
2 #include
3 #include
4 using namespace std; 5 6 template
class CQueue 7 { 8 public: 9 CQueue(void);10 ~CQueue(void);11 12 void appendTail(const T& node);13 T deleteHead();14 bool empty();15 private:16 stack
stack1;17 stack
stack2;18 };19 20 //构造函数21 template
CQueue
::CQueue(void)22 {23 ;24 }25 26 //析构函数27 template
CQueue
::~CQueue(void)28 {29 ;30 }31 32 template
void CQueue
::appendTail(const T& element)33 {34 stack1.push(element);35 }36 37 template
T CQueue
::deleteHead()38 {39 if (stack2.size() <= 0)40 {41 while (stack1.size() > 0)42 {43 T& data = stack1.top();44 stack1.pop();45 stack2.push(data);46 }47 }48 49 T head = stack2.top();50 stack2.pop();51 return head;52 }53 54 template
bool CQueue
::empty()55 {56 if (stack1.size() + stack2.size() <= 0) return true;57 return false;58 }59 60 61 int main()62 {63 int n;64 while (cin >> n)65 {66 CQueue
myQuence;67 for (int i = 0; i < n; ++i)68 {69 string myStr;70 cin >> myStr;71 if (myStr == "PUSH")72 {73 int k;74 cin >> k;75 myQuence.appendTail(k);76 }77 else78 {79 if (myQuence.empty()) cout << -1 << endl;80 else cout << myQuence.deleteHead() << endl;81 }82 }83 }84 return 0;85 }

 

转载于:https://www.cnblogs.com/ykzou/p/4408703.html

你可能感兴趣的文章
struts2的method="{1}"
查看>>
【HAVENT原创】修改 CentOS 服务器名称
查看>>
Win2012 R2 Boot Configuration Data is missing
查看>>
搭建以太坊私有链完整版
查看>>
ORACLE SQL*PLUS基础学习笔记
查看>>
“rman target /” 和 “rman nocatalog target /” 区别
查看>>
linux 怎么完全卸载mysql数据库
查看>>
面向对象的数据库db4o: 初识db4o
查看>>
Percona MongoDB 4 搭建副本集
查看>>
sed地址和模式匹配的问题
查看>>
精品软件 推荐 硬盘性能提升工具 Primo Ramdisk 内存虚拟成硬盘软件
查看>>
scons初探
查看>>
l2tp 账户管理系统
查看>>
Hibernate的10个常见面试问题及答案
查看>>
postfix邮件服务
查看>>
4.使用NDOUtils将Nagios监控信息存入数据库
查看>>
Android 四大组件之Activity 基础总结(1)
查看>>
我没有抛弃SEO,没有离开度娘,只是选择相信马云
查看>>
我的友情链接
查看>>
关于短信协议
查看>>