Algorithm/Data Structures
[자료구조] 스택(Stack)
NegotiationMan
2023. 9. 6. 12:07
스택이란 ?
stack의 뜻을 사전에서 찾아보니 쌓이다, 채우다, 무더기 라는 뜻이 나온다.
그럼 자료구조에서 스택이란 무엇일까 ?
바로 데이터를 순서대로 쌓는 자료구조이다.
음 .. 간단하게 예시를 들어보자면 스택은 박스다.

박스에 물품들을 차곡차곡 쌓다보면 마지막에 저장한 물품을 가장 먼저 꺼내게 된다.
스택도 동일한 구조이다.
스택의 특징
- 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out) 구조이다.
- 즉, 스택은 박스와 같은 구조로 양 옆과 바닥이 막혀 있어서 한 방향으로만 뺄 수 있는 구조이다.
- 넣은 순서와 꺼낸 순서가 역순이 된다
- 예를 들자면 스택에 0, 1, 2의 순서로 데이터를 넣고 꺼낸다면 2, 1, 0 순서로 꺼내게 된다.
- 파이썬에서 스택은 리스트로 쉽게 구현할 수 있다.
- 데이터는 하나씩 넣고 뺄 수 있다.
- 하나의 입출력 방향을 가지고 있다.
스택의 특징
- 원소의 추가의 시간복잡도는 O(1)이다.
- 원소의 제거가 시간복잡도는 O(1)이다.
- 제일 상단의 원소 확인하는데 시간복잡도는 O(1)이다.
- 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능하다.
스택 구현
# 파이썬으로 스택 구현
stack = []
# Push 연산 구현
def push(x):
stack.append(x)
# Pop 연산 구현
def pop():
if not is_empty():
stack.pop()
# Top 연산 구현
def top():
if not is_empty():
return stack[-1]
# Is_Empty 연산 구현
def is_empty():
return len(stack) == 0
# test 함수 구현
def test():
push(5) # [5]
push(4) # [5, 4]
push(3) # [5, 4, 3]
print(top()) # 3
pop() # [5, 4]
pop() # [5]
print(top()) # 5
push(10) # [5, 10]
push(12) # [5, 10, 12]
print(top()) # 12
pop() # [5, 10]
print(top()) # 10
# main 함수
def main():
test()
if __name__ == "__main__":
main()
스택의 활용
ex) 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로