用队列实现栈(JAVA)
2023-12-31 15:34:47
仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push
、top
、pop
?和?empty
)。
实现?MyStack
?类:
void push(int x)
?将元素 x 压入栈顶。int pop()
?移除并返回栈顶元素。int top()
?返回栈顶元素。boolean empty()
?如果栈是空的,返回?true
?;否则,返回?false
?。
class MyStack {
private Queue<Integer> q1;
private Queue<Integer> q2;
public MyStack() {
q1 = new LinkedList<>();
q2 = new LinkedList<>();
}
public void push(int x) {
if(!q1.isEmpty()) {
q1.offer(x);
}else {
q2.offer(x);
}
}
public int pop() {
if(empty()) {
return -1;
}
//找到不为空的队列,转移size-1个元素
if(!q1.isEmpty()) {
int size = q1.size();
for(int i = 0; i < size - 1; i++) {
q2.offer(q1.poll());
}
return q1.poll();
}else {
int size = q2.size();
for(int i = 0; i < size - 1; i++) {
q1.offer(q2.poll());
}
return q2.poll();
}
}
public int top() {
if(empty()) {
return -1;
}//“出栈”时出不为空的队列,出size-1个元素,剩下的元素就是要出栈的元素
if(!q1.isEmpty()) {
int size = q1.size();
int tmp = -1;
for(int i = 0; i < size; i++) {
tmp = q1.poll();
q2.offer(tmp);
}
return tmp;
}else {
int size = q2.size();
int tmp = -1;
for(int i = 0; i < size; i++) {
tmp = q2.poll();
q1.offer(tmp);
}
return tmp;
}
}
public boolean empty() {
return q1.isEmpty() && q2.isEmpty();
}
}
文章来源:https://blog.csdn.net/weixin_69762204/article/details/135315539
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!