首页 > 试题广场 >

两个队列实现栈

[编程题]两个队列实现栈
  • 热度指数:1584 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请你仅使用两个队列实现一个后入先出的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty),输入数据保证 pop、top函数操作时,栈中一定有元素。
void push(int element) 将元素 element 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
bool empty() 如果栈是空的,返回 true ;否则,返回 false 。

数据范围:操作数量满足,输入的元素满足

示例:
输入:    ["MTY","PSH1","TOP","MTY"]
输出:    ["true","1","false"]
解析:
"MTY"表示当前栈是不是为空=>当前为空,返回"true"
"PSH1"表示将1压入栈中,栈中元素为1
"TOP"表示获取栈顶元素==>返回"1"
"MTY"表示当前栈是不是为空=>当前不为空,返回"false"


注意:
1.你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。
2.你所使用的语言也许不支持队列。 你可以使用 list (列表)或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。

示例1

输入

["MTY","PSH1","TOP","MTY"]

输出

["true","1","false"]
import java.util.*;

public class Solution {
	Queue<Integer> queue1 = new LinkedList();
	Queue<Integer> queue2 = new LinkedList();

	public void push(int element) {
		while(!queue1.isEmpty()) {
			queue2.add(queue1.poll());
		}
		queue1.add(element);
		while(!queue2.isEmpty()) {
			queue1.add(queue2.poll());
		}
	}

	public int pop() {
		return queue1.poll();
	}

	public int top() {
		return queue1.peek();

	}

	public boolean empty() {
		return queue1.isEmpty();
	}
}

发表于 2022-08-14 20:01:30 回复(0)