当前位置: 首页 > 后端技术 > Java

LeetCode-232-Usingstackstoimplementqueues

时间:2023-04-01 16:43:49 Java

Usingstackstoimplementqueues题目描述:请只用两个栈实现先进先出队列。队列应该支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头intpeek()返回队列开头的元素booleanempty()如果队列为空则返回true;否则,返回false解释:你只能使用标准的堆栈操作——也就是说,只有压入顶部、从顶部查看/弹出、大小和为空操作是合法的。您的语言可能不支持堆栈。可以用list或者deque(双端队列)来模拟一个栈,只要是标准的栈操作即可。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:队列的双栈实现。MyQueue的两个栈分别是inStack和outStack,inStack用于入队,outStack用于出队。几个方法的主要实现逻辑如下:push(intx):将x压入栈中inStack。pop():如果栈outStack不为空,直接从栈中弹出一个;如果outStack为空,那么如果inStack不为空,将inStack的所有元素弹出并压栈outStack,然后从栈中弹出outStack一个,如果inStack也为空,则抛出异常说明队列是空的。peek():如果栈outStack不为空,则返回outStack的栈顶元素;如果outStack为空,则如果inStack不为空,将inStack的所有元素弹出并压入outStack,然后返回outStack的栈顶元素,如果inStack也为空,则抛出队列为空的异常。empty():如果inStack和outStack都为空,则返回true;否则返回真。importjava.util.Stack;publicclassLeetCode_232{publicstaticvoidmain(String[]args){MyQueuemyQueue=newMyQueue();myQueue.push(1);//队列是:[1]myQueue.push(2);//队列是:[1,2](最左边是队列的前面)System.out.println(myQueue.peek()==1);//返回1System.out.println(myQueue.pop()==1);//返回1,队列为[2]System.out.println(myQueue.empty());//返回假}}classMyQueue{privateStackinStack;私有堆栈<整数>outStack;/***在这里初始化你的数据结构。*/publicMyQueue(){inStack=newStack<>();outStack=新堆栈<>();}/***将元素x推到队列的后面。*/publicvoidpush(intx){inStack.push(x);}/***从队列前面移除元素并返回该元素。*/publicintpop(){if(outStack.isEmpty()){if(inStack.isEmpty()){thrownewRuntimeException("堆栈为空。");}else{while(!inStack.isEmpty()){outStack.push(inStack.pop());}返回outStack.pop();}}else{返回outStack.pop();}}/***获取最前面的元素。*/publicintpeek(){if(outStack.isEmpty()){if(inStack.isEmpty()){thrownewRuntimeException("堆栈为空。");}else{while(!inStack.isEmpty()){outStack.push(inStack.pop());}返回outStack.peek();}}else{返回outStack.peek();}}/***返回队列是否为空。*/publicbooleanempty(){returninStack.isEmpty()&&outStack.isEmpty();}【每天寄语】每天吃一粒糖,然后告诉自己:今天又是甜甜的一天