在学习数据结构的过程当中,我们会学到栈和队列,在本篇文章中,重点讲解的是栈实现队列,故关于栈和队列的讲解只是简单带过。
栈是一种后进先出的线性表,即只能在固定的一端进行插入和删除。
栈 方法
Stack() | 构造一个空的栈 |
---|---|
E push(E e) | 将e入栈,并返回e |
E pop() | 将栈顶元素出栈并返回 |
E peek() | 获取栈顶元素 |
int size() | 获取栈中有效元素个数 |
boolean empty() | 检测栈是否为空 |
队列是一种先进先出的线性表,即只能在一端进行插入,另一端进行删除。
队列 方法
boolean offer(E e) | 入队列 |
---|---|
E poll() | 出队列 |
E peek() | 获取队头元素 |
int size() | 获取队列中有效元素个数 |
boolean isEmpty() | 检测队列是否为空 |
结合栈和队列的简单示意图
不难发现一个栈难以实现队列,故使用两个栈演示尝试。
我们可以发现,使用一个栈进行入队列,另一个栈进行出队列,正好可以实现我们的想法。
故代码如下:
class MyQueue {
Stack<Integer> queue1;//入
Stack<Integer> queue2;//出
public MyQueue() {
queue1 = new Stack<>();
queue2 = new Stack<>();
}
public void push(int x) {
queue1.push(x);
}
public int pop() {
int x = 0;
if(queue2.isEmpty()){
while(!queue1.isEmpty()){
queue2.push(queue1.pop());
}
}
x = queue2.pop();
return x;
}
public int peek() {
int x = 0;
if(queue2.isEmpty()){
while(!queue1.isEmpty()){
queue2.push(queue1.pop());
}
}
x = queue2.peek();
return x;
}
public boolean empty() {
return queue1.isEmpty()&&queue2.isEmpty();
}
}
}
关于栈实现队列,以上就是今天的内容,本文仅仅简单介绍了一下。
这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言哦。