스택은 한쪽에서만 데이터를 접근(추가 & 제거) 할 수 있는 구조이며, LIFO(Last-In-First-Out)/FILO(First-In-Last-Out) 정책에 의해 데이터가 적재(PUSH)되거나 제거(POP) 됩니다. 바닥에 책을 쌓는 것을 생각하면 될거 같습니다. 바닥에 책을 하나씩 차곡차곡 쌓으면 가장 먼저 쌓은 책이 가장 아래에 있고, 책을 치울떄는 가장 나중에 쌓은 위에서부터 치웁니다.
(http://www.fun-coding.org/00_Images/stack.png)
스택에서 데이터가 적재되는 것을 Push, 제거되는 것을 Pop 이라고 합니다.
data_stack = list()
data_stack.append(1)
data_stack.append(2)
print(data_stack.pop()) # 2 출력
파이썬에서는 리스트에 대해서 append와 pop을 제공하기 때문에 쉽게 사용할 수 있습니다. Append랑 Push랑 같은 개념으로, append()를 하면 해당 리스트의 마지막 인덱스(index)에 값을 적재합니다. pop()을 하면 리스트에서 가장 마지막 인덱스(index)의 값을 반환하고, 리스트에서 해당 값은 제거합니다.
def push(data):
stack_list.append(data)
def pop():
data = stack_list[-1] # index -1 == 리스트에서의 마지막 인덱스
del stack_list[-1]
return data