기초 CS/자료구조 & 알고리즘

큐(Queue)

승주우에요 2025. 6. 25. 11:34

선입선출(FIFO) 방식으로 데이터를 처리하는 선형 자료구조이다. 가장 먼저 들어온 데이터가 가장 먼저 나가는 특징을 가지고 있다.

 

구조

 

장점

순차적 처리에 적합하다.

구현이 간단함.

deque으로 구현 시 메모리 관리 효율이 좋음

 

단점

중간 데이터 접근이 불가능함.

배열 기반 큐는 삽입,삭제 시 앞 공간이 낭비됨.

복잡한 자료 구조에는 부적합함.

 

큐의 주요 연산

 

연산 기능 시간복잡도
enqueue 삽입 O(1)
dequeue 삭제 O(1)
front 맨 앞 요소 조회 O(1)
size() / empty() 사이즈/ empty 확인 O(1)

 

리스트로 구현(python)

class Queue:
    def __init__(self):
        self.q = []

    def isEmpty(self):
        if len(self.q) == 0:
            return True
        else:
            return False

    def enqueue(self, elem):
        self.q.append(elem)

    def dequeue(self):
        if len(self.q) == 0:
            print("Can't dequeue")
            return None
        else:
            return self.q.pop(0)

    def front(self):
        if self.isEmpty():
            print("No Front Element")
            return None
        else:
            return self.q[0]

    def getSize(self):
        return len(self.q)

    def display(self):
        print("Current Queue: ",self.q)
        pass

q = Queue()

q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.enqueue(5)

q.display()
print(q.getSize())
print(q.front())

q.dequeue()
q.dequeue()
q.dequeue()
print(q.front())
q.display()

 

리스트로 구현 시 enqueue의 시간복잡도는 O(1), dequeue의 시간복잡도는 O(n)이다. 맨 앞의 요소를 삭제하고, 그 뒤의 요소를 다시 이동시켜줘야 하기 때문이다.

 

큐의 변형 구조

  • 원형 큐 : 앞 뒤를 연결해 앞 공간의 낭비를 최소화 시킴.
  • 덱 : 양쪽 모두에서 삽입과 삭제가 가능한 큐
  • 우선순위 큐 : 일반 큐는 순서대로 처리하지만, 우선순위가 높은 요소를 먼저 처리함.

큐의 활용 예시

  • 프로세스 스케줄링 : OS는 프로세스를 큐에 저장하고, 순서대로 처리
  • 버퍼 : 네트워크 전송 시 패킷을 임시 저장해 순서대로 전송
  • BFS : 큐를 사용해 가까운 노드부터 탐색함.
  • 멀티스레딩 작업 큐 : 여러 스레드 간 작업 전달에 큐를 사용해 안전하게 작업을 분산함

'기초 CS > 자료구조 & 알고리즘' 카테고리의 다른 글

연결 리스트(Linked List)  (1) 2025.06.26
스택(Stack)  (0) 2025.06.25
자료구조란?  (0) 2025.06.24