본문 바로가기

알고리즘

스택(Stack)

스택(stack)

데이터를 제한적으로 접근할 수 있는 구조 (한쪽 끝에서만 자료를 넣거나 뺄 수 있는 구조)

가장 나중에 쌓은 데이터를 가장 먼저 빼낼 수 있는 데이터 구조 (LIFO 정책)

스택 구조

스택은 LIFO(Last In First Out) 또는 FILO(First In Last Out) 데이터 관리 방식을 따름

  • LIFO : 마지막에 들어간것이 가장 먼저 나온다.
  • FILO : 처음 들어간것이 가장 나중에 나온다.

대표적인 스택의 활용 - 컴퓨터 내부의 프로세스 구조의 함수 동작 방식

주요 기능

  • push() : 데이터를 스택에 넣기
  • pop() : 데이터를 스택에서 꺼내기

스택 구조와 프로세스 스택

스택 구조는 프로세스 실행 구조의 가장 기본

자료 구조 스택의 장단점

장점

구조가 단순해서, 구현이 쉽다.

데이터 저장 / 읽기 속도가 빠르다.

단점

데이터 최대 갯수를 미리 정해야 한다. (파이썬의 경우 재귀 함수는 1000번까지만 호출이 가능)

저장 공간의 낭비가 발생할 수 있음.

파이썬 리스트 기능에서 제공하는 메서드

append(push), pop 메서드 제공

스택 구현해보기

# 스택 구현
class Stack:
    def __init__(self):
        self.data_list = []

    def push(self, data):
        self.data_list.append(data)

    def pop(self):
        if self.size() == 0:
            return 0
        data = self.data_list[-1]
        del self.data_list[-1]
        return data

    def size(self):
        return len(self.data_list)

    def empty(self):
        if self.size() == 0:
            return True
        return False

    def stack_data(self):
        return self.data_list


if __name__ == '__main__':
    s = Stack()

    print(f'공간 유무 : {s.empty()}')
    print(f'현재 스택 데이터 : {s.stack_data()}')
    s.push(1)
    s.push(2)
    s.push(3)
    print(f'현재 스택 데이터 : {s.stack_data()}')
    print(f'공간 유무 : {s.empty()}')
    print(f'스택 사이즈 : {s.size()}')
    print(f'스택 pop : {s.pop()}')
    print(f'현재 스택 데이터 : {s.stack_data()}')
    print(f'스택 사이즈 : {s.size()}')

'알고리즘' 카테고리의 다른 글

링크드 리스트(Linked List) - 1  (0) 2021.07.16
큐(Queue)  (0) 2021.07.12
재귀함수  (0) 2021.06.29
삽입정렬 -스터디-  (0) 2021.06.25
선택정렬 -스터디-  (0) 2021.06.21