본문 바로가기
목차
Python

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

by ds31x 2024. 11. 13.
728x90
반응형

참고자료

https://dsaint31.tistory.com/853

 

[CE] Queue

QueueQueue는 자료구조 중 하나로 선입선출(FIFO, First-In-First-Out) 방식으로 동작함.즉, 먼저 들어온 데이터가 먼저 나가는 구조를 가짐.일상적인 예로 줄서기를 생각하면 이해하기 쉬운데, 줄의 맨 앞

dsaint31.tistory.com

https://dsaint31.tistory.com/490

 

[CE] Stack

StackStack은 자료구조의 하나로서 FILO (First-In-Last-Out, LIFO 와 같은 의미.)로 동작함.많은 경우 접시 쌓기를 예로 사용하여 First-In-Last-Out (FILO), Last-In-First-Out (LIFO)를 설명한다.Stack에 저장되는 데이터

dsaint31.tistory.com

https://dsaint31.me/mkdocs_site/python/oop/oop_1_04_relationship

 

BME

OOP : Is-a and Has-a Relationship OOP에서 설계 단계 중 가장 중요한 부분 중 하나가 object간의 관계를 정하는 것이다. 사용할 수 있는 관계들 중 가장 유명한 것은 다음과 같은 2가지 이다. is-a relationship ha

dsaint31.me

 


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
728x90