스택(stack)
데이터를 제한적으로 접근할 수 있는 구조 (한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조)
가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 (LIFO 정책)
스택 구조
스택은 LIFO(Last In First Out)
또는 FILO(First In Last Out)
데이터 관리 방식을 따름
- LIFO : 마지막에 들어간것이 가장 먼저 나온다.
- FILO : 처음 들어간것이 가장 나중에 나온다.
대표적인 스택의 활용 - 컴퓨터 내부의 프로세스 구조의 함수 동작 방식
주요 기능
- push() : 데이터를 스택에 넣기
- pop() : 데이터를 스택에서 꺼내기
스택 구조와 프로세스 스택
스택 구조는 프로세스 실행 구조의 가장 기본
자료 구조 스택의 장단점
장점
구조가 단순해서, 구현이 쉽다.
데이터 저장 / 읽기 속도가 빠르다.
단점
데이터 최대 갯수를 미리 정해야 한다. (파이썬의 경우 재귀 함수는 1000번까지만 호출이 가능)
저장 공간의 낭비가 발생할 수 있음.
파이썬 리스트 기능에서 제공하는 메서드
append(push), pop 메서드 제공
스택 구현해보기
# 스택 구현
class Stack:
def __init__(self):
self.data_list = []
def push(self, data):
self.data_list.append(data)
def pop(self):
if self.size() == 0:
return 0
data = self.data_list[-1]
del self.data_list[-1]
return data
def size(self):
return len(self.data_list)
def empty(self):
if self.size() == 0:
return True
return False
def stack_data(self):
return self.data_list
if __name__ == '__main__':
s = Stack()
print(f'공간 유무 : {s.empty()}')
print(f'현재 스택 데이터 : {s.stack_data()}')
s.push(1)
s.push(2)
s.push(3)
print(f'현재 스택 데이터 : {s.stack_data()}')
print(f'공간 유무 : {s.empty()}')
print(f'스택 사이즈 : {s.size()}')
print(f'스택 pop : {s.pop()}')
print(f'현재 스택 데이터 : {s.stack_data()}')
print(f'스택 사이즈 : {s.size()}')
'알고리즘' 카테고리의 다른 글
링크드 리스트(Linked List) - 1 (0) | 2021.07.16 |
---|---|
큐(Queue) (0) | 2021.07.12 |
재귀함수 (0) | 2021.06.29 |
삽입정렬 -스터디- (0) | 2021.06.25 |
선택정렬 -스터디- (0) | 2021.06.21 |