leetcode题目地址:232. 用栈实现队列
?代码随想录题解地址:代码随想录
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现?MyQueue
?类:
void push(int x)
?将元素 x 推到队列的末尾int pop()
?从队列的开头移除并返回元素int peek()
?返回队列开头的元素boolean empty()
?如果队列为空,返回?true
?;否则,返回?false
1. Java Stack 类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
2.?Java Vector 类
Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
class MyQueue {
Stack<Integer> st1;
Stack<Integer> st2;
public MyQueue() {
st1 = new Stack<>();
st2 = new Stack<>();
}
public void push(int x) {
st1.push(x);
}
public int pop() {
if (st1.empty()) return -1;
while (!st1.empty()){
int temp = st1.pop();
st2.push(Integer.valueOf(temp));
}
int res = st2.pop();
while (!st2.empty()){
int temp1 = st2.pop();
st1.push(Integer.valueOf(temp1));
}
return res;
}
public int peek() {
if (st1.empty()) return -1;
while (!st1.empty()){
int temp = st1.pop();
st2.push(Integer.valueOf(temp));
}
int res = st2.peek();
while (!st2.empty()){
int temp1 = st2.pop();
st1.push(Integer.valueOf(temp1));
}
return res;
}
public boolean empty() {
if (st1.empty()) return true;
return false;
}
}
1. 主要是对java栈的数据类型和数据结构不太熟悉。
【解题思路】Java Stack的基础操作。
class MyQueue {
Stack<Integer> st1;
Stack<Integer> st2;
public MyQueue() {
st1 = new Stack<>();
st2 = new Stack<>();
}
public void push(int x) {
st1.push(x);
}
public int pop() {
dumpstackIn();
return st2.pop();
}
public int peek() {
dumpstackIn();
return st2.peek();
}
public boolean empty() {
return st1.empty() && st2.empty();
}
public void dumpstackIn(){
if (!st2.empty()) return;
while (!st1.empty()) st2.push(st1.pop());
}
}
略
1. Java Stack 类
栈是Vector的一个子类,它实现了一个标准的后进先出的栈。
除了由Vector定义的所有方法,自己也定义了一些方法:
【初始化】Stack<Integer> st = new Stack<Integer>();
序号 | 方法描述 |
---|---|
1 | boolean empty()? 测试堆栈是否为空。 |
2 | Object peek( ) 查看堆栈顶部的对象,但不从堆栈中移除它。 |
3 | Object pop( ) 移除堆栈顶部的对象,并作为此函数的值返回该对象。 |
4 | Object push(Object element) 把项压入堆栈顶部。 |
5 | int search(Object element) 返回对象在堆栈中的位置,以 1 为基数。 |
2.?Java Vector 类
Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。
【初始化】Vector v1 = new Vector();
【常用方法】
add(),capacity(),clear(),contains(),get(),indexOf(),isEmpty(),remove(),size(),toArray(),toString()。