두개의 스택을 이용한 큐의 구현

박진은·2022년 5월 5일
0

자료구조

목록 보기
11/37
class Stack:
    def __init__(self):
        self.top = []

    def isEmpty(self):
        return len(self.top) == 0

    def pop(self):
        return self.top.pop()

    def push(self, item):
        self.top.append(item)

class QueueWithStack(Stack):
    def __init__(self):
        self.stack1 = Stack()
        self.stack2 = Stack()
        self.Front = 0
        self.rear = 0

    def enqueue(self, item):

        self.stack1.push(item)

    def dequeue(self):

        if self.stack2.isEmpty():
            while not self.stack1.isEmpty():
                item = self.stack1.pop()
                self.stack2.push(item)  # 출력을 담당하는 스택 2이 비어있다면 스택 1의 모든 내용물을 스택 2 로 옮긴다.

            return self.stack2.pop()
        else:
            return self.stack2.pop()

			def isEmpty(self):
		        if self.stack1.isEmpty() and self.stack2.isEmpty():
		            return True
		        else:
		            False
		
		
sQ = QueueWithStack()
for i in range(10):
    sQ.enqueue(i)
for i in range(5):
    print(sQ.dequeue(), end='->')
for i in range(11, 15):
    sQ.enqueue(i)
print(sQ.stack1.top, sQ.stack2.top)

위에 코드에서 가장 신경써야 하는 점은 dequeue 부분이다 stack은 max량이 없으니 enqueue는 계속해서 stack1 에 쌓는것이 가능하다 하지만 dequeue는 stack2가 비어 있으면 구현이 불가능하다 따라서 이를 수정해야 하는데 이를 위해서 if 문을 사용해서 dequeue가 사용되었을 때 출력을 담당하는 부분인 두번째 스택의 빈여부를 먼저 확인한다. 이후 두번재 스택이 비어 있으면 입력을 담당하는 스택에 있는 데이터를 전부 스택 2에 옮긴다. 이후에 스택 2 에서 스택의 위부터 출력을 진행하면 순서가 선입선출로 바뀐다.

profile
코딩

0개의 댓글