스택(Stack)

스택은 데이터의 삽입 및 삭제가 데이터 저장소의 맨 윗 부분에서만 일어나는 자료구조다.
스택은 LIFO(Last In, First Out) 또는 FILO(First In, Last Out) 데이터 관리 방식을 따른다.

LIFO는 마지막에 넣은 데이터를 가장 먼저 추출하는 데이터 관리 정책이고
FILO는 처음에 넣은 데이터를 가장 마지막에 추출하는 데이터 관리 정책이다.

스택이 들어오는 과정을 push라고 한다.
push( ) 로 데이터를 스택에 넣는다. 새로 들어오는 데이터의 위치는 저장소의 끝 부분(Top 혹은 Top pointer)다. 데이터를 꺼낼 때는 .pop( )을 사용해 역시 꼭대기(Top)에서부터 꺼낸다.
.append( )로 꼭대기에 계속 데이터를 쌓아 올릴 수 있다.

push( ) , append( ) 차이 무엇 ?





https://visualgo.net/en/list




예 )

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
코드 출처 : 파이썬 한글 문서


같은 내용을 달리 표현한 것 :


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
def push(item):
    stack.append(item)
    
def pop():
    return stack.pop()

if __name__ == "__main__":
    stack = []
    push(1)
    push(2)
    push(3)
    push(4)
    print(stack)
    
    while stack:
        print("pop : ", pop())

코드 실행 결과 :

[1, 2, 3, 4]
pop : 4
pop : 3
pop : 2
pop : 1


스택의 장점
  • 데이터 저장 및 읽기 속도가 빠르다.
  • 구조가 단순해 구현이 쉽다. 
  • 참조 지역성 (?) 
스택의 단점 
  • 데이터의 최대 갯수를 미리 정해야 한다. 
    • 파이썬에서 재귀 함수는 1000번까지만 호출 가능
  • 저장 공간의 낭비가 발생할 수 있다.
    • 미리 최대 갯수만큼 저장 공간을 확보해야 함
  • 데이터를 탐색하기 어렵다.


< 참고한 사이트 및 블로그들 >

잔재미코딩,   블로그 '다임하게',   블로그 '초코몽키의 개발공부로그'