문인철 교수님의 ‘데이터 구조 및 분석: 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