[DataStructure] Stack

1 minute read

python-version-3.7.1

Stack (스택)

  • 선형구조

  • LIFO (Last In First Out)

  • 데이터 추가 및 제거를 하나의 방향으로만 가능


ds-01-stack



Method

  • push : 임의의 데이터 추가

  • pop : 최상단의 데이터 꺼낸 뒤 해당값 반환

  • get_top : 최상단에 위치하는 값 반환

  • get_size : 데이터 갯수 (사이즈) 반환

  • is_empty : 비어있는지 유무 반환 (bool)



Python Implementation Code

class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None  # prev == previous
        

class Stack:
    def __init__(self):
        self.top = None
        self.size = 0
    
    def push(self, data):
        new = Node(data)  # 새로운 node 인스턴스 생성
        new.prev = self.top  # 새로생긴 node 인스턴스의 prev(previous)에 현재 top 연결
        self.top = new  # top 이 새로운 node 인스턴스를 참조하도록 지정
        self.size += 1  # Stack 의 크기 1 증가
    
    def pop(self):
        if not self.is_empty():
            tmp = self.top.data  # 현재 top 을 반환가능하도록 임시 변수에 값 할당
            self.top = self.top.prev  # top 이 현재 top 의 prev(previous) 값을 참조하도록 지정
            self.size -= 1  # Stack 의 크기 1 감소
            return tmp  # 저장해두었던 tmp 를 반환
        else:
            print('Empty Stack')
    
    def get_top(self):
        if not self.is_empty():
            return self.top.data
        else:
            print('Empty Stack')
    
    def get_size(self):
        return self.size
             
    def is_empty(self):
        return False if self.get_size() else True


push

ds-01-stack_push01


ds-01-stack_push02


ds-01-stack_push03


새로운 노드 new 인스턴스를 생성한 뒤
new 의 prev (new.prev)가 현재 top 을 참조하도록 하는 것이 우선되어야한다.
Stack 의 top 을 new 로 먼저 할당할 경우 이전의 top 을 참조할 수가 없어지기 때문이다.


pop

ds-01-stack_pop01


ds-01-stack_pop02


ds-01-stack_pop03


Stack 의 top 이 self.top.prev 를 참조하도록 하는 것으로
이전 top 이었던 Node 인스턴스는 제거된다. (해당 인스턴스를 참조하는 값이 없기 때문)
제거된 값을 반환할 수는 없기 때문에 제거하기전 tmp 에 self.top.data 값을 저장해둔 뒤, 마지막에 반환한다.

Leave a comment