본문 바로가기
Python

[Py] Queue 와 Stack 구현하기: 상속과 오버라이딩 이용.

by ds31x 2024. 11. 13.

다음 코드 참고


main script

from ds_stack import Stack
from ds_queue import Queue

def test_stack():
    print("Testing Stack...")
    stack = Stack(10)
    # 숫자 1부터 10까지 push + 11도 push
    for i in range(1, 12):
        stack.push(i)
        print(f"Pushed {i}, Stack size: {stack.size()}")

    # 모든 요소를 pop
    while not stack.is_empty():
        print(f"Popped {stack.pop()}, Stack size: {stack.size()}")

    # 빈 상태에서 pop 시도
    print(f"Popped from empty stack: {stack.pop()}")

def test_queue():
    print("\nTesting Queue...")
    queue = Queue(10)
    # 숫자 1부터 10까지 push + 11도 push
    for i in range(1, 12):
        queue.push(i)
        print(f"Pushed {i}, Queue size: {queue.size()}")

    # 모든 요소를 pop.
    while not queue.is_empty():
        print(f"Popped {queue.pop()}, Queue size: {queue.size()}")

    # 빈 상태에서 pop 시도
    print(f"Popped from empty queue: {queue.pop()}")

if __name__ == "__main__":
    test_stack()
    test_queue()

queue

# ds_queue.py
class Queue(list):
    def __init__(self, max_size=10):
        self.max_size = max_size
        super().__init__()

    def push(self, item):
        if len(self) < self.max_size:
            self.append(item)
        else:
            print(f"Queue is full. Cannot push {item}.")

    def pop(self):
        if self.is_empty():
            return None
        return super().pop(0)  # FIFO 방식으로 pop

    def size(self):
        return len(self)

    def is_empty(self):
        """리스트가 비어있는지 확인하는 메서드"""
        return len(self) == 0

stack

# ds_queue.py

class Stack(list):
    def __init__(self, max_size=10):
        self.max_size = max_size
        super().__init__()

    def push(self, item):
        if len(self) < self.max_size:
            self.append(item)
        else:
            print(f"Stack is full. Cannot push {item}.")

    def pop(self):
        if self.is_empty():
            return None
        return super().pop()

    def size(self):
        return len(self)

    def is_empty(self):
        """리스트가 비어있는지 확인하는 메서드"""
        return len(self) == 0