후입선출(Last In First Out, LIFO)인 스택은 언제나 목록의 끝인 한 쪽에서만 자료를 넣거나 뺄 수 있다. 상자처럼 물건은 맨 밑부터 차곡 차곡 쌓아가는 형태를 떠올리면 이해가 쉽다. 그래서 맨 처음 넣은 자료는 맨 마지막에 뺄 수 있으며 가장 마지막에 넣은 데이터는 가장 위에 위치 하기 때문에 가장 먼저 빼서 사용할 수 있다.
스택에서는 데이터를 넣는 것은 push라 하며 데이터를 읽는 것과 동시에 삭제하는 것은 pop이라 한다. 일상 생활에서 우리가 흔히 볼 수 있는 스택 자료 구조는 인터넷 서핑을 할 때 뒤로가기를 하는 것이다. 뒤로가기를 하게 되면 가장 최근의 페이지를 보여 준다.
class Stack:
def __init__(self):
self.stack = list()
self.size = len(self.stack)
self.max = 3
def push(self, data):
if self.size >= self.max:
return "You are not able to push data more"
self.stack.append(data)
return "Data pushed"
def pop(self):
if not self.stack:
return "No Data"
data = self.stack.pop()
return f"Data {data} popped"
def getStack(self):
if not self.stack:
return "Stack is Empty"
return self.stack
def size(self):
size = self.size
return f'스택 길이: {size}'
def is_empty(self):
if not self.stack:
return "There is no data"
self.stack = list()
return "Stack is empty now"
제일 먼저 넣은 데이터가 가장 먼저 나오는 선입선출(First In First Out, FIFO)의 자료 구조이다. 큐(Queue)라는 뜻은 줄(Line)이라는 뜻으로 실제로 무언가를 사기 위해 기다릴 때 먼저 기다리는 사람이 제일 앞에 서 있고, 나중에 온 사람들은 그 뒤에 차례 차례로 뒤에 서게 된다. 이처럼 큐는 데이터들이 줄처럼 나열되어 있는 형태를 떠올리면 이해하기 쉽다.
class Queue:
def __init__(self):
self.queue = list()
self.size = len(self.queue)
def enqueue(self, data):
self.queue.append(data)
def dequeue(self):
if self.size == 0:
return "There is no Data."
return del self.queue[0]
def getQueue(self):
return self.queue
def is_empty(self):
if self.size == 0:
return "There is no data removed."
self.queue = list()
return "Queue is empty now."