栈与队列理论基础
一句话:
- 栈是后进先出,队列是先进先出;栈的入栈和出栈操作都在同一端,都在栈顶进行,而队列的出队和入队分别在两端,从队头出队,从队尾入队。
在Java中,
Stack类继承自Vector类,提供了栈的基本操作。主要方法:
boolean empty(): 检查栈是否为空。为空,返回true,否则返回false。
E push(E item): 将元素压入栈顶。并返回该元素。
E pop(): 移除并返回栈顶元素。
E peek(): 返回栈顶元素但不移除在Java中,
Queue是一个接口,表示队列数据结构。Queue接口的实现类包括LinkedList、PriorityQueue和ArrayDeque等。Queue接口的主要方法 :
boolean add(E e):
将元素插入队列尾部。如果成功,返回true,如果队列已满则抛异常。
E remove():
移除并返回队列的头部元素。
E peek():
返回队列的头部元素,但不移除。如果队列为空,返回null。
int size():
返回队列中的元素数量。
boolean isEmpty():
检查队列是否为空。如果队列为空,返回true,否则返回false。
boolean contains(Object o):
检查队列中是否包含指定元素。
对于LinkedList实现类有以下特有的方法:
void addFirst(E e):
将元素插入队列头部。
void addLast(E e):
将元素插入队列尾部。
E removeFirst():
移除并返回队列头部元素。
E removeLast():
移除并返回队列尾部元素。
E getFirst():
返回队列头部元素,但不移除
E getLast():
返回队列尾部元素,但不移除- !注意:
LinkedList类有这些额外的方法是因为它还实现了Deque接口,也就是说这些方法是Deque接口中才有的,因此queue的类型需要声明为Deque<T>类型,才能调用getLast()等方法Deque接口继承了Queue接口- 双端队列(Deque):
LinkedList作为双端队列使用时,支持从队列的头部和尾部添加、移除和查看元素
232.用栈实现队列
使用栈实现队列的下列操作:
push(x) -- 将一个元素放入队列的尾部。
pop() -- 从队列首部移除元素。
peek() -- 返回队列首部的元素。
empty() -- 返回队列是否为空。
注意:每次将输入栈中的元素导入到输出栈中时,需要全部导入,否则先后顺序会出现混乱。
class MyQueue {
// 思路:维护两个栈
// 一个输入栈用于模拟入队
// 一个输出栈用于模拟出队
// 当pop或peek时,将输入栈中元素依次pop然后push到输出栈
// 这样输出栈pop的就是最先进入输入栈的元素,实现了先进先出
private Stack<Integer> InStack;
private Stack<Integer> OutStack;
public MyQueue() {// 构造函数
InStack = new Stack<>();
OutStack = new Stack<>();
}
public void push(int x) {
// 将x直接压入输入栈
InStack.push(x);
}
public int pop() {// 弹出并返回值
// 首先判断输出栈是否为空
// 为空,则先将输入栈中所有元素push到输出栈,再进行pop


892

被折叠的 条评论
为什么被折叠?



