큐(Queue)란
큐의 구조
● 줄을 서는 행위와 유사하다.
● 가장 먼저 넣은 데이터를 가장 먼저 꺼낼 수 있는 구조이다.
- 버스정류장에서 가장 먼저 줄을 선 사람이 가장 먼저 버스에 타는 것과 동일하다.
- FIFO(First-In, First-Out) 또는 LILO(Last-In, Last-Out)방식으로 스택과 꺼내는 순서가 반대이다.
출처: http://www.stoimen.com/blog/2012/06/05/computer-algorithms-stack-and-queue-data-structure
큐의 용어
● Enqueue: 큐에 데이터를 넣는 기능
● Dequeue: 큐에서 데이터를 꺼내는 기능
파이썬 queue 라이브러리를 활용하여 자료구조 사용하기
● queue라이브러리에는 다양한 큐 구조로 Queue(), LifoQueue(), PriorityQueue()를 제공한다.
- Queue(): 가장 일반적인 큐 자료구조
import queue
d_queue = queue.Queue() # d_queue를 Queue()를 통해 기본큐로 선언
d_queue.put('hello') #put을 이용하여 d_queue에 데이터 추가
d_queue.put(10)
d_queue.get() #get을 이용하여 데이터를 가져온다. 여기서 나오는 출력문은 hello가 된다.
- LifoQueue(): 나중에 입력된 데이터가 먼저 출력되는 구조(스택구조와 같음)
import queue
d_queue = queue.LifoQueue() #LifoQueue를 통해 LIFO큐를 선언
d_queue.put('hello') #Queue함수로 선언한것과 동일하게 put으로 데이터 삽입
d_queue.put(30)
d_queue.get() #FIFO와 반대로 LIFO는 마지막으로 들어간 데이터가 먼저나오기때문에 출력문은 30
- PriorityQueue(): 데이터마다 우선순위를 부여하여 우선순위가 높은 순서대로 데이터를 출력한다.
import queue
d_queue = queue.PriorityQueue()
d_queue.put((3, 'hello')) #PriorityQueue는 튜플로입력받고 첫번째에는 우선순위 두번째에 데이터를 입력한다.
d_queue.put((5, 100))
d_queue.put((15, 'world'))
d_queue.get() #우선순위가 가장 낮은수를 출력하기 때문에 출력문은 (3, 'hello')가 된다.
파이썬 라이브러리를 사용하지않고 enqueue, dequeue구현
list_q = [] #리스트 선언
def enqueue(data):
list_q.append(data) #추가하고싶은 데이터를 입력하면 리스트에 추가
def dequeue():
data = list_q[0] #리스트의 0번째 데이터를 data에 대입
del list_q[0] #리스트의 0번째 데이터를 삭제
return data #data를 리턴해줌으로 삭제된 데이터를 보여준다.
'Python > 자료구조와 알고리즘' 카테고리의 다른 글
[자료구조] 링크드 리스트(Linked List) - 이중 연결 리스트(Doubly Linked List) (0) | 2021.01.16 |
---|---|
[자료구조] 링크드 리스트(Linked List) - 단순 연결 리스트(Simple Linked LIst) (0) | 2021.01.16 |
[자료구조] 스택(Stack) (0) | 2021.01.11 |
[자료구조] 배열(Array) (0) | 2021.01.09 |
자료구조와 알고리즘 (0) | 2021.01.09 |