접시처럼 쌓아 올리는 스택(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(비어 있는지 확인)이 있습니다.
다음 내용이 궁금하다면?
코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!