728x90
반응형
✅ 스택(Stack)이란?
- 데이터를 제한적으로 접근할 수 있는 구조로 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조이다.
- 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조이다.
- 큐와 비교했을 때 큐는 FIFO(First In First Out) 구조를 보이지만 스택의 경우 LIFO(Last In First Out) 구조를 보인다.
📌 스택의 구조
- 위에서 설명했다싶이 스택은 LIFO(Last In First Out) 혹은 FILO(First In Last Out) 데이터 관리 방식을 따른다.
- LIFO : 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책
- FILO : 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책
- 대표적인 스택의 활용 방식
- 컴퓨터 내부의 프로세스 구조의 함수 동작 방식
- 주요 기능
- push() : 데이터를 스택에 넣는 함수
- pop() : 데이터를 스택에서 꺼내는 함수
📌 스택의 장단점
- 장점
- 구조가 단순하여 구현이 쉽다.
- 데이터 저장 및 읽기 속도가 빠르다.
- 단점(일반적인 스택의 경우)
- 데이터 최대 갯수를 미리 정해야 한다.
- 파이썬의 경우 재귀 함수는 1000번까지만 호출이 가능하다.
- 저장 공간의 낭비가 발생할 수 있다.
- 미리 최대 갯수만큼 저장 공간을 확보해야하기 대문이다.
- 데이터 최대 갯수를 미리 정해야 한다.
- 스택은 단순하고 빠른 성능을 위해 사용되기 때문에 보통 배열 구조를 활용하여 구현하는 것이 일반적이어서 위와 같은 단점이 발생할 수 있다.
📌 간단하게 스택 구현해보기
class Stack :
def __init__(self) :
self.items = []
def push(self, item) :
self.items.append(item)
def pop(self) :
return self.items.pop()
def peek(self) : # 이 메서드는 스택의 맨 위의 값을 리턴
return self.items[-1]
def is_empty(self) :
if len(self.items) == 0 :
return "스택이 비었습니다."
return "스택에 값이 존재합니다."
def size(self) :
return "스택의 크기는 다음과 같습니다 : " + str(len(self.items))
❗️ 결과
stack_test = Stack()
stack_test.push(0)
stack_test.push(1)
stack_test.push(2)
print(stack_test.items)
print(stack_test.is_empty())
print(stack_test.size())
stack_test.pop()
stack_test.pop()
print(stack_test.items)
print(stack_test.is_empty())
print(stack_test.size())
print(stack_test.peek()) // peek의 경우 값이 삭제되지 않고 맨 위의 값을 return 하는 것을 볼 수 있음
print(stack_test.items)
print(stack_test.is_empty())
print(stack_test.size())
stack_test.pop()
print(stack_test.items)
print(stack_test.is_empty())
print(stack_test.size())
728x90
반응형
'Studying > Algorithm & Data Structure' 카테고리의 다른 글
[자료구조] 링크드 리스트 (Linked List) (0) | 2023.05.30 |
---|---|
[자료구조] 큐 (Queue) (0) | 2023.05.23 |