【数据结构面试题】栈与队列的相互实现

目录

1.队列实现栈

1.1创建栈

1.2判断是否为空

1.3入栈

1.4出栈

1.5获取栈顶元素

1.6完整代码

2. 用栈实现队列

2.1创建队列

2.2判断是否为空 

2.3入队列

2.4出队列

2.5获取队头元素

2.6完整代码


1.队列实现栈

用队列实现栈icon-default.png?t=N7T8https://leetcode.cn/problems/implement-stack-using-queues/

描述: 

【数据结构面试题】栈与队列的相互实现_第1张图片

 【数据结构面试题】栈与队列的相互实现_第2张图片

【数据结构面试题】栈与队列的相互实现_第3张图片

方法:我们用两个队列来实现栈

整体思路:

【数据结构面试题】栈与队列的相互实现_第4张图片

1.1创建栈

代码: 

public class MyStack {
    private Queue qu1;
    private Queue qu2;
    public MyStack(){
        qu1=new LinkedList<>();
        qu2=new LinkedList<>();
    }

}

1.2判断是否为空

只要qu1与qu2都为null时,栈就为空

代码: 

 public boolean empty() {
        return qu1.isEmpty() && qu2.isEmpty();
    }

1.3入栈

(1)我们对两个队列进行检查,那个队列不为空,我们就把元素放在那个队里

(2)若元素都为空,则我们把元素放在qu1里

代码: 

  public void push(int x) {
        if (!qu1.isEmpty()) {
            qu1.offer(x);
        } else if (!qu2.isEmpty()) {
            qu2.offer(x);
        } else {
            qu1.offer(x);
        }
    }

1.4出栈

(1)我们对两个队列进行检查,若都为空,返回-1。

(2)只要不是(1)则先检查qu1,再先检查qu2,将不为空的队列出size-1个元素到另一个队列里

代码:

    public int pop() {
        if (empty()) {
           return -1;
        }
        if(!qu1.isEmpty()){
            int size=qu1.size() ;
            for (int i = 0; i 

1.5获取栈顶元素

与出栈方法类似

  public int top() {
        if (empty()) {
            return -1;
        }
        if(!qu1.isEmpty()){
            int val=-1;
            int size=qu1.size() ;
            for (int i = 0; i 

1.6完整代码

import java.util.LinkedList;
import java.util.Queue;

public class MyStack {
    private Queue qu1;
    private Queue qu2;

    public MyStack() {
        qu1 = new LinkedList<>();
        qu2 = new LinkedList<>();
    }

    public void push(int x) {
        if (!qu1.isEmpty()) {
            qu1.offer(x);
        } else if (!qu2.isEmpty()) {
            qu2.offer(x);
        } else {
            qu1.offer(x);
        }
    }

    public int pop() {
        if (empty()) {
           return -1;
        }
        if(!qu1.isEmpty()){
            int size=qu1.size() ;
            for (int i = 0; i 

2. 用栈实现队列

描述: 

用栈实现队列icon-default.png?t=N7T8https://leetcode.cn/problems/implement-queue-using-stacks/【数据结构面试题】栈与队列的相互实现_第5张图片

【数据结构面试题】栈与队列的相互实现_第6张图片 方法:两个栈来实现队列

2.1创建队列

public class MyQueue {

    private Stack stack1;
    private Stack stack2;

    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }
}

2.2判断是否为空 

只要stack1与stack2都为null时,队列就为空

public boolean empty() {
        return stack1.empty()&&stack2.empty();
    }

2.3入队列

入栈的元素全部放入stack1中

 public void push(int x) {
        stack1.push(x);
    }

2.4出队列

出栈时,检查stack2是否为null,若为null,则直接将stack1的元素出栈后入到stack2里

然后弹出栈顶元素即可

   public int pop() {
        if (empty()){
            return -1;
        }
        if(stack2.empty()){
          while(!stack1.empty())  {
              stack2.push(stack1.pop());
          }
        }
        return stack2.pop();
    }

2.5获取队头元素

public int peek() {
        if (empty()){
            return -1;
        }
        if(stack2.empty()){
            while(!stack1.empty())  {
                stack2.push(stack1.pop());
            }
        }
        return stack2.peek();
    }

2.6完整代码

import java.util.Stack;

public class MyQueue {

    private Stack stack1;
    private Stack stack2;

    public MyQueue() {
        stack1 = new Stack<>();
        stack2 = new Stack<>();
    }


    public void push(int x) {
        stack1.push(x);
    }

    public int pop() {
        if (empty()){
            return -1;
        }
        if(stack2.empty()){
          while(!stack1.empty())  {
              stack2.push(stack1.pop());
          }
        }
        return stack2.pop();
    }

    public int peek() {
        if (empty()){
            return -1;
        }
        if(stack2.empty()){
            while(!stack1.empty())  {
                stack2.push(stack1.pop());
            }
        }
        return stack2.peek();
    }

    public boolean empty() {
        return stack1.empty() && stack2.empty();
    }
}

以上为我个人的小分享,如有问题,欢迎讨论!!! 

都看到这了,不如关注一下,给个免费的赞 

 

你可能感兴趣的:(数据结构,经验分享,其他,java)