Python 스택 데이터 구조 튜토리얼

Python에서 LIFO 스택을 구현합니다. 대화형 스택 코드 예제를 실행하여 푸시, 팝, 픽 및 용량 제한을 마스터하세요.

에디터에서 사용해 보세요

개요

스택은 LIFO(후입선출) 원칙을 따르는 선형 데이터 구조입니다. 이는 접시 더미와 유사하게 스택에 추가된 마지막 요소가 가장 먼저 제거된다는 것을 의미합니다.

스택은 푸시(항목을 맨 위에 추가)와 팝(가장 최근에 추가된 항목 제거)이라는 두 가지 주요 작업을 지원합니다. 또한 엿보기 또는 상단 작업을 통해 상단 요소를 제거하지 않고도 검사할 수 있습니다.

Python에서는 `.append()` 및 `.pop()` 메서드가 포함된 목록을 사용하거나 O(1) 시간에 최적화된 이중 종료 대기열 작업을 제공하는 `collections.deque` 객체를 사용하여 스택을 쉽게 구축할 수 있습니다.

코드 및 실행 출력

푸시, 팝 및 픽 기능을 에뮬레이트하기 위해 Python의 목록 구조를 사용하는 사용자 정의 스택 구현입니다.

class Stack:
    def __init__(self):
        self.items = []
        
    def is_empty(self):
        return len(self.items) == 0
        
    def push(self, item):
        self.items.append(item)
        print(f"Pushed: {item}")
        
    def pop(self):
        if self.is_empty():
            return "Underflow: Stack is empty"
        popped = self.items.pop()
        print(f"Popped: {popped}")
        return popped
        
    def peek(self):
        if self.is_empty():
            return "Stack is empty"
        return self.items[-1]
        
    def size(self):
        return len(self.items)

# Initialize stack
stack = Stack()
stack.push("Apples")
stack.push("Bananas")
stack.push("Cherries")

print(f"Current Stack Size: {stack.size()}")
print(f"Top Element (Peek): {stack.peek()}")

stack.pop()
print(f"Stack after Pop: {stack.items}")
터미널 출력
Pushed: Apples
Pushed: Bananas
Pushed: Cherries
Current Stack Size: 3
Top Element (Peek): Cherries
Popped: Cherries
Stack after Pop: ['Apples', 'Bananas']

단계별 구현

  • 소프트웨어 시스템에서 실행 취소 기능 관리
  • 컴파일러에서 구문 분석 및 괄호 검사
  • 엔진에서 재귀하는 동안 실행 호출 스택 추적

자주 묻는 질문

Stacks의 일반 목록보다 collections.deque가 선호되는 이유는 무엇입니까?

목록은 편리하지만 내부적으로는 동적 배열입니다. 크기를 조정할 때 메모리 재할당에는 O(n) 시간이 걸릴 수 있습니다. deque 개체는 이중 연결 목록 아키텍처를 사용하여 O(1) 푸시 및 팝을 보장합니다.

Python에서 스택이 오버플로될 수 있나요?

목록 배열을 사용하는 Python의 표준 스택 클래스는 사용 가능한 시스템 메모리를 모두 소비할 때까지 커집니다. 그러나 Python의 재귀 스택에는 무한 루프로 인해 인터프리터가 충돌하는 것을 방지하기 위한 기본 제한(일반적으로 1000)이 있습니다.

관련 주제