큐의 개념
입구와 출구가 따로 있는 자료구조
입구와 출구가 다름
선입선출
용어
rear = 꼬리
front = 머리
enqueue = 데이터 삽입
dequeue = 데이터 추출
코드들
#큐 생성 #front = 머리 #rear = 꼬리
queue = [None, None, None, None, None]
front = rear = -1 #front 와 rear 둘다 데이터가 없어서 -1 로 초기화
#데이터 삽입 : enQueue
#1. rear(꼬리) 1증가 시킨 후
#2. rear 위치에 데이터 넣기
#큐 생성
queue = [None, None, None, None, None]
front = rear = -1
rear += 1
queue[rear] = '화사'
rear += 1
queue[rear] = '솔라'
rear += 1
queue[rear] ='문별'
print('-----큐 상태-----')
print('출구')
print('-----')
for i in range(0, len(queue), 1) :
print(queue[i])
print('-----')
print('입구')
-----큐 상태-----
출구
-----
화사
솔라
문별
None
None
-----
입구
#큐에서 데이터 3개 추출
queue = ['화사', '솔라', '문별', None, None]
#0 #1 #2 #3 #4
front = -1
rear = 2
print('-----큐 상태-----')
print('출구')
print(' v ')
print('-----')
for i in range(0,len(queue), 1) :
print(queue[i])
print('-----')
print(' ^ ')
print('입구')
front += 1 #front 1 증가
data = queue[front] #데이터는 큐의 맨 앞부분
queue[front] = None
print('deQueue -->', data)
front += 1 #front 1 증가
data = queue[front] #데이터는 큐의 맨 앞부분
queue[front] = None
print('deQueue -->', data)
front += 1 #front 1 증가
data = queue[front] #데이터는 큐의 맨 앞부분
queue[front] = None
print('deQueue -->', data)
print('-----')
print('-----큐 상태-----')
print('출구')
print(' v ')
print('-----')
for i in range(0,len(queue), 1) :
print(queue[i])
print('-----')
print(' ^ ')
print('입구')
-----큐 상태-----
출구
v
-----
화사
솔라
문별
None
None
-----
^
입구
deQueue --> 화사
deQueue --> 솔라
deQueue --> 문별
-----
-----큐 상태-----
출구
v
-----
None
None
None
None
None
-----
^
입구
#큐 일반 구현
queue = [None, None, None, None, None] #큐 생성
#큐 일반 구현
queue = [None, None, None, None, None] #큐 생성
#큐 일반 구현
SIZE = 5 #큐 크기
queue = [None for _ in range(SIZE)]
front = rear = -1
#큐가 꽉 찼는지 확인하는 함수 : rear 값이 큐 크기 -1 와 같을 때
if (rear == 큐 크기 - 1 :
queue가 꽉 참
#큐가 꽉 찼는지 확인하는 함수
def isQueueFull() :
global SIZE, queue, front, rear
if (rear == SIZE - 1) :
return True
else :
return False
SIZE = 5
queue = ['화사', '솔라', '문별', '휘인', '선미']
front = -1
rear = 4
print('큐가 꽉 찼는가? (True : 예, False : 아니요) =>',isQueueFull())
큐가 꽉 찼는가? (True : 예, False : 아니요) => True
def isQueueFull() :
global SIZE, queue, front, rear
if (rear == SIZE - 1) :
return True
else :
return False
SIZE = 5
queue = ['화사', '솔라', '문별', '휘인', '선미']
front = -1
rear = 4
print('큐가 꽉 찼는가? (True : 예, False : 아니요) =>',isQueueFull())
def enQueue(data) :
global SIZE, queue, front, rear
if (isQueueFull()) :
print('큐가 꽉 찼습니다.')
return
rear += 1
queue[rear] = data
SIZE = 5
queue = ['화사', '솔라', '문별', '휘인', None]
front = -1
rear = 3
print(queue)
enQueue('선미')
print(queue)
enQueue('재남')
큐가 꽉 찼는가? (True : 예, False : 아니요) => True
['화사', '솔라', '문별', '휘인', None]
['화사', '솔라', '문별', '휘인', '선미']
큐가 꽉 찼습니다.
#데이터가 비었는지 확인
if (front값 == rear 값) :
큐가 비었음
#데이터가 비었는지 확인하는 함수
def isQueueEmpty() :
global SIZE, queue, front, rear
if (front == rear) :
return True
else :
return False
SIZE = 5
queue = [None for _ in range(SIZE)]
front = rear = -1
print('큐가 비었는가? (True : 예, False : 아니요) =>', isQueueEmpty())
큐가 비었는가? (True : 예, False : 아니요) => True
#큐에서 데이터 추출
def isQueueEmpty() :
global SIZE, queue, front, rear
if (front == rear) :
return True
else :
return False
def deQueue() :
global SIZE, queue, front, rear
if (isQueueEmpty()) :
print('큐가 비었습니다.')
return None
front += 1
data = queue[front]
queue[front] = None
return data
SIZE = 5
queue = ['화사', None, None, None, None]
front = -1
rear = 0
print(queue)
deQueue()
print(queue)
['화사', None, None, None, None]
[None, None, None, None, None]
#데이터 확인 하는 함수
def isQueueEmpty() :
global SIZE, queue, front, rear
if (front == rear) :
return True
else :
return False
def peek() :
global SIZE, queue, front, rear
if isQueueEmpty() :
print('큐가 비었습니다.')
return None
return queue[front+1]
SIZE = 5
queue = ['화사', '솔라', '문별', None, None]
front = -1
rear = 2
print(queue)
print(peek())
['화사', '솔라', '문별', None, None]
화사
'파이썬 > 자료구조와 알고리즘' 카테고리의 다른 글
그래프 (0) | 2024.09.20 |
---|---|
이진 트리 (2) | 2024.09.19 |
원형 연결 리스트 복습 (0) | 2024.09.08 |
단순 연결 리스트 복습 (0) | 2024.08.27 |
선형 리스트 복습 (0) | 2024.08.19 |