계속지나가기
코딩스뮤
계속지나가기
전체 방문자
오늘
어제
  • 코딩스뮤:)
    • Algorithm
      • 백준 문제풀이
      • 프로그래머스 문제풀이
      • 알고리즘 이론
      • 자료구조
      • SW Expert Academy
    • 인공지능(AI)
      • LLMs
      • 자연어처리(NLP)
      • 컴퓨터비전(CV)
      • 딥러닝(DL)
      • 머신러닝(ML)
      • 인공지능기초수학
      • 선형대수학
    • 컴퓨터 세팅
    • Computer Science
      • 유닉스프로그래밍
      • 프로그래밍언어론
      • 디자인패턴
      • 클린코드
      • SW 영어
      • 리눅스
      • 논리회로
    • Server
      • Docker

블로그 메뉴

  • 홈
  • Who Am I(CV)
  • 태그

공지사항

인기 글

태그

  • 손실함수
  • ML
  • 결정경계
  • MaximumFlow
  • 머신러닝
  • 비지도학습
  • machinelearning
  • 파이썬 클린코드
  • 패턴인식
  • SIFT
  • 디지털이미지처리
  • ComputerVision
  • 네트워크플로우
  • 기계학습
  • f1-score
  • 경사하강법
  • 최대유량
  • 컴퓨터비전
  • 선형회귀
  • LM
  • 군집화
  • 알고리즘
  • 비용함수
  • NLP
  • 지도학습
  • DIP
  • 에지검출
  • networkflow
  • 언어모델
  • DigitalImageProcessing

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
계속지나가기

코딩스뮤

파이썬으로 구현하는 원형 큐(Circular Queue)
Algorithm/자료구조

파이썬으로 구현하는 원형 큐(Circular Queue)

2021. 12. 26. 12:26
반응형

원형 큐(Circular Queue)란?

배열로 구현 된 선형 큐(Linear Queue)의 경우 데이터의 삽입/삭제 시 데이터들을 앞으로/뒤로 당겨주는 과정이 필요해 최악의 경우 O(n)의 시간복잡도를 가지게 된다. 이러한 선형 큐의 단점을 극복한 구조가 원형 큐이다

 

0. 멤버 변수&초기화

먼저 원형 큐 클래스의 멤버 변수(member variable)화 초기화하는 과정을 살펴보자

class CircleQueue:

    rear = 0
    front = 0
    MAX_SIZE = 100
    queue = list()
    
    def __init__(self):
    	self.rear = 0
        self.front = 0
        self.queue = [0 for i in range(self.MAXSIZE)]

 

1. 공백 상태

원형큐가 비워져 있는 경우 rear == front 이다

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

 

2. 포화 상태

앞에서, 공백 상태를 front == rear로 구분하기 때문에 포화상태의 경우 위의 사진처럼 한 칸이 비어있다.

따라서 배열에 한 칸을 비움으로써 공백 상태와 포화 상태를 구분하기로 한다

def is_full(self):
	if (self.rear+1)%self.MAX_SIZE == self.front:
    	return True
    return False

 

 

 

3. 데이터 삽입

rear에서 삽입이 이루어지므로, front는 값의 변경이 없고 rear += 1을 하며 데이터를 삽입한다

def enqueue(self, x):
	if is_full():
    	print("ERROR: FULL")
        return
    self.rear = (self.rear+1)%(self.MAX_SIZE)
    self.queue[self.rear] = x

 

4. 데이터 삭제

큐는 선입선출(FIFO) 구조로, 앞에서 삭제가 이루어져야 한다. 따라서 rear는 값의 변경이 없고 front += 1을 하며 데이터를 삭제한다

def dequeue(self):
	if is_empty():
    	print("ERROR: EMPTY")
        return
    self.front = (self.front +1) % MAX_SIZE
    return self.queue[self.front]

 

Optional. (Print 함수)

추가로, 현재 큐에 저장된 요소를 출력해주는 함수는 아래와 같다

def queue_print(self):
	i = self.front
    if is_empty():
    	print("EMPTY QUEUE")
        return
    while True:
    	i = (i+1) % self.MAX_SIZE
        print(self.queue[i], ' ')
        if i == self.rear:
        	break
반응형

'Algorithm > 자료구조' 카테고리의 다른 글

파이썬으로 구현하는 퀵 정렬(Qucik Sort)  (0) 2022.03.17
파이썬으로 구현하는 병합정렬(Merge Sort)  (4) 2022.03.13
파이썬으로 구현하는 덱(Deque)  (2) 2021.12.26
[이론] 우선순위 큐 (Priority Queue)  (0) 2021.07.15
[이론] 힙(Heap)  (0) 2021.07.15
    'Algorithm/자료구조' 카테고리의 다른 글
    • 파이썬으로 구현하는 병합정렬(Merge Sort)
    • 파이썬으로 구현하는 덱(Deque)
    • [이론] 우선순위 큐 (Priority Queue)
    • [이론] 힙(Heap)
    계속지나가기
    계속지나가기
    NLP Engineer

    티스토리툴바