스택 구조는 데이터를 제한적으로 접근할 수 있는 구조, 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조라는 점에서 큐와 유사하지만 가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조라는 점에서 반대입니다. ctrl+z를 통해 바로 이전의 행동을 취소하는 것과 비슷합니다. 앞의 포스팅에서 언급한 것과 마찬가지로 LIFO (last-in, first-out) 데이터 관리 방식을 따릅니다. (혹은 FILO, first-in, last-out)
활용 ▶ 컴퓨터 내부의 프로세스 구조의 함수 동작 방식 → 프로그램 안의 다양한 함수들이 동작하는 방식에 쓰이는 자료구조
#재귀함수로 이해해보기
def recursive(num):
if num <= 0 :
print('num is less than or equal to 0')
else:
print(f'{num} is greater than 0')
recursive(num-1)
print("returned", num)
recursive 함수에 5를 넣어준 결과
기능 ▶ push() : 데이터 넣어주기 ▶ pop() : 데이터 꺼내기 ▶ top(), peek() : 데이터를 그대로 두고 가장 위의 값 '읽기'
장점 ▶ 구조가 단순해서 쉽게 구현할 수 있다 ▶ 구조가 단순하므로 저장/읽기 속도가 빠르다
단점 ▶ 데이터의 최대 갯수를 정해야 한다 - 파이썬의 경우 재귀함수는 1000번까지만 호출 가능함 ▶ 저장공간의 낭비가 발생할 수 있다
#리스트를 활용한 stack 구현
stack_ex = []
stack_ex.append(1) #== push
stack_ex.append(2)
stack_ex.append(3)
stack_ex.pop() #== 3
#함수로 정의하기
def push(data):
stack_ex.append(data)
def pop():
data = stack_ex[-1] #list 의 맨 끝에 있는 데이터 불러오기
del stack_ex[-1]
return data
def top():
data = stack_ex[-1]
return data