用两个栈实现队列(Java)

该博客探讨如何利用两个栈模拟一个队列,详细解释了如何通过栈的特性来实现队列的添加(appendTail)和删除(deleteHead)操作。作者首先介绍了栈和队列的基本概念和特点,然后提出将一个栈用于元素入队,另一个栈用于元素出队的思路。在删除元素时,如果第二个栈为空,则将第一个栈的元素转移至第二个栈。最后,博主还讨论了如何用两个队列实现栈的操作,并提供了实现代码和问题的思考。
摘要由CSDN通过智能技术生成

题目:

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和队列头部删除结点的功能。

template<typename T> class CQueue{
	public:
		CQueue(void);
		~CQueue(void);
	void appendTail(Const T& node);
	T deleteHead();	
	private:
		Stack<T> stack1;
		Stack<T> stack2;
};	

知识点:

栈是一个非常常见的数据结构,计算机操作系统会给每个线程创建一个栈用来存储函数调用时各个函数的参数、返回地址及临时变量等。栈的特点:先进后出;通常栈是一个不考虑排序的数据结构,我们需要O(n)的时间才能找到其中最大或者最小的元素。如果想在O(1)时间内找到栈中最大或者最小的值,需要栈元素在进栈是就有顺序的存放。

队列也是一个非常常见的数据结构,队列的特点是先进先出;在树的宽度优先遍历算法中,我们在遍历某一层树的结点时,把结点的子结点放到一个队列里,以备下一层结点的遍历。

思路:

在看到由两个栈实现一个队列,我马上想到必须有一个栈负责元素的进栈操作,另一个栈去负责元素的出栈操作;故要有栈实现队列进队和出队操作,必须要有一个栈去负责进队列,另一个栈负责出队列。(假设两个栈命名为stack1、stack2)。

实现队列添加

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值