剑指offer——面试题9:用两个栈实现队列
- #include "Queue.h"
- // ====================测试代码====================
- void Test(char actual, char expected)
- {
- if(actual == expected)
- printf("Test passed.\n");
- else
- printf("Test failed.\n");
- }
- int main(int argc, char* argv[])
- {
- CQueue<char> queue;
- queue.appendTail('a');
- queue.appendTail('b');
- queue.appendTail('c');
- char head = queue.deleteHead();
- Test(head, 'a');
- head = queue.deleteHead();
- Test(head, 'b');
- queue.appendTail('d');
- head = queue.deleteHead();
- Test(head, 'c');
- queue.appendTail('e');
- head = queue.deleteHead();
- Test(head, 'd');
- head = queue.deleteHead();
- Test(head, 'e');
- return ;
- }
QueueWithTwoStacks.cpp
- // 面试题9:用两个栈实现队列
- // 题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail
- // 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
- #pragma once
- #include <stack>
- #include <exception>
- #include<stdio.h>
- #include<stdexcept>
- using namespace std;
- template <typename T> class CQueue
- {
- public:
- CQueue(void);
- ~CQueue(void);
- // 在队列末尾添加一个结点
- void appendTail(const T& node);
- // 删除队列的头结点
- T deleteHead();
- private:
- stack<T> stack1;
- stack<T> stack2;
- };
- template <typename T> CQueue<T>::CQueue(void)
- {
- }
- template <typename T> CQueue<T>::~CQueue(void)
- {
- }
- template<typename T> void CQueue<T>::appendTail(const T& element)
- {
- stack1.push(element);
- }
- template<typename T> T CQueue<T>::deleteHead()
- {
- if(stack2.size()<= )
- {
- while(stack1.size()>)
- {
- T& data = stack1.top();
- stack1.pop();
- stack2.push(data);
- }
- }
- if(stack2.size() == ){
- std::logic_error ex("queue is empty");
- throw std::exception(ex);
- }
- T head = stack2.top();
- stack2.pop();
- return head;
- }
Queue.h
剑指offer——面试题9:用两个栈实现队列的更多相关文章
- 剑指Offer:面试题7——用两个栈实现队列(java实现)
题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 首先定义两个栈 Stack<Integer> stack1 = new Stack<I ...
- 剑指Offer - 九度1512 - 用两个栈实现队列
剑指Offer - 九度1512 - 用两个栈实现队列2013-11-29 21:23 题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作.队列中的元素为int类型. 输入: 每个输入 ...
- 剑指offer第二版-9.用两个栈实现队列
描述:使用两个栈实现一个队列.队列中实现尾部插入和头部删除函数. 思路:stack1负责插入,stack2负责弹出,如果stack2为空了,将stack1的元素依次弹出并存放到stack2中,之后对s ...
- 剑指offer【05】- 用两个栈实现队列(java)
题目:用两个栈实现队列 考点:栈和队列 题目描述:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路:每次psuh是时先将stack2清空放入stck1(保 ...
- 剑指offer(9)——用两个栈实现队列
题目: 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 思路: 首先定义两个栈stack1. ...
- JS 剑指Offer(六) 用两个栈实现队列
题目:用两个栈实现队列,实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入整数和在队列头部删除整数,若队列中没有元素deleteHead返回-1 分析:在队列的尾部插入 ...
- 剑指Offer-【面试题07:两个栈实现队列】
package com.cxz.question7; import java.util.Stack; /** * 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail 和del ...
- 剑指offer(5)用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题目分析 栈是先进后出,队列是先进先出,因此两个栈,一个用来push,一个用来pop,同时注意下两个栈不 ...
- 【剑指Offer】5、用两个栈实现队列
题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 解题思路: 本题的基本意图是:用两个后入先出的栈来实现先入先出的队列.对于这个问题,我 ...
- 【剑指Offer】05、用两个栈实现队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 题解一: //stack2有元素就pop,没有元素就将stack1中所有元素倒进来再pop public ...
随机推荐
- lambda,map,filter,reduce
lambda 编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数.返回一个函数对象. func = lambda x,y:x+y fu ...
- ByteUnit
JDK里面有TimeUnit,看spark源码有个ByteUnit.这个类还是挺不错的. public enum ByteUnit { BYTE (1), KiB (1024L), MiB ((lon ...
- BBS后台发送邮件&修改文章
一:Django发送邮件 在setting中配置 # EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST ...
- springboot-条件化注解
在项目中,有时会遇到我们的Configuration.Bean.Service等等的bean组件需要依条件按需加载的情况.那么Spring Boot怎么做的呢?它为此定义了许多有趣的条件,当我们将它们 ...
- 递增三元数组——第九届蓝桥杯C语言B组(省赛)第六题
原创 标题:递增三元组 给定三个整数数组A = [A1, A2, ... AN], B = [B1, B2, ... BN], C = [C1, C2, ... CN],请你统计有多少个三元组(i, ...
- MongoDB整理笔记の走进MongoDB世界
本人学习mongodb时间不长,但是鉴于工作的需要以及未来发展的趋势,本人想更深层的认识mongodb底层的原理以及更灵活的应用mongodb,边学边工作实践. mongodb属于nosql中算是最 ...
- Async异步委托
/// <summary> /// 异步委托 /// </summary> public delegate void AsyncHandler(); public static ...
- AES加密 AESCrypt 类
/// <summary> /// AES加密 /// </summary> public sealed class AESCrypt { /// <summary> ...
- c++基础知识篇:指针
从面试的反馈来看,这部分可以问的很难. 1.指针与引用的区别 指针是一个变量,用来存放地址的变量.引用是原来变量的存储空间的别名. 2.指针作为参数的要点 a.需要进行指针的合法性检验,防止空指针 ...
- SSI简介 与 nginx开启SSI
Server Side Include : 服务器端嵌入 原理 : 将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本.图形或应用程序信息包含到网页中.因为包含 SSI 指令的文件 ...