Hey Tech

스택(Stack) 자료구조 이해(+ Python) 본문

알고리즘/이론

스택(Stack) 자료구조 이해(+ Python)

Tony Park (토니) 2021. 2. 23. 10:53
728x90
반응형

본 포스팅에서는 스택(Stack) 자료구조에 대해 알아봅니다.

📚 목차

1. 스택(Stack) 자료구조란?
2. 스택 동작 예시
3. 스택 구현(Python)

1. 스택(Stack) 자료구조란?

스택 자료구조는 먼저 들어온 데이터가 늦게 나가는 형태의 자료구조로서 선입후출(先入後出) 방식입니다. 스택 자료구조는 아래의 그림 1 과 같이 입구와 출구가 동일한 형태로 표현할 수 있으며 "박스 쌓기"를 연상하시면 기억하기 편합니다.

그림 1. 선입후출 형태의 자료구조인 스택 시각화


스택 자료구조는 아래 2가지 핵심적인 함수로 동작합니다.

  • 데이터 삽입(Push)
  • 데이터 삭제(Pop)

스택 자료구조를 사용할 때는 오버플로우(Overflow)와 언더플로우(Underflow) 발생에 유의해야 합니다.

  • 오버플로우: 어떠한 자료구조가 저장할 수 있는 데이터의 크기를 초과한 상태에서 데이터 삽입을 수행할 때 발생
  • 언더플로우: 어떠한 자료구조에 데이터가 전혀 없는 상태에서 데이터 삭제를 수행할 때 발생

2. 스택 동작 예시

이제 스택 자료구조의 동작 방식을 살펴보겠습니다. 스택 자료구조는 그림 2 와 같이 입구와 출구가 동일한 형태로 표현됩니다.

그림 2. 스택 자료구조 및 연산 시각화



그림 3 상단에 적힌 스택 자료구조 연산이 좌측에서 우측 순서대로 진행되는 예시를 살펴보겠습니다.

3. 스택 구현(Python)

위에서 살펴본 스택 자료구조의 동작을 파이썬의 리스트(list)라는 데이터 타입을 통해 쉽게 표현할 수 있습니다.
데이터 삽입은 append 함수를 이용하여 구현하며 데이터 삭제는 pop 함수를 이용합니다.

  • append 함수: 리스트 내에 좌측에서 우측 순서대로(index 증가) 데이터를 추가해 줍니다.
  • pop 함수: 가장 최근에 삽입된 데이터 한 개를 삭제해 줍니다.
stack = []

# 삽입(3) - 삽입(5) - 삽입(1) - 삽입(9) - 삽입(7) - 삭제() - 삭제() - 삽입(4) - 삽입(8) - 삭제()
stack.append(3) # 3 삽입
stack.append(5) # 5 삽입
stack.append(1) # 1 삽입
stack.append(9) # 9 삽입
stack.append(7) # 7 삽입
stack.pop() # 7 삭제
stack.pop() # 9 삭제
stack.append(4) # 4 삽입
stack.append(8) # 8 삽입
stack.pop() # 8 삭제

print(stack) # 스택 내 최하단 원소부터 데이터 출력
print(stack[::-1]) # 스택 내 최상단 원소부터 데이터 출력

실행 결과

[3, 5, 1, 4]
[4, 1, 5, 3]

포스팅 내용에 오류가 있을 경우 댓글 남겨주시면 감사드리겠습니다.
그럼 오늘도 건강한 하루 보내시길 바랍니다 :-D
고맙습니다.

728x90
반응형