What-is-queue.md
๊ฐ๋
๋จผ์ ์ง์ด ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ FIFO(First In First Out)๊ตฌ์กฐ๋ก ์ ์ฅํ๋ ๋ฐฉ์
์ฉ์ด
Front : ์ฒซ ๋ฒ์งธ ๋ฐ์ดํฐ
Rear : ๊ฐ์ฅ ๋ง์ง๋ง ๋ฐ์ดํฐ
front, rear์ ์ด๊น๊ฐ : -1
์ฐ์ฐ
FIFO - First In First Out
Enqueue : ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ๋์
add(item) item์ ๋ฆฌ์คํธ์ ๋๋ถ๋ถ์ ์ถ๊ฐ
rear = rear + 1 ํ item ์ถ๊ฐ
Dequeue : ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๋ ๋์
remove : ๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ ๊ฑฐ
front = front + 1
peek : ํ์์ ๊ฐ์ฅ ์์ ์๋ ํญ๋ชฉ์ ๋ฐํ
isEmpty : ํ๊ฐ ๋น์ด์์ ๋ true๋ฅผ ๋ฐํ
(front == rear) ? True : False
isFull : rear = n - 1
์ข
๋ฅ
์ ํ

1์ฐจ์ ๋ฐฐ์ด์ ํํ๋ก ์ด๋ฃจ์ด์ ธ์์ต๋๋ค.
ํํ
์ ํ ํ์ ๋ฌธ์ ์
front์ rear์ ๊ฐ์ด ๊ณ์ ์ฆ๊ฐํ๊ธฐ ๋๋ฌธ์ ์ธ์ ๊ฐ๋ ๋ฐฐ์ด์ ๋์ ๋๋ฌํ๊ฒ ๋๊ณ ๋ฐฐ์ด์ ์๋ถ๋ถ์ด ๋น์ด์๋๋ผ๋ ์ฌ์ฉํ์ง ๋ชปํฉ๋๋ค.
๋ฐ๋ผ์ ์(ํ)ํ ํ๊ฐ ๋์ค๊ฒ ๋์์ต๋๋ค.

front ์์ ๋จ์ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ๋ชปํ๋ ์ ํํ์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ์๋ ์ํํ๋ ๋ฐฐ์ด์ ์์๊ณผ ๋์ด ์ด์ด์ ธ ์๋ ๊ฒ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ์ํด (rear+1)%arraysize์ ํ์์ผ๋ก ํฌ์ธํฐ๋ฅผ ์ฆ๊ฐ์ํต๋๋ค.
๊ตฌํ
์ ํํ
class LinearQueue:
def __init__(self):
self.front = -1
self.rear = -1
def create_queue(self, size):
self.queue = list([0 for i in range(size)]) #python์ list๋ null๊ฐ์ด ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ 0์ด ๋น ๊ฐ์ด๋ผ๊ณ ์๊ฐํ์
def add(self, item):
self.rear += 1
self.queue[self.rear] = item
def remove(self):
self.front += 1
self.queue[self.front] = 0
def peek(self):
return self.queue[self.rear]
def isEmpty(self):
if self.front == self.rear:
return True
return False
def isFull(self):
if self.rear == len(self.queue) - 1:
return True
return False
์ํ ํ
class CircularQueue:
def __init__(self):
self.front = -1
self.rear = -1
def create_queue(self, size):
# python์ list๋ null๊ฐ์ด ๋ค์ด๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ 0์ด ๋น ๊ฐ์ด๋ผ๊ณ ์๊ฐํ์
self.queue = list([0 for i in range(size)])
print(len(self.queue))
def add(self, item):
if self.isFull:
print('๋ฐฐ์ด์ด ๊ฝ์ฐผ์ต๋๋ค.')
else:
self.rear += 1
if self.rear >= len(self.queue):
self.rear %= len(self.queue)
self.queue[self.rear] = item
print(self.queue)
print('front: {} rear: {}'.format(self.front, self.rear))
def remove(self):
if self.isEmpty:
print('๋ฐฐ์ด์ด ๋น์์ต๋๋ค.')
else:
self.front += 1
if self.front >= len(self.front):
self.front %= len(self.queue)
self.queue[self.front] = 0
print(self.queue)
print('front: {} rear: {}'.format(self.front, self.rear))
def peek(self):
return self.queue[self.rear]
def isEmpty(self):
if self.front == self.rear:
return True
return False
def isFull(self):
if self.rear == len(self.queue) - 1:
return True
return False
์ค์ ์ฝ๋ฉํ ์คํธ์์๋ collections ๋ชจ๋์ deque๋ฅผ ์ฌ์ฉํ์!
from collections import deque
queue = deque()
# ๋ฆฌ์คํธ์ append์ ๊ฐ์ ๋์
queue.append()
# ๊ฐ์ฅ ์ผ์ชฝ์ ์๋ ์์ pop
queue.popleft()
print(queue) #๋จผ์ ๋ค์ด์จ ์์๋๋ก ์ถ๋ ฅ
print(queue.reverse()) #๋์ค์ ๋ค์ด์จ ์์๋ถํฐ ์ถ๋ ฅ
Last updated