[A 질문 일] LeetCode -225. 스택 큐 달성

제목 설명

다음 스택을 사용하여 큐 구현 :

  • 푸시 (X) - 스택 원소 X
  • ) (팝업 - 상단 요소를 제거
  • 상단 () - 상단의 요소를 가져옵니다
  • ) (빈 - 반환 스택이 비어 있는지

참고 :

  • / 다시 들여다이며, 푸시 앞, 크기에서 팝, 이러한 작업은 합법적으로 비어 - 당신은 기본 큐의 작업을 할 수 있습니다.
  • 당신이 대기열을 지원하지 않을 수 있습니다 사용하는 언어입니다. 당신은 큐, 표준에 대한 작업만큼 큐를 시뮬레이션 할 목록이나 양단 큐 (양단 큐)를 사용할 수 있습니다.
  • 당신은 모든 작업 (예를 들어, 빈 스택에 팝업 작동이나 상단 호출하지 않습니다) 유효하다고 가정 할 수있다.

문제 해결 아이디어

우리는 FIFO 큐의 특성 요소 것을 알고, 스택의 특성이 문제, 우리가 할 수의 첫 번째 아웃 요소의 마지막 스택 구현하기 위해 두 개의 큐를 사용하는 기능을 :

아래에 도시 된 바와 같이, 먼저, 스택 메모리 공간을 구현하기 위해 사용될 두 개의 큐를 정의하고, 상기 스택이 때문에 연속적으로 번호 하나로 큐 요소가 될 때, 상기 스택이 때문에 소자 큐 중 하나가 순차적으로 큐에 설정하는 것이 때 II 큐 출력 큐 하나의 마지막 요소는 큐의 최종 "푸시", 따라서 스택 동작을 완료의 최종 요소 때문에, 상기 소자는 큐에 저장되고,이 경우는 II 하나의 큐가 비어 숫자 뒤에 다시 튀어 필요할 때 큐 하나의 큐에 두 요소 큐 요소 최종적 때문에 무한히에서 스택 리턴;

우리의 방법은 얻어진 - 큐가 비어 있지 않을 때 큐가 빈 랜덤 요소가되는 경우, 큐에 가압 부재가 대기열에, 비어 있지 않은, 적층 체의 다른 모든 요소는 비어있는 큐에 순차적 때 마지막으로, 스택으로 만 창 요소, 판정 스택 방법 비어 있는지 그렇지 스택이 비어, 비어 있지 스택과 비어 큐가 있는지 여부를 판정한다

두 스택은 큐를 달성

코드

import java.util.LinkedList;
import java.lang.Integer;

public class MyStack {
    /** Initialize your data structure here. */
    private LinkedList<Integer>[] queue=new LinkedList[2]; //用两个队列实现栈
    private int queueIndex;
    public MyStack() {
        for(int i=0;i<2;i++)
        {
            queue[i]=new LinkedList<>();
        }
        queueIndex=0;
    }

    /** Push element x onto stack. */
    public void push(int x) {
        queue[queueIndex].offer(x);
    }

    /** Removes the element on top of the stack and returns that element. */
    public int pop() {
        int element;
        while(queue[queueIndex].size()>1)
        {
            int e=queue[queueIndex].pop();
            queue[(queueIndex+1)%2].offer(e);
        }
        element=queue[queueIndex].pop();
        queueIndex=(queueIndex+1)%2;
        return element;
    }

    /** Get the top element. */
    public int top() {
        int element;
        while(queue[queueIndex].size()>1)
        {
            int e=queue[queueIndex].pop();
            queue[(queueIndex+1)%2].offer(e);
        }
        element=queue[queueIndex].pop();
        queue[(queueIndex+1)%2].offer(element);
        queueIndex=(queueIndex+1)%2;
        return element;
    }

    /** Returns whether the stack is empty. */
    public boolean empty() {
        if(queue[0].isEmpty() && queue[1].isEmpty())
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
출시 구 개 원래 기사 · 원의 칭찬 0 · 조회수 (205)

추천

출처blog.csdn.net/qq_24210431/article/details/104592890