스택은 먼저 들어간 것이 나중에 오는 형태를 가진 자료구조라고 한다. 데이터를 추가하고 삭제하는데 알고 있어야 할 특징이다.
즉, 가장 최근에 추가 된 항목이 가장 먼저 제거 된다. 이름도 일종의 항목을 쌓아놓은 형태를 말하는 것이다.
큐도 보면서 드는 생각인데 이런 추상적 개념을 만드는 것이 특정한 분야에선 크게 도움이 될 것이라고 생각한다.
스택의 특징
데이터를 pick 해서 접근 할 수 있는게 아닌 제한적으로 접근 할 수 있다. 직접적인 원소 접근은 항상 목록의 top 부분에서만 일어난다.
Queue, Linked List와 같은 자료구조와 비교 할 때 직접 구현에 대한 난이도가 쉬운 편이다.
데이터를 추가하는 입력을 Push, 출력을 Pop이라고 부른다.
함수가 함수를 호출하거나, 자기 자신을 호출하는 것도 스택에 기반을 두고 있다.
스택의 활용
undo
내가 구현한 스택
import sys
def empty(idx):
if myStack[idx] is None:
return True
else:
return False
def top(idx):
if not empty(idx):
return myStack[idx]
else:
return -1
def size(idx):
return idx + 1
def pop(idx):
if not empty(idx):
output = myStack[idx]
myStack[idx] = None
return output
else:
return -1
def push(item, idx):
myStack[idx] = item
return
commandList = int(sys.stdin.readline())
myStack = [None] * 10000
curStackIdx = -1
for i in range(commandList):
command = sys.stdin.readline().strip()
if " " in command:
# 여긴 Push N 전용
parts = command.split(" ")
curStackIdx += 1
push(parts[1], curStackIdx)
else:
if command == "top":
print(top(curStackIdx))
elif command == "size":
print(size(curStackIdx))
elif command == "empty":
if empty(curStackIdx) :
print("1")
else:
print("0")
elif command == "pop":
popResult = pop(curStackIdx)
if popResult != -1:
curStackIdx -= 1
print(popResult)
'별 잡다' 카테고리의 다른 글
Hash (0) | 2025.03.28 |
---|---|
큐 : Queue (+ 우선순위 큐) (0) | 2025.03.25 |
짤짤이 알고리즘 특강 (0) | 2025.03.21 |
분할 정복 : Divide and Conquer (0) | 2025.03.21 |
이분 탐색 : Binary Search (0) | 2025.03.20 |