LeetCode 225 用队列实现栈

该博客探讨如何利用队列来模拟栈的功能,包括push、pop、top和empty操作。在实现过程中,通过维护两个队列,利用队列的特性转换成栈的操作,确保后进先出的原则。在push时,元素直接进入队列;pop时,将队列元素转移,取出栈顶元素;top则直接返回栈顶元素的标记;empty检查队列是否为空。
摘要由CSDN通过智能技术生成

题目

使用队列实现栈的下列操作:

push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空

注意:
你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

思路

栈是一种 后进先出的数据结构,栈内元素从顶端压入(push),从顶端弹出(pop)。一般我们用数组或者链表来实现栈。队列是一种与栈相反的 先进先出的数据结构,队列中元素只能从 后端(rear)入队(push),然后从 前端(front)端出队(pop)。为了满足栈的特性,我们需要维护两个队列 q1 和 q2。同时,我们用一个额外的变量来保存栈顶元素。

  • 创建两个队列q1,q2
  • 栈的push操作:就直接是q1.push 放到q1队列的尾上,用top标记
  • 栈的pop操作:q1不为空,那么将q1的元素拿出来放到q2,只剩下一个元素在q1,此时q1最后的元素就是需要pop的元素,删除并拿出来。将q1,q2互换,这样q1就完成了pop。
  • 栈的top: 前面用top标记了栈顶元素,直接返回top

代码

public class LC225 {
	
	//   用队列实现栈
	
		
		private Queue<Integer> q1 = new LinkedList<>();
		private Queue<Integer> q2= new LinkedList<>(); 
		int top;
		public LC225 () {
			
		}
//	    放入元素X到栈顶
		public void push(int x) {
			q1.add(x);
			top=x;
			
		}
		

		
		
		public  int pop() {
			int x;
			 while(q1.size()>1) {   //循环结束,top指向栈顶元素
				top= q1.remove();     
				q2.add(top);
				
			 }
			
			    x=q1.remove();
			 
			  
			Queue<Integer> temp=q1;
			q1=q2;
			q2=temp;
			return x;	
		}
		public int top() {
			return top;
			
		}
		public   boolean empty() {
		
			if(q1.size()==0) {
				return false;
				}
			return true;
			
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值