首页 > 其他分享 >3.两个栈实现一个队列

3.两个栈实现一个队列

时间:2022-11-10 13:55:57浏览次数:42  
标签:peek 两个 队列 s2 s1 pop 实现 push empty

两个栈实现一个队列

方法一:

时间复杂度:

push O(1)
pop O(n)
peek O(n) 查看队头元素
empty O(1)

方法二:

pop 和 peek 的时间复杂度为 O(n) 是因为访问了队头(都位于栈底),对于栈来说访问栈顶是最快的,那么我们只需要使用两个栈实现先入队位于s1的栈顶就可以解决pop 和 peek 的时间复杂度高的问题、

当执行push操作时,向s1内压栈元素
如果做pop或peek操作,都从s2栈顶直接操作,如果s2为空,那么就将s1中的元素全部入栈到s2中

//两个栈实现一个队列
class queue
{
public:
	void push(int val)
	{
		s1.push(val);
	}
	void pop()
	{
		if (s2.empty())
		{
			while (!s1.empty())  //将s1中的元素 dump 到s2中
			{
				s2.push(s1.top());
				s1.pop();
			}
			s2.pop();
		}
		else
		{
			s2.pop();
		}
	}
	int peek()
	{
		if (s2.empty())
		{
			while (!s1.empty())  //将s1中的元素 dump 到s2中
			{
				s2.push(s1.top());
				s1.pop();
			}
			return s2.top();
		}
		else
		{
			return s2.top();
		}
		
	}
	bool empty()
	{
		if (s1.empty() && s2.empty())
		{
			return true;
		}
		return false;
	}
private:
	stack<int> s1;
	stack<int> s2;
};

标签:peek,两个,队列,s2,s1,pop,实现,push,empty
From: https://www.cnblogs.com/zyx-c/p/16876765.html

相关文章

  • SQLServer比较两个数据库的对象
     两个变量,表示要比较的数据库名:@SourceDatabase@DestinationDatabaseDECLARE@SourceDatabaseVARCHAR(50)DECLARE@DestinationDatabaseVARCHAR(50)DECLARE@SQL......
  • 浅析Spring事务实现原理
    SQL事务实现简介首先我们来了解下,最简单的事务是怎么实现的呢?以JDBC为例,当一个数据库Connection对象创建后,其会默认自动提交事务;每次执行SQL语句时,如果成功,就会向数据库自......
  • JavaScript WEB怎么实现大文件上传
    ​ 1 背景用户本地有一份txt或者csv文件,无论是从业务数据库导出、还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工、挖掘和共创应用的时候,首先要将本地文......
  • 记录一次springboot 集成 openfeign 实现模块间调用异常
    记录一次springboot集成openfeign实现模块间调用异常 问题背景product 服务作为服务端,提供了一个对外通信Fegin接口ProductClient,放在了com.imooc.product.clie......
  • PX01如何实现在指定定制画面下执行指令控制
    在对屏进行生产测试或者实验室测试时,有时会需要在特定画面下进行发送指令修改IC寄存器、修改背光亮度、控制某个IO等操作来达到验证目的,那PX01如何实现上述功能呢?LcdTools......
  • java :多线程实现的三种方式
    一、并行、串行、并发在了解java中多线程的三种实现方式之前,我们首先需要明白并行、串行、并发三个概念。1.并行:多个CPU同时处理多个任务;2.串行:单个CPU处理多个任务,当一......
  • VUE WEB怎么实现大文件上传
    ​ javaweb上传文件上传文件的jsp中的部分上传文件同样可以使用form表单向后端发请求,也可以使用ajax向后端发请求    1.通过form表单向后端发送请求     ......
  • 棋盘覆盖(java实现)
    棋盘覆盖问题描述在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L......
  • 如何实现数据文件自动化的实时同步?
    企业在日常业务中,比如总分支机构之间、数据中心之间、不同节点之间、跨国业务之间等,都需要将文件及时的传输,以供协同使用。所以,很多企业会选择一些同步工具或软件。谈到......
  • 单例模式的5种实现方式
    publicclassTest{//饿汉式,线程安全,但提前加载,浪费内存privatestaticTestinstance=newTest();privatestaticTestgetInstance(){r......