Stack과 Queue는 비슷한 구조인데 자료를 읽어들이는 순서가 틀립니다.
Stack은 LIFO(Last In First Out) 이라고 합니다.
마지막으로 저장한 데이터가 처음으로 읽힌다는 뜻입니다.
마치 설겆이 한 접시를 하나 하나 쌓아올리는걸 생각하시면 쉽습니다.
하지만 파이썬은 스택 자료구조는 따로 제공하지 않는다.
다만 기본 클래스인 list 를 통해 스택을 흉내 낼 수 있다.
push
stack =[]
stack.append(1) // push
stack.append(2) // push
stack.append(3) // push
pop
stack.pop() // 3
stac // [ 1 , 2 ]
top
스택에서 원소를 제거하지 않고 가져오기만 할때는 -1 를 이용하도록 한다.
stack= [ 1 , 2 , 3 ]
print(stack[-1]) // 3
class Stack:
def __init__(self):
self._stack = []
def push(self, data):
self._stack.append(data)
def pop(self):
if len(self._stack) == 0:
return None
data = self._stack[-1]
del self._stack[-1]
return data
def peek(self):
if len(self._stack) == 0:
return None
data = self._stack[-1]
return data
Queue는 Stack과 반대로 FIFO(First In First Out) 입니다. 즉 먼저 push 된게 먼저 pop 된다는 말입니다.
줄을 서는 행위와 유사하다
class Queue:
def __init__(self):
self._queue = []
def push(self, data):
return self._queue.append(data)
def pop(self)
if len(self._queue) == 0:
return None
return self._queue.pop()
def peek(self):
if len(self._queue) == 0:
return None
return self[0]
하지만 Queue 는 Stack 과 달리 라이브러리가 존재한다.
큐 만들기
import queue
data_queue = queue.Queue()
데이터 넣기
data_queue.put("jakdu")
data_queue.put(3)
큐 사이즈 확인하기
data_queue.qsize() // 2
데이터 꺼내기
data_queue.get() // "jakdu"
Stack 는 접시를 생각하고 , Queue 는 줄서기를 생각하시면 됩니다
참고자료 :
https://www.fun-coding.org/DS&AL1-5.html
https://www.fun-coding.org/DS&AL1-5.html