Python 스택 데이터 구조 튜토리얼
Python에서 LIFO 스택을 구현합니다. 대화형 스택 코드 예제를 실행하여 푸시, 팝, 픽 및 용량 제한을 마스터하세요.
개요
스택은 LIFO(후입선출) 원칙을 따르는 선형 데이터 구조입니다. 이는 접시 더미와 유사하게 스택에 추가된 마지막 요소가 가장 먼저 제거된다는 것을 의미합니다.
스택은 푸시(항목을 맨 위에 추가)와 팝(가장 최근에 추가된 항목 제거)이라는 두 가지 주요 작업을 지원합니다. 또한 엿보기 또는 상단 작업을 통해 상단 요소를 제거하지 않고도 검사할 수 있습니다.
Python에서는 `.append()` 및 `.pop()` 메서드가 포함된 목록을 사용하거나 O(1) 시간에 최적화된 이중 종료 대기열 작업을 제공하는 `collections.deque` 객체를 사용하여 스택을 쉽게 구축할 수 있습니다.
코드 및 실행 출력
푸시, 팝 및 픽 기능을 에뮬레이트하기 위해 Python의 목록 구조를 사용하는 사용자 정의 스택 구현입니다.
stack.py
에디터에서 사용해 보세요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)이 있습니다.