leetcode (225) 구현 스택 (파이썬) 큐와

그림 삽입 설명 여기
해결 방법 :

  1. 큐의 FIFO이고 스택 최종 출력이, 우리가 제 아웃 큐 후방 요소의 효과를 달성 할 수 있도록 구성 요소가 밖으로 여기서 대향 위치에 둘,
    제 생각에, 우리는 요구 큐 요소에서 구현 반전 동작
    하지만, 완전하게 큐의 마지막 요소를 넣어, 반대로 실현되지 않은이 문제를 해결하는 아이디어는, 당신은 팀의 머리에 이동할 수 있습니다, 당신은 같은 효과 스택 (LIFO)을 달성 할 수 그래서;
  2. 우리는 스택의 요소 요소의 하단을 위해 팀 머리를 달성 할 필요가있다.

방법 하나 : 우리는 달성하기 위해 두 개의 큐를 선택했습니다
: 기본 아이디어는 그대로 다음
) 요소에 현재의 팀이 팀 프로세스 큐에 X 있다고 가정 달성하기 위해 :(

  1. 우리는 달성하기 위해 두 개의 큐 큐 및 도움말을 사용, 큐 도움이 보조 큐이며, 주요 큐입니다;
  2. 우리는 순차적 인 요소들로 구성된 팀이 큐에 넣어 도움이되는 빈 때까지 큐 요소에 대한 팀이었다;
  3. 큐가 비어 있기 때문에 팀에 현재의 요소 x는 스택 (첫 번째 팀이되었다, 그래서 다음 큐가이 시간에 비어있는, 우리가 필요로하는 요소의 팀에 현재의 팀을 다시 입력 X,,, 그것은 스택의 맨 아래의 요소 ) 및 팀의 큐 우선 순위에 이때, 우리가 LIFO 스택의 당량을 달성한다.
  4. 큐 및 복사 요소에서 추가 지원 후 올 수 있습니다.
    다음과 같이 코드입니다 :
class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.queue = []
        self.help = []


    def push(self, x):
        """
        Push element x onto stack.
        """

        while len(self.queue) > 0:

            self.help.append(self.queue.pop(0))

        self.queue.append(x)

        while len(self.help) > 0:

            self.queue.append(self.help.pop(0))

    def pop(self) :
        """
        Removes the element on top of the stack and returns that element.
        """

        de = self.queue.pop(0)
        return de

    def top(self):
        """
        Get the top element.
        """
        de = self.queue[0]
        return de

    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        if len(self.queue) == 0:
            return True
        return False

방법 2 : 하나의 큐가 달성 :
기본 개념

  1. 큐 프로세스 구현 푸시;
  2. 먼저 큐 (X)의 현재 원소 들어간다;
  3. 이어서 대기열 길이의 현재 길이를 얻는다;
  4. 길이를 1 없음 디큐의 길이; 마지막 순서로 큐 디큐 현재 대기열 성분, 팀의 각 요소의 길이의 감소 된 값을 다시 입력 대기열이 시간에 큐 요소의 첫 번째 요소이며 X, 프로세스가 LIFO 효과가 실현되도록 팝.

다음과 같이 코드입니다 :

class MyStack:

    def __init__(self):
        """
        Initialize your data structure here.
        """
        self.queue = []
        

    def push(self, x):
        """
        Push element x onto stack.
        """

        self.queue.append(x)

        length = len(self.queue)

        while length > 1:

            self.queue.append(self.queue.pop(0))
            length -= 1


    def pop(self) :
        """
        Removes the element on top of the stack and returns that element.
        """

        de = self.queue.pop(0)
        return de



    def top(self):
        """
        Get the top element.
        """
        de = self.queue[0]
        return de

    def empty(self) -> bool:
        """
        Returns whether the stack is empty.
        """
        if len(self.queue) == 0:
            return True
        return False
게시 된 100 개 원래 기사 · 원의 찬양 3 ·은 10000 +를 볼

추천

출처blog.csdn.net/cy_believ/article/details/104612729