【data structure】之栈与队列

本文介绍如何使用两个队列实现一个栈的功能,并通过两个栈实现一个队列的方法。这两种实现方式都遵循先进后出的原则,适用于需要利用队列或栈特性但又受限于特定数据结构的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题一:用两个队列实现一个栈

思路:

定义两个队列分别为q1,q2。

调用栈的push操作时,直接将元素push到队列q1中,时间复杂度为O(1)。

调用栈的pop操作时,先把q1中的q1.size() - 1个元素push到q2中,然后再pop出q1中的最后一个元素,再把q2中的所有元素全部push到q1中,时间复杂度为O(n)。

代码:

template<typename T>
class Stack
{
	queue<T> q1;
	queue<T> q2;

public:
	void push(T i)
	{
		q1.push(i);
	}

	void pop()
	{
		while (q1.size() > 1)
		{
			q2.push(q1.front());
			q1.pop();
		}

		cout << q1.front() << endl;
		q1.pop();

		while (q2.size() > 0)
		{
			q1.push(q2.front());
			q2.pop();
		}
	}
};

问题二:用两个栈实现一个队列

思路:

定义两个栈分别为s1,s2。

调用队列的push操作时,直接将元素push到队列s1中,时间复杂度为O(1)。

调用队列的pop操作时,先把s1中的所有元素push到s2中,然后再调用s2的pop操作,再把s2中的所有元素全部push到s1中,时间复杂度为O(n)。

代码:

template<typename T>
class Queue
{
	stack<T> s1;
	stack<T> s2;

public:
	void push(T i)
	{
		s1.push(i);
	}

	void pop()
	{
		while (!s1.empty())
		{
			s2.push(s1.top());
			s1.pop();
		}
		cout << s2.top() << endl;
		s2.pop();
		while (!s2.empty())
		{
			s1.push(s2.top());
			s2.pop();
		}
	}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值