스택과 큐는 자료구조에서 가장 기본적이면서도 중요하게 소개된다.
알고리즘 문제를 풀다보면 스택과 큐의 개념을 정확하게 모르면서 코드 작성을 하기도하고 자연스럽게 구현이 되는 경우도 있다.
우리가 인지하지 못하는 부분에서 많이 구현이 되는 개념이기 때문에 정확하게 알아보도록 하자
😡 스택 오버 플로우
👉 데이터를 계속 삽입하다가 수용 가능한 크기를 초과해서 흘러넘치는 경우를 의마한다. 재귀 호출시 자주 경험한다.
# Stack 구현
class Stack:
def __init__(self):
self.stack = []
def isEmpty(self):
return self.stack == []
def push(self, data):
self.stack.append(data)
def pop(self):
self.stack.pop()
def top(self):
return self.stack[-1]
def size(self):
return len(self.stack)
def print_stack(self):
print(self.stack)
stack1 = Stack()
stack1.push(1)
print(stack1.size())
print(stack1.top())
👉 주로 순서를 보장하기 위한 처리를 해야할 때 사용된다.
# Queue 구현
class Queue:
def __init__(self):
self.queue = []
def isEmpty(self):
if not self.queue:
return True
else:
return False
def enqueue(self, data):
self.queue.append(data)
def dequeue(self):
if self.isEmpty():
return "Queue is Empty"
else:
dequeued = self.queue[0]
# 꺼낸 뒤 나머지 재정비
self.queue = self.queue[1:]
return dequeued
def print(self):
return print(self.queue)
queue = Queue()
print(queue.isEmpty())
queue.enqueue(1)
print(queue.print())
queue.dequeue()
print(queue.print())