キュー&円形キュー


キューとは?



一方の端にデータを配置し、他方の端からデータを移動する線形構造.
一番先に入れたのは一番目です.
入力と削除は異なる場所で行います.
順番に処理する必要がある場合に使用

Qpythonで実施

class Node:
    def __init__(self,val,next=None ):
        self.val = val
        self.next = next

class Queue:
    def __init__(self):
        self.front = None

    def push(self, value): 
        if not self.front:
            self.front = Node(value, None)
            return

        node = self.front   #front가 맨처음 들어온걸 가르킴
        while node.next:	#삽입시 next를 탐색하여 끝에다 추가
            node = node.next 
        node.next = Node(value, None)

    def pop(self):
        if not self.front:
            return None

        node = self.front
        self.front = self.front.next
        return node.item

    def is_empty(self):
        return self.front is None

円形Qとは?




線形キュー内の問題点の挿入と削除を繰り返すと、前のインデックスが空であっても満たされているとみなされます.この問題を解決するためには、削除時に後ろの要素を一格に引き出す必要がありますが、円形キューではfrontとhundが挿入削除時に移動し、これらの問題を解決します.

きどうモード


開始前と開始後の同じインデックス
挿入時にhundはデータを移動して挿入します.
削除時にフロントエンドが移動し、データが削除されます.

円形立方体を使用して実装

class Node:
    def __init__(self, val):
        self.val = val
        self.next = None


class Circulrator_Queue:
    def __init__(self):
        self.front = None
        self.rear = None 

    def isEmpty(self):
        if self.front == self.rear:
            return True
        return False

    def enQueue(self, val):
        if not self.front:
            node = Node(val)
            self.front = node  
            self.rear = node	#front와 rear가 같은 노드를 보고있다.

        self.rear.next = Node(val) 	#rear.next에 만들고
        self.rear = self.rear.next  #rear 옮기고
        
    def deQueue(self):
        if self.front == None:
            return None
        data = self.front.val
        self.front = self.front.next	#front에 front.next 바꿔주기

        if self.front == None:
            self.rear = None
            return data
        return data
画像ソース:https://www.codingem.com/what-is-a-fifo-queue/
https://yjg-lab.tistory.com/115