记一道面试题:STL两个栈实现一个队列。
面试题目
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两个栈实现一个队列。相关推荐
- 包含min函数的栈和两个栈实现一个队列
题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素.要求函数min.push以及pop的时间复杂度都是O(1). 分析:这是google的一道面试题. 看到这道题目时,第一反应就是每 ...
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
http://blog.csdn.net/hanjing_1995/article/details/51539578 使用两个栈实现一个队列 思路一: 我们设定s1是入栈的,s2是出栈的. 入队列,直 ...
- 算法图解:如何用两个栈实现一个队列?
作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 本文已收录至 https://github.com/vipstone/algori ...
- java 栈和队列实现迷宫代码_算法图解:如何用两个栈实现一个队列?
本文已收录至 https://github.com/vipstone/algorithm <算法图解>系列. 队列和栈是计算机中两个非常重要的数据结构,经过前面的学习(<队列> ...
- 多态指针访问虚函数不能被继承的类快速排序N皇后问题插入排序堆排序merge归并排序栈上生成对象两个栈实现一个队列...
多态 /*1. 要想实现覆盖(重写)父类必须声明为virtual,子类可以不声明为virtual.-->FunB()2. 派生类重写基类的虚函数实现多态,要求函数名.参数列表.返回值完全相同.( ...
- 【剑指offer】用两个栈实现一个队列
题目:两个栈实现一个队列. 栈的特点:先进后出,队列的特点是先进先出 思路:stack1放入数据:pop时,先判断stack2是否为空,如果不为空,直接pop,如果空,则push(stack1.pop ...
- 剑指offer五:两个栈实现一个队列
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. package com.jianzhioffer;import java.util.Stack;publ ...
- 两个栈实现一个队列,两个队列实现一个栈
题目:用两个栈实现一个队列,用两个队列实现一个栈. 首先要了解栈和队列这两种数据结构各自的特点,栈是一种后入先出(Last In First Out,LIFO)的数据结构,队列是一种先进先出(Firs ...
- python 用两个栈实现一个队列
| 两个栈实现队列 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能.(若队列中没有元素 ...
最新文章
- Python 之 matplotlib (十六)Animation动画
- LAMP_apache安装_2
- SDUT OJ 数据结构实验之排序一:一趟快排
- 开源人脸识别seetaface入门教程(一)
- name 'false' is not defined
- python里pickle模块
- 有的人在25岁时就死了,但在75岁时才被埋葬:周鸿祎
- es6 取数组的第一个和最后一个_ES6:解构——JavaScript 从数组和对象中提取数据的优雅方法...
- Codeforces Round #556 (Div. 1)
- hive表移到mysql_如何将Hive数据表移动到MySql?
- **Java有哪些悲观锁的实现_「Java并发编程」何谓悲观锁与乐观锁,Java编程你会吗...
- java多线程编程相关技术
- 如何快速掌握计算机知识,怎样快速学会电脑 学电脑的5种方法推荐
- python中title函数有什么用_基于Python中capitalize()与title()的区别详解
- 解决docker下载安装速度慢的问题
- 收费java代码_基于jsp的高速公路收费-JavaEE实现高速公路收费 - java项目源码
- 人人商城图片错乱问题
- Linux环境下无盘工作站的架设和实现一(转)
- Kubernetes 1.25 正式发布,多方面重大突破
- 尚硅谷Java零基础极速入门七天版笔记
热门文章
- AEscripts Fog for Mac - 模拟真实三维体薄雾AE/PR插件
- fcpx插件Corporate Story for Mac(商务公司视频宣传片头模板)
- 格雷码、二进制码、BCD编码
- 1.7 编程基础之字符串 25 最长最短单词 python
- fileitem方法_FileItem类的常用方法(关于文件上传的)
- STM32H743+CubeMX-ADC+DMA采样四路AD
- java 二阶段提交,二阶段提交协议(Two Phase Commitment Protocol)
- Java笔记-以系统时间为基准15分钟运行一次指定代码
- Java笔记-spring boot支持jsp文件做前端页面
- 计算机组成原理个人笔记(二)