← 목차로 돌아가기 / Back to Index

🧪 Ch07. 큐 — 실습 코드 / Lab Code: Queues

자료구조와 알고리즘 실습 | Data Structures & Algorithms Lab

💡 학습 팁: 코드를 직접 타이핑하면서 익히세요! 숨겨진 코드는 버튼을 눌러 확인하기 전에 먼저 스스로 생각해 보세요.
💡 Study Tip: Type the code yourself to learn! Try to think about hidden sections before revealing them.

📘 교재 예제 (Code)

📘 Textbook Examples (Code)

Code07-01.py

큐의 기본 개념: 데이터를 enqueue합니다

queue = [None, None, None, None, None]
front = rear = -1

rear += 1
queue[rear] = "화사"
rear += 1
queue[rear] = "솔라"
rear += 1
queue[rear] = "문별"

print("----- 큐 상태 -----")
print ( '[출구] <-- ', end='')
for i in range(0, len(queue), 1) :
	print(queue[i], end=' ')
print ( '<-- [입구] ')
Code07-01.py

Queue basics: enqueue data

queue = [None, None, None, None, None]
front = rear = -1

rear += 1
queue[rear] = "Hwasa"
rear += 1
queue[rear] = "Solar"
rear += 1
queue[rear] = "Moonbyul"

print("----- Queue Status -----")
print ( '[Exit] <-- ', end='')
for i in range(0, len(queue), 1) :
	print(queue[i], end=' ')
print ( '<-- [Entrance] ')
Code07-02.py

큐의 기본 개념: 데이터를 dequeue합니다

queue = ["화사", "솔라", "문별", None, None]
front = -1
rear = 2

print("----- 큐 상태 -----")
print ( '[출구] <-- ', end = ' ')
for i in range(0, len(queue), 1) :
	print(queue[i], end = ' ')
print ( '<-- [입구] ')
print("-------------------")

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)
print("-------------------")

print("----- 큐 상태 -----")
print ( '[출구] <-- ', end = '')
for i in range(0, len(queue), 1) :
	print(queue[i], end = ' ')
print ( '<-- [입구] ')
Code07-02.py

Queue basics: dequeue data

queue = ["Hwasa", "Solar", "Moonbyul", None, None]
front = -1
rear = 2

print("----- Queue Status -----")
print ( '[Exit] <-- ', end = ' ')
for i in range(0, len(queue), 1) :
	print(queue[i], end = ' ')
print ( '<-- [Entrance] ')
print("-------------------")

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)

front += 1
data = queue[front]
queue[front] = None
print('deQueue --> ', data)
print("-------------------")

print("----- Queue Status -----")
print ( '[Exit] <-- ', end = '')
for i in range(0, len(queue), 1) :
	print(queue[i], end = ' ')
print ( '<-- [Entrance] ')
Code07-03.py

큐 Full 상태를 확인하는 함수를 구현합니다

def isQueueFull() :
SIZE = 5
queue = ["화사", "솔라", "문별", "휘인", "선미"]
front = -1
rear = 4

print("큐가 꽉 찼는지 여부 ==>", isQueueFull())
Code07-03.py

Implements a function to check if the queue is full

def isQueueFull() :
SIZE = 5
queue = ["Hwasa", "Solar", "Moonbyul", "Wheein", "Sunmi"]
front = -1
rear = 4

print("Whether the queue is full ==>", isQueueFull())
Code07-04.py

큐 Full 확인 후 데이터를 enqueue합니다

def isQueueFull() :
def enQueue(data) :
SIZE = 5
queue = ["화사", "솔라", "문별", "휘인", None]
front = -1
rear = 3

print(queue)
enQueue("선미")
print(queue)
enQueue("재남")
Code07-04.py

Enqueues data after checking if the queue is full

def isQueueFull() :
def enQueue(data) :
SIZE = 5
queue = ["Hwasa", "Solar", "Moonbyul", "Wheein", None]
front = -1
rear = 3

print(queue)
enQueue("Sunmi")
print(queue)
enQueue("Jaenam")
Code07-05.py

큐 Empty 상태를 확인하는 함수를 구현합니다

def isQueueEmpty() :
SIZE = 5
queue = [ None for _ in range(SIZE) ]
front = rear = -1

print("큐가 비었는지 여부 ==>", isQueueEmpty())
Code07-05.py

Implements a function to check if the queue is empty

def isQueueEmpty() :
SIZE = 5
queue = [ None for _ in range(SIZE) ]
front = rear = -1

print("Whether the queue is empty ==>", isQueueEmpty())
Code07-06.py

큐 Empty 확인 후 데이터를 dequeue합니다

def isQueueEmpty() :
def deQueue() :
SIZE = 5
queue = ["화사", None, None, None, None]
front = -1
rear = 0

print(queue)
retData = deQueue()
print("추출한 데이터 -->", retData)
print(queue)
retData = deQueue()
Code07-06.py

Dequeues data after checking if the queue is empty

def isQueueEmpty() :
def deQueue() :
SIZE = 5
queue = ["Hwasa", None, None, None, None]
front = -1
rear = 0

print(queue)
retData = deQueue()
print("Extracted data -->", retData)
print(queue)
retData = deQueue()
Code07-07.py

큐의 front 데이터를 확인하는 peek 함수를 구현합니다

def isQueueEmpty() :
def peek() :
SIZE = 5
queue = ["화사", "솔라", "문별", None, None]
front = -1
rear = 2

print(queue)
retData = peek()
print("다음에 추출될 데이터 확인 -->", retData)
print(queue)
Code07-07.py

Implements a peek function to check the front of the queue

def isQueueEmpty() :
def peek() :
SIZE = 5
queue = ["Hwasa", "Solar", "Moonbyul", None, None]
front = -1
rear = 2

print(queue)
retData = peek()
print("Check next data to be extracted -->", retData)
print(queue)
Code07-08.py

큐의 enqueue/dequeue/peek 통합 프로그램입니다

## 함수 선언 부분 ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## 전역 변수 선언 부분 ##
SIZE = int(input("큐의 크기를 입력하세요 ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## 메인 코드 부분 ##
Code07-08.py

Complete queue program with enqueue, dequeue, and peek

## Function Declarations ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## Global Variables ##
SIZE = int(input("Enter the queue size ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## Main Code ##
if __name__ == "__main__" :
	select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	while (select != 'X' and select != 'x') :
		if select=='I' or select =='i' :
			data = input("Data to input ==> ")
			enQueue(data)
			print("Queue status: ", queue)
		elif select=='E' or select =='e' :
			data = deQueue()
			print("Extracted data ==> ", data)
			print("Queue status: ", queue)
		elif select=='V' or select =='v' :
			data = peek()
			print("Checked data ==> ", data)
			print("Queue status: ", queue)
		else :
			print("Invalid input")

		select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	print("Program terminated!")
Code07-09.py

큐의 데이터 이동 방식을 개선합니다 (자리이동 큐)

def isQueueFull() :
SIZE = 5
queue = [None, None, "문별", "휘인", "선미"]
front = 1
rear = 4

print("큐가 꽉 찼는지 여부 ==>", isQueueFull())
print("큐 상태 ==> ", queue)
Code07-09.py

Improves queue by shifting data forward (shifting queue)

def isQueueFull() :
SIZE = 5
queue = [None, None, "Moonbyul", "Wheein", "Sunmi"]
front = 1
rear = 4

print("Whether the queue is full ==>", isQueueFull())
print("Queue status ==> ", queue)
Code07-10.py

자리이동 큐의 통합 프로그램입니다

## 함수 선언 부분 ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## 전역 변수 선언 부분 ##
SIZE = int(input("큐의 크기를 입력하세요 ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## 메인 코드 부분 ##
Code07-10.py

Complete shifting queue program

## Function Declarations ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## Global Variables ##
SIZE = int(input("Enter the queue size ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## Main Code ##
if __name__ == "__main__" :
	select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	while (select != 'X' and select != 'x') :
		if select=='I' or select =='i' :
			data = input("Data to input ==> ")
			enQueue(data)
			print("Queue status: ", queue)
		elif select=='E' or select =='e' :
			data = deQueue()
			print("Extracted data ==> ", data)
			print("Queue status: ", queue)
		elif select=='V' or select =='v' :
			data = peek()
			print("Checked data ==> ", data)
			print("Queue status: ", queue)
		else :
			print("Invalid input")

		select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	print("Program terminated!")
Code07-11.py

원형 큐를 구현합니다 (모듈러 연산 활용)

## 함수 선언 부분 ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## 전역 변수 선언 부분 ##
SIZE = int(input("큐의 크기를 입력하세요 ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = 0

## 메인 코드 부분 ##
Code07-11.py

Implements a circular queue using modular arithmetic

## Function Declarations ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## Global Variables ##
SIZE = int(input("Enter the queue size ==> "))
queue = [ None for _ in range(SIZE) ]
front = rear = 0

## Main Code ##
if __name__ == "__main__" :
	select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	while (select != 'X' and select != 'x') :
		if select=='I' or select =='i' :
			data = input("Data to input ==> ")
			enQueue(data)
			print("Queue status: ", queue)
			print("front : ", front, ", rear : ", rear)
		elif select=='E' or select =='e' :
			data = deQueue()
			print("Extracted data ==> ", data)
			print("Queue status: ", queue)
			print("front : ", front, ", rear : ", rear)
		elif select=='V' or select =='v' :
			data = peek()
			print("Checked data ==> ", data)
			print("Queue status: ", queue)
			print("front : ", front, ", rear : ", rear)
		else :
			print("Invalid input")

		select = input("Choose: Insert(I)/Extract(E)/Check(V)/Quit(X) ==> ")

	print("Program terminated!")

📗 응용 예제 (Ex)

📗 Applied Examples (Ex)

Ex07-01.py

큐 응용: 콜센터 대기열 시뮬레이션

## 함수 선언 부분 ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## 전역 변수 선언 부분 ##
SIZE = 5
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## 메인 코드 부분 ##
Ex07-01.py

Queue application: call center waiting queue simulation

## Function Declarations ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
## Global Variables ##
SIZE = 5
queue = [ None for _ in range(SIZE) ]
front = rear = -1

## Main Code ##
if __name__ == "__main__" :
	enQueue('Jungkook')
	enQueue('V')
	enQueue('Jimin')
	enQueue('Jin')
	enQueue('Suga')
	print("Waiting line status: ", queue)

	for _ in range(rear+1) :
		print(deQueue(), ' enters the restaurant')
		print("Waiting line status: ", queue)

	print("Restaurant closed!")
Ex07-02.py

원형 큐 응용: 핫도그 가게 시뮬레이션

## 함수 선언 부분 ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
def calcTime() :
## 전역 변수 선언 부분 ##
SIZE = 6
queue = [ None for _ in range(SIZE) ]
front = rear = 0

## 메인 코드 부분 ##
Ex07-02.py

Circular queue application: hot dog stand simulation

## Function Declarations ##
def isQueueFull() :
def isQueueEmpty() :
def enQueue(data) :
def deQueue() :
def peek() :
def calcTime() :
## Global Variables ##
SIZE = 6
queue = [ None for _ in range(SIZE) ]
front = rear = 0

## Main Code ##
if __name__ == "__main__" :
	waitCall = [('in use', 9), ('broken', 3), ('Refund', 4), ('Refund', 4), ('broken', 3)]

	for call in waitCall :
		print("Your estimated wait time is ", calcTime(), "minutes.")
		print("Current waiting call --> ", queue)
		enQueue(call)
		print()

	print("Final waiting call --> ", queue)
	print("Program terminated!")

📙 자가 실습 (Self)

📙 Self Practice (Self)

Self07-01.py

enQueue 함수를 직접 구현합니다

def enQueue(data) :
SIZE = 5
queue = ["화사", "솔라", "문별", "휘인", None]
front = -1
rear = 3

print(queue)
enQueue("선미")
print(queue)
enQueue("재남")
Self07-01.py

Implements the enQueue function yourself

def enQueue(data) :
SIZE = 5
queue = ["Hwasa", "Solar", "Moonbyul", "Wheein", None]
front = -1
rear = 3

print(queue)
enQueue("Sunmi")
print(queue)
enQueue("Jaenam")
Self07-02.py

deQueue 함수를 직접 구현합니다

def deQueue() :
SIZE = 5
queue = ["화사", None, None, None, None]
front = -1
rear = 0

print(queue)
retData = deQueue()
print("추출한 데이터 -->", retData)
print(queue)
retData = deQueue()
Self07-02.py

Implements the deQueue function yourself

def deQueue() :
SIZE = 5
queue = ["Hwasa", None, None, None, None]
front = -1
rear = 0

print(queue)
retData = deQueue()
print("Extracted data -->", retData)
print(queue)
retData = deQueue()