스택(Stack)
배열의 끝에서만 데이터를 접근할 수 있는 선형 자료 구조
1. 배열 인덱스 접근이 제한된다.
2. 후입선출(LIFO, Last In First Out)의 특징을 갖는다.
push, pop, peek, empty, size의 메서드를 갖는다.
리스트를 이용한 스택 클래스 구현
class Stack(object): def __init__(self): self.items = [] def isEmpty(self): return not bool(self.items) def push(self, value): self.items.append(value) def pop(self): value = self.items.pop() if value is not None: return value else: print("Stack is empty.") def size(self): return len(self.items) def peek(self): if self.items: return self.items[-1] else: print("Stakc is empty.") def __repr__(self): return repr(self.items) if __name__ == "__main__": stack = Stack() print(stack) print("스택 내 데이터 empty: {}".format(stack.isEmpty())) print("스택에 0~9 정수를 추가") for i in range(10): stack.push(i) print("스택의 크기: {}".format(stack.size())) print("peek: {}".format(stack.peek())) print("pop: {}".format(stack.pop())) print("peek: {}".format(stack.peek())) print("스택 내 데이터 empty: {}".format(stack.isEmpty())) print(stack) |
[] 스택 내 데이터 empty: True 스택에 0~9 정수를 추가 스택의 크기: 10 peek: 9 pop: 9 peek: 8 스택 내 데이터 empty: False [0, 1, 2, 3, 4, 5, 6, 7, 8] |
노드 객체를 이용한 스택 클래스 구현
class Node(object): def __init__(self, value=None, pointer=None): self.value = value self.pointer = pointer class Stack(object): def __init__(self): self.head = None # 스택 인스턴스에 아무런 데이터도 저장되어 있지 않으므로 초기 head는 None self.count = 0 def isEmpty(self): return not bool(self.head) def push(self, item): self.head = Node(item, self.head) self.count += 1 def pop(self): if self.count > 0 and self.head: node = self.head self.head = node.pointer self.count -= 1 return node.value else: print("Stack is empty.") def peek(self): if self.count > 0 and self.head: return self.head.value else: print("Stack is empty.") def size(self): return self.count def _printList(self): node = self.head while node: print(node.value, end=" ") node = node.pointer print() if __name__ == "__main__": stack = Stack() print("스택 내 데이터 empty: {}".format(stack.isEmpty())) print("스택에 숫자 0~9 추가") for i in range(10): stack.push(i) stack._printList() print("스택 크기: {}".format(stack.size())) print("peek: {}".format(stack.peek())) print("pop: {}".format(stack.pop())) print("peek: {}".format(stack.peek())) print("스택 내 데이터 empty: {}".format(stack.isEmpty())) stack._printList() |
스택 내 데이터 empty: True 스택에 숫자 0~9 추가 9 8 7 6 5 4 3 2 1 0 스택 크기: 10 peek: 9 pop: 9 peek: 8 스택 내 데이터 empty: False 8 7 6 5 4 3 2 1 0 |