面试题目

STL两个栈实现一个队列。

要求:只能使用栈的pop(),top()和push(),以及测试栈是否为空 empty()四个操作. 来实现队列的clear(), push(),pop(),back(),front()等操作。

思路解析

用一个栈用作队列的容器,另一个栈用作临时容器,由于队列 具有先进先出的特性,而我们的栈 只有一端可以进出,那么我们在做出队,也就是 要将一个栈的栈底元素 出队,所以要用到另一个栈作为辅助容器

代码展示

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <stack>
using namespace std;
template<class T>
class MyQueue
{//对外接口
public://清空队列void clear(){while (!stack1.empty())stack1.pop();while (!stack2.empty())stack2.pop();}//入队void push(T data)    {stack1.push(data); //stack1用来 入队}//出队T pop(){if (stack2.size() == 0) //stack2用来 出队,将stack1元素倒腾到stack2{while (stack1.size() > 0){T top = stack1.top();stack1.pop();stack2.push(top);}}if (stack2.size() == 0)throw std::exception("queue is empty");T top = stack2.top();stack2.pop();return top;}//队尾T back()    //入队的,最后一个元素{if (stack1.size() > 0)   //stack1中有数据,栈顶为最后入队的元素return stack1.top();while(stack2.size() > 0) //stack1中没有数据,stack2中有元素,栈底为入队的最后一个元素,将stack2中的数据倒腾到stack1{T top = stack2.top();stack2.pop();stack1.push(top);}if (stack1.size() == 0)throw std::exception("queue is empty");return stack1.top();}//队头T front() //出队的,第一个元素,{if (stack2.size() == 0)    //stack2用来 出队,将stack1元素倒腾到stack2{while (stack1.size() > 0){T top = stack1.top();stack1.pop();stack2.push(top);}}if (stack2.size() == 0)throw std::exception("queue is empty");return stack2.top();}
private:stack<T> stack1;  stack<T> stack2;
};
/*
STL两个栈实现一个队列。要求:只能使用栈的pop(),top()和push(),以及测试栈是否为空
empty()四个操作. 来实现队列的clear(), push(),pop(),back(),front()等操作。
*/
int main(int argc, char *argv[])
{MyQueue<int> que;que.push(1);que.push(2);que.push(3);// 出队<-  1  2  3 <-入队cout << que.front() << endl;//1cout << que.back() << endl;   //3cout << que.pop() << endl;//1cout << que.pop() << endl;//2cout << que.pop() << endl;//3que.clear();return EXIT_SUCCESS;
}

运行结果

记一道面试题:STL两个栈实现一个队列。相关推荐

  1. 包含min函数的栈和两个栈实现一个队列

    题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是google的一道面试题. 看到这道题目时,第一反应就是每 ...

  2. 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)

    http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...

  3. 算法图解:如何用两个栈实现一个队列?

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...

  4. java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?

    本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...

  5. 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...

    多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...

  6. 【剑指offer】用两个栈实现一个队列

    题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...

  7. 剑指offer五:两个栈实现一个队列

    题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...

  8. 两个栈实现一个队列,两个队列实现一个栈

    题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...

  9. python 用两个栈实现一个队列

    | 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...

最新文章

  1. Python 之 matplotlib (十六)Animation动画
  2. LAMP_apache安装_2
  3. SDUT OJ 数据结构实验之排序一:一趟快排
  4. 开源人脸识别seetaface入门教程(一)
  5. name 'false' is not defined
  6. python里pickle模块
  7. 有的人在25岁时就死了,但在75岁时才被埋葬:周鸿祎
  8. es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
  9. Codeforces Round #556 (Div. 1)
  10. hive表移到mysql_如何将Hive数据表移动到MySql?
  11. **Java有哪些悲观锁的实现_「Java并发编程」何谓悲观锁与乐观锁,Java编程你会吗...
  12. java多线程编程相关技术
  13. 如何快速掌握计算机知识,怎样快速学会电脑 学电脑的5种方法推荐
  14. python中title函数有什么用_基于Python中capitalize()与title()的区别详解
  15. 解决docker下载安装速度慢的问题
  16. 收费java代码_基于jsp的高速公路收费-JavaEE实现高速公路收费 - java项目源码
  17. 人人商城图片错乱问题
  18. Linux环境下无盘工作站的架设和实现一(转)
  19. Kubernetes 1.25 正式发布,多方面重大突破
  20. 尚硅谷Java零基础极速入门七天版笔记

热门文章

  1. AEscripts Fog for Mac - 模拟真实三维体薄雾AE/PR插件
  2. fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
  3. 格雷码、二进制码、BCD编码
  4. 1.7 编程基础之字符串 25 最长最短单词 python
  5. fileitem方法_FileItem类的常用方法(关于文件上传的)
  6. STM32H743+CubeMX-ADC+DMA采样四路AD
  7. java 二阶段提交,二阶段提交协议(Two Phase Commitment Protocol)
  8. Java笔记-以系统时间为基准15分钟运行一次指定代码
  9. Java笔记-spring boot支持jsp文件做前端页面
  10. 计算机组成原理个人笔记(二)