Leetcode算法题

用队列实现栈

用队列实现栈的四个操作:

  1. push(x)------元素x入栈
  2. pop()------移出栈顶元素
  3. top()------获取栈顶元素
  4. empty()------返回栈是否为空

注意:

  1. 只能使用队列的基本操作,即只可以调用队列的push to back,pop from front,size和is empty操作。
  2. 若使用的语言不支持队列,可以使用list或者deque(双端队列)来模拟一个队列。
  3. 假设所有的操作都是有效的,例如,对一个空的栈不会调用pop或者top操作。

栈:一种后进先出的数据结构,元素从顶端入栈,从顶端出栈。
队列:一种先进先出的数据结构,元素从后端入队,从前端出队。

方法一:两个队列

为了满足栈的特性,即最后入栈的元素最先出栈,在使用队列实现栈时,应该满足队列前端的元素是最后入栈的元素。

可以使用两个队列实现栈的操作,其中queue1用于存储栈内的元素,queue2作为入栈操作的辅助队列。

入栈操作时,首先将元素入队到queue2,然后将queue1的全部元素依次出队并入到queue2,此时queue2的前端的元素即为新入栈的元素,再将queue1和queue2互换,则queue1的元素即为站内的元素,queue1的前端和后端对应栈顶和栈底。

由于每次入栈都确保queue1的前端元素为栈顶。

出栈只需要移除queue1的前端元素并返回即可,获得栈顶元素操作只需要获得queue1的前端元素并返回即可(不移出元素)。

cpp 复制代码
class MyStack{
public:
	queue<int> queue1;
	queue<int> queue2;

	Mystack(){
	}

	void push(int x){
		queue2.push(x);
		while(!queue1.empty){
			queue2.push(queue1.front());
			queue1.pop();
		}
		swap(queue1,queue2);
	}

	int pop(){
		int r = queue1.front();
		queue1.pop();
		return r;
	}
	
	int top(){
		int r = queue1.front();
		return r;
	}

	bool empty(){
		return queue1.empty();
	}
}
相关推荐
那个村的李富贵5 小时前
CANN加速下的AIGC“即时翻译”:AI语音克隆与实时变声实战
人工智能·算法·aigc·cann
power 雀儿5 小时前
Scaled Dot-Product Attention 分数计算 C++
算法
琹箐6 小时前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia16 小时前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了6 小时前
数据结构之树(Java实现)
java·算法
算法备案代理6 小时前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.7 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
野犬寒鸦8 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法
霖霖总总8 小时前
[小技巧66]当自增主键耗尽:MySQL 主键溢出问题深度解析与雪花算法替代方案
mysql·算法
rainbow68898 小时前
深入解析C++STL:map与set底层奥秘
java·数据结构·算法