새소식

Study/Today_I_Learned

[자료구조] Stack 스택

  • -
728x90

 스택 구조는 데이터를 제한적으로 접근할 수 있는 구조, 한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조라는 점에서 큐와 유사하지만
가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조라는 점에서 반대입니다. 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
728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.