접시처럼 쌓아 올리는 스택(Stack)
스택
은 데이터를 테이블 위의 접시처럼 쌓아 올리는 자료구조입니다.
쌓아올린 접시를 꺼낼 때 가장 위에 있는 접시부터 차례로 꺼내는 것처럼, 스택에서는 마지막에 추가된 데이터가 가장 먼저 제거됩니다.
즉 LIFO(Last In, First Out)
, "마지막에 들어온 것이 가장 먼저 나간다"라는 규칙을 따릅니다.
스택은 어떻게 활용되나요?
-
웹 브라우저의 뒤로 가기: 브라우저는 방문한 페이지들을 스택에 저장합니다. 뒤로 가기 버튼을 누를 때마다
마지막에 방문한 페이지
부터 차례로 이전 페이지로 돌아갑니다. -
텍스트 에디터의 실행 취소: 텍스트 에디터는 사용자가 입력한 텍스트를 스택에 저장해두고, 실행 취소 버튼을 누를 때마다
마지막에 입력한 텍스트
부터 차례로 삭제합니다.
스택의 주요 연산
스택에서는 몇 가지 기본 연산을 사용합니다.
-
push: 스택의 맨 위에 새로운 데이터를
추가
하는 연산입니다. -
pop: 스택의 맨 위에 있는 데이터를
제거 및 반환
하는 연산입니다. -
peek: 스택의 맨 위에 있는 데이터를 제거하지 않고
확인
만 하는 연산입니다. -
is_empty: 스택이
비어 있는지
를 확인하는 연산입니다.
파이썬에서의 스택 구현
파이썬에서는 리스트(List)를 이용해 간단히 스택을 구현할 수 있습니다.
리스트의 append()
메서드를 사용해 데이터를 추가하고, pop()
메서드를 사용해 데이터를 제거하면 스택의 기본적인 기능을 구현할 수 있습니다.
class Stack: # 스택 초기화 def __init__(self): self.stack = [] # push 연산: 스택에 데이터 추가 def push(self, item): self.stack.append(item) print(f"Push: {item}가 스택에 추가되었습니다.") # pop 연산: 스택에서 데이터 제거 def pop(self): if not self.is_empty(): item = self.stack.pop() print(f"Pop: {item}가 스택에서 제거되었습니다.") return item else: print("Pop: 스택이 비어 있습니다.") return None # peek 연산: 스택의 최상위 값 확인 def peek(self): if not self.is_empty(): return self.stack[-1] else: print("Peek: 스택이 비어 있습니다.") return None def is_empty(self): return len(self.stack) == 0 # 스택 사용 예시 my_stack = Stack() my_stack.push(1) # Push: 1이 스택에 추가 my_stack.push(2) # Push: 2가 스택에 추가 print(f"Peek: 현재 스택의 최상위 값은 {my_stack.peek()}입니다.") my_stack.pop() # Pop: 2가 스택에서 제거 my_stack.pop() # Pop: 1이 스택에서 제거 my_stack.pop() # 스택이 비어 있어 제거할 수 없음
정리하면?
-
스택은
LIFO(Last In, First Out)
구조를 따르는 자료구조입니다. -
주요 연산으로는 push(추가), pop(제거), peek(확인), is_empty(비어 있는지 확인)이 있습니다.
빈칸에 가장 적합한 스택의 연산은 무엇일까요?
가이드라인
AI 튜터
배포
디자인
업로드
수업 노트
즐겨찾기
도움말
코드 에디터
실행 결과