스택(Stack)은 후입선출(LIFO, Last In First Out) 방식으로 동작하는 선형 자료 구조이다.
말그대로 가장 나중에 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.
class Stack:
arr : list
t : int
def __init__(self,size):
self.arr = [0]*size
self.t = -1
def isFull(self):
if self.t == (len(self.arr) - 1): return True
return False
def isEmpty(self):
return self.t == -1
def pop(self):
if self.isEmpty():
return "아무것도 없습니다."
else:
p = self.arr[self.t]
self.t -= 1
return p
def push(self, a):
if self.isFull() == False:
self.t += 1
self.arr[self.t] = a
else:
print("자리가 없습니다.")
위 코드에 구현 되어있는 메서드 종류는 아래와 같다.
메서드 종류
스택의 예로는 뒤로가기가 있다.
큐(Queue)은 선입선출(FIFO, First In First Out) 방식으로 동작하는 선형 자료 구조이다.
말그대로 가장 먼저 들어온 것이 가장 먼저 나가는 방식이다
파이썬 Class로 구현한 코드는 아래와 같다.
class Queue:
arr : list
f : int
r : int
def __init__(self,size):
self.arr = [0]*size
self.f = -1
self.r = -1
def isFull(self):
if self.r == (len(self.arr) - 1): return True
return False
def isEmpty(self):
return self.f == self.r
def dequeue(self):
if self.isEmpty():
return "아무것도 없습니다."
else:
self.f += 1
p = self.arr[self.f]
return p
def enqueue(self, a):
if self.isFull() == False:
self.r += 1
self.arr[self.r] = a
else:
print("자리가 없습니다.")
메서드 종류
큐의 예로는 프린터 대기열이 있다.
선형 큐 (Linear Queue)의 단점
배열 기반 큐의 비효율성: 큐에서 요소를 제거하면 앞쪽이 비지만, 배열에서 공간을 그대로 두기 때문에 빈 공간이 쌓임. 이로 인해 실제로 큐가 가득 찼다고 판단해도 물리적으로는 공간이 남아 있을 수 있다.
고정 크기: 큐의 크기가 고정되어 있어서 크기를 조정하기 어려움. 큐가 가득 차면 더 이상 요소를 삽입할 수 없음.
선형 스택 (Linear Stack)의 단점
고정 크기: 스택의 크기도 고정되어 있어서 스택이 가득 차면 더 이상 삽입할 수 없음. 크기 조정이 불편함.
오버플로우 및 언더플로우: 스택이 가득 차거나 비어있을 때, 오버플로우(삽입 불가)나 언더플로우(제거 불가) 문제가 발생할 수 있음.
단방향 삽입/삭제: 후입선출(LIFO) 방식만 지원하므로 다른 방식으로 데이터를 접근하기 어려움. 중간에 접근하려면 전체 스택을 조회해야 함.
큐와 스택을 시각화 하면 다음과 같다.

공부 열심히 해야 할 것 같습니다. ㅠㅠ
달을 향해 쏴라, 빗나가도 별이 될테니.
ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ-Les Brown-
멋지다.