首页 > C++的STL栈实现队列

C++的STL栈实现队列

使用内部存储结构为栈的方法实现一个队列,要求实现该队列的如下方法:

1.push(x) : 将元素x压入队列中

2.pop() : 弹出(移除)队列头部元素

3.peek() : 返回队列头部元素(即为front)

4.empty() : 判断队列是否是空

栈的数据结构为先入后出,队列的数据结构为先入先出

使用栈来实现队列,同样想要让两者弹出的数据保持一直,内部的数据存储顺序是相反的;

可行的办法是维护一个临时栈,用来调换真正存储数据的栈中元素的存储顺序

在这里插入图片描述

实现如下:

void push(int x) { stack<int> tmp_data;/*维护一个临时栈,用来进行数据顺序的调换*/while (!data.empty()){ tmp_data.push(data.top());data.pop();}tmp_data.push(x);while (!tmp_data.empty()){ data.push(tmp_data.top());tmp_data.pop();}
}

测试代码如下:

#include 
#include 
#include using namespace std;class My_queue { private:stack<int> data;public:void push(int x) { stack<int> tmp_data;while (!data.empty()){ tmp_data.push(data.top());data.pop();}tmp_data.push(x);while (!tmp_data.empty()){ data.push(tmp_data.top());tmp_data.pop();}}int pop() { int x = data.top();data.pop();return x;}/*返回队列头部元素*/int peek() { return data.top();}bool empty() { return data.empty();}
};int main() { My_queue q;cout << "construct the queue " << endl;int tmp;for (int i = 0;i < 5; ++i){ cin >> tmp;q.push(tmp);}cout << "pop " << q.pop() << endl;cout << "peek " << q.peek() << endl;q.push(10);cout << "peek push '10' " << q.peek() << endl;return 0;
}

输出如下:

construct the queue 
1 2 3 4 5
pop 5
peek 4
peek push '10' 10

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 使用队列实现栈的下列操作: push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空 队列的特点:先入先出 栈的特点:后入先出 即我们每次添加元素到队列时,想要达到栈的效果,则需要调整当前元素到队列头部 方法一:双队列 一个临时队列保存push进去的元素,将...

  • Queue除了前面介绍的实现外,还有一种双向的Queue实现Deque。这种队列允许在队列头和尾部进行入队出队操作,因此在功能上比Queue显然要更复杂。下图描述的是Deque的完整体系图。需要说明的是LinkedList也已经加入了Deque的一部分(LinkedList是从jdk1.2 开始就存在数据结构)。   Deque在Q...

  • 网络流量队列优先级相关知识点 Qdisc(quick disconnect)快速分离,断开;是一种排队规则,实现对流量的优先级管理.   涉及随机公平队列,令牌桶过滤器,分层令牌桶,FIFO, /*  *CopyRight (c) 2014-02-05 by Ruiy use to CopyLift!!!!  * */   ...