circularQueue

박진은·2022년 5월 5일
0

자료구조

목록 보기
8/37

circularQueue

class circleQueue:

    def __init__(self):
        self.MAXQ = 10
        self.list = [None] * self.MAXQ  # MAXQ사이즈의 비어있는 리스트 생성함.
        self.front = 0
        self.rear = 0
        # class 에서는 항상 변수 선언을 생성자 안에서 조져야지 클래스
        # 변수가 되는거야 진은아.

    def isEmpty(self):
        return self.front == self.rear

    def isFull(self):
        return self.front == (self.rear + 1)

    def dequeue(self):
        if self.isEmpty() == False: # 다운플로우 막기 위해서 실행해준다.
            self.front = (self.front + 1) % self.MAXQ  # front 변수가 앞으로 이동하기
            return self.list[self.front]
            # 때문에 list안에 있는 변수를 삭제할 필요가 없어 진은아

    def enqueue(self, item):
        if self.isFull() == False: #오플로우를 막기 위해서 실행해준다.
            self.rear = (self.rear + 1) % self.MAXQ
            self.list[self.rear] = item
            # 여기서 insert연산 사용하면 파이썬은 리스트가 동적할당이라 리스트 크기가 커진다 진은아 조심해
            # MAXQ로 나눠주는 이유는
            # 순환적으로 돌아야되기 때문이야 진은아 만약에 rear  가 10 이 되면
            # 다시 0번으로 자료를 삽입해야지 진은아

    def peek(self):
        return self.list[(self.front + 1) % self.MAXQ]

    def size(self):
        return (self.front - self.rear + self.MAXQ) % self.MAXQ

    def display(self):
        if self.front > self.rear:
            print("f {}, r{}".format(self.front, self.rear),
                  self.list[self.front + 1:self.MAXQ] + self.list[0:self.rear + 1])
        else:
            print("f {} , r{}".format(self.front, self.rear), self.list[self.front + 1:self.rear + 1])
def display(self):
        if self.front > self.rear:
            print("f {}, r{}".format(self.front, self.rear),
                  self.list[self.front + 1:self.MAXQ] + self.list[0:self.rear + 1])
        else:
            print("f {} , r{}".format(self.front, self.rear), self.list[self.front + 1:self.rear + 1])

위와 같은 display함수에서

if self.front > self.rear:
            print("f {}, r{}".format(self.front, self.rear),
                  self.list[self.front + 1:self.MAXQ] + self.list[0:self.rear + 1])
        else:

self.front r가 self.rear보다 클 때 두 리스트를 시작점을 기준으로 리스트 슬라이싱 함수를 이용해서 두 리스트를 구하고 더해서 반환하는 과정을 할 때 self.front 가 리스트의 MAXQ보다 1작은 상황일때 self.list[self.front + 1:self.MAXQ] 을 실행하게 된다면 이 때 리스트는 빈 리스트가 반환된다.

profile
코딩

0개의 댓글