스택 : Stack

스택은 먼저 들어간 것이 나중에 오는 형태를 가진 자료구조라고 한다. 데이터를 추가하고 삭제하는데 알고 있어야 할 특징이다.
즉, 가장 최근에 추가 된 항목이 가장 먼저 제거 된다. 이름도 일종의 항목을 쌓아놓은 형태를 말하는 것이다.
큐도 보면서 드는 생각인데 이런 추상적 개념을 만드는 것이 특정한 분야에선 크게 도움이 될 것이라고 생각한다.

스택의 특징

데이터를 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