순환 배열을 이용한 큐 구현
개요
큐(Queue)는 선입선출(First In First Out)을 실현하기 위한 데이터 구조입니다. 무한의 길이를 가지는 배열이 있으면 끝에 요소를 추가해 가는 것만으로 큐를 구현할 수 있습니다만, 실제로는 유한 길이의 배열로 큐를 구현할 필요가 있습니다. 유한 길이의 배열에 요소를 추가할 때, 배열의 말미가 벌써 묻혀 있으면 배열의 선두로부터 격납해 나갈 필요가 있기 (위해)때문에, 잉여 산술을 이용해 격납 위치를 결정합니다. 아래에 구현 예가 나와 있습니다.
구현 예
class MyCircularQueue(object):
def __init__(self, k):
# サイズkの配列を用いてキューを実装する
self.k = k
self.q = [None] * k
self.first = 0 # 要素の先頭を表すindex
self.last = 0 # 要素の末尾を表すindex
# キューの末尾にデータを追加する
def enQueue(self, value):
if self.isFull():
return False
else:
# 剰余をindexとして返す
idx = self.last % self.k
self.q[idx] = value
self.last += 1
return True
# キューの先頭からデータを取り出す
def deQueue(self):
if self.isEmpty():
return None
else:
# 剰余をindexとして返す
idx = self.first % self.k
val = self.q[idx]
self.q[idx] = None
self.first += 1
return val
# キューの先頭のデータを参照する
def front(self):
idx = self.first % self.k
return self.q[idx]
# キューの末尾のデータを参照する
def rear(self):
idx = (self.last - 1) % self.k
return self.q[idx]
# キューが空かどうか判定する
def isEmpty(self):
return self.first == self.last
# キューが一杯かどうか判定する
def isFull(self):
return self.last - self.first == self.k
주의점
본래는 큐가 가득 차면 배열의 길이를 확장하는 등의 대응을 실시하는 것이 바람직합니다만, 본 기사에서는 간략화를 위해 생략하고 있습니다.
참고
Reference
이 문제에 관하여(순환 배열을 이용한 큐 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/maebaru/items/fb640c16733301f836f7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)