문인철 교수님의 ‘데이터 구조 및 분석: Linear Structure and Dynamic Programming’ 수업
Stack
 
- Linked list 를 변형해서 만들 수 있는 구조
- Linked list 와 다르게 리스트 중간에 값을 추가하는게 불가능함
- LIFO: Last in First out
POP
- stack 에 데이터를 넣는 것
- linked list 에 가장 첫번째 인스턴스에 데이터 삽입
Push
- stack 에 있는 가장 나중에 추가된 데이터를 빼내는 것
- linked list 에 가장 첫번째 인스턴스 데이터 삭제
코드
class Stack:
    linked_list = SinglyLinkedList()
    
    def pop(self):
        print(self.linked_list.get(0).value)
        return self.linked_list.remove_node(0)
    
    def push(self, value):
        return self.linked_list.insert_node(value, 0)
stack = Stack()
stack.push('a')
stack.push('b')
stack.push('c')
stack.pop() # c
stack.pop() # b
stack.pop() # a
Balancing Symbols
코드
class Stack:
    linked_list = SinglyLinkedList()
    
    def pop(self):
        return self.linked_list.remove_node(0)
    
    def push(self, value):
        return self.linked_list.insert_node(value, 0)
class BalancingCheck:
    symbols_dict = {
        '{': '}',
        '[': ']',
        '(': ')'
    }
    stack = Stack()
    
    def check_balanced(self, equation):
        for i in equation:
            if i in self.symbols_dict.keys():
                self.stack.push(i)
            if i in self.symbols_dict.values():
                self.stack.pop()
        return self.stack.linked_list.size == 0
stack = BalancingCheck()
stack.check_balanced("7+{[2+(1+2)]*3}")
>> True
stack = BalancingCheck()
stack.check_balanced("[2+(1+2]-3")
>> False
