본문으로 건너뛰기
실습하기

접시처럼 쌓아 올리는 스택(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 강의를 등록해 주세요!