ν‹°μŠ€ν† λ¦¬ λ·°

λ°˜μ‘ν˜•

큐의 ν™œμš©

자료λ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…κ³Ό κ·Έ 자료λ₯Ό μ΄μš©ν•˜λŠ” μž‘μ—…μ΄ λΉ„λ™κΈ°μ μœΌλ‘œ(asynchronously) μΌμ–΄λ‚˜λŠ” 경우

 

 

자료λ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…μ΄ μ—¬λŸ¬ κ³³μ—μ„œ μΌμ–΄λ‚˜λŠ” 경우

 

 

자료λ₯Ό μ΄μš©ν•˜λŠ” μž‘μ—…μ΄ μ—¬λŸ¬κ³³μ—μ„œ μΌμ–΄λ‚˜λŠ” 경우

 

 

자료λ₯Ό μƒμ„±ν•˜λŠ” μž‘μ—…κ³Ό κ·Έ 자료λ₯Ό μ΄μš©ν•˜λŠ” μž‘μ—…μ΄ μ–‘μͺ½ λ‹€ μ—¬λŸ¬ κ³³μ—μ„œ μΌμ–΄λ‚˜λŠ” 경우

 

 

자료λ₯Ό μ²˜λ¦¬ν•˜μ—¬ μƒˆλ‘œμš΄ 자료λ₯Ό μƒμ„±ν•˜κ³ , λ‚˜μ€‘μ— κ·Έ 자료λ₯Ό 또 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” μž‘μ—…μ˜ 경우

 

 

 

 

 

ν™˜ν˜• 큐(Circular Queue)

정해진 개수의 μ €μž₯ 곡간을 λΉ™ λŒλ €κ°€λ©° 이용

 

 

 

 

큐가 가득차면 더이상 μ›μ†Œλ₯Ό 넣을 수 μ—†μœΌλ‹ˆ 큐가 가득 μ°ΌλŠ”μ§€ λΉ„μ–΄μžˆλŠ”μ§€ νŒλ‹¨ν•˜κΈ° μœ„ν•΄μ„œλŠ” 큐의 길이λ₯Ό κΈ°μ–΅ν•˜κ³  μžˆμ–΄μ•Όν•œλ‹€. 

 

 

 

 

 

ν™˜ν˜• 큐의 좔상적 자료ꡬ쑰 κ΅¬ν˜„

ν™˜ν˜• 큐λ₯Ό κ΅¬ν˜„ν•˜λŠ”λ°μ—λ„ μ„ ν˜• 배열을 μ΄μš©ν•˜κ±°λ‚˜ μ—°κ²°λ¦¬μŠ€νŠΈλ₯Ό μ΄μš©ν•  수 μžˆμ§€λ§Œ μ—¬κΈ°μ—μ„œλŠ” μ„ ν˜• 배열을 μ΄μš©ν•œλ‹€. μ„ ν˜• λ°°μ—΄κ³Ό μ—°κ²° 리슀트의 μž₯단점을 생각해보고 ν™˜ν˜• 큐λ₯Ό λ§Œλ“œλŠ”λ° μžˆμ–΄ μ–΄λ–€ μž₯점을 νƒν•΄μ•Όν•˜λŠ”μ§€ μƒκ°ν•΄λ³΄μž.....

 

 

μ—°μ‚°μ˜ μ •μ˜

  • size() - ν˜„μž¬ 큐에 λ“€μ–΄μžˆλŠ” 데이터 μ›μ†Œμ˜ 수λ₯Ό ꡬ함
  • isEmpty() - ν˜„μž¬ 큐가 λΉ„μ–΄ μžˆλŠ”μ§€ νŒλ‹¨
  • isFull() - 큐에 데이터 μ›μ†Œκ°€ 꽉 μ°¨ μžˆλŠ”μ§€ νŒλ‹¨
  • enqueue(x) - 데이터 μ›μ†Œ x λ₯Ό 큐에 μΆ”κ°€
  • dequeue() - 큐의 맨 μ•žμ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό 제거(λ˜λŠ” λ°˜ν™˜)
  • peek() - 큐의 맨 μ•žμ— μ €μž₯된 데이터 μ›μ†Œλ₯Ό λ°˜ν™˜ (μ œκ±°ν•˜μ§€ μ•ŠμŒ)

 

 

 

λ°°μ—΄λ‘œ κ΅¬ν˜„ν•œ ν™˜ν˜• 큐

정해진 길이 n (μ—¬κΈ°μ„œ 예제둜 6) 의 리슀트λ₯Ό ν™•λ³΄ν•œλ‹€.
β˜…front와 rearλ₯Ό 적절히 κ³„μ‚°ν•˜μ—¬ 배열을 ν™˜ν˜•μœΌλ‘œ μž¬ν™œμš©β˜…

 

 

 

class CircularQueue:
    # 빈 큐λ₯Ό μ΄ˆκΈ°ν™” (주어진 인자둜 큐의 μ΅œλŒ€) 길이 μ„€μ •
    def __init__(self, n):
        self.maxCount = n
        self.data = [None] * n
        self.count = 0
        self.front = -1
        self.rear = -1
        
    # ν˜„μž¬ 큐 길이λ₯Ό λ°˜ν™˜
    def size(self):
        return self.count
    
    # 큐가 λΉ„μ–΄μžˆλŠ”κ°€?
    def isEmpty(self):
        return self.count == 0
    
    # 큐가 꽉 μ°¨μžˆλŠ”κ°€?
    def isFull(self):
        return self.count == self.maxCount
    

    # 정해진 곡간을 λΉ™ λŒλ €κ°€λ©° 이용, 즉 곡간을 μž¬ν™œμš©ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, 
    # front 와 rear λ₯Ό 마λƒ₯ μ¦κ°€μ‹œν‚€κΈ°λ§Œ ν•¨μœΌλ‘œμ¨λŠ” ν™˜ν˜• 큐λ₯Ό ꡬ성할 수 μ—†λ‹€. -> ν™˜ν˜•μ€ λ‚˜λ¨Έμ§€λ₯Ό μ΄μš©ν•˜μž!!!
    # 큐에 데이터 μ›μ†Œ μΆ”κ°€
    def enqueue(self, x):
        if self.isFull():
            # IndexError('Queue full') exception으둜 처리
            pass
        
        self.rear = (self.rear + 1) % self.maxCount
        self.data[self.rear] = x
        self.count += 1

    # νμ—μ„œ 데이터 μ›μ†Œ 뽑아내기
    def dequeue(self):
        if self.isEmpty():
            raise IndexError('Queue empty')

        self.front = (self.front + 1) % self.maxCount
        x = self.data[self.front]
        self.count -= 1
        return x

    # 큐의 맨 μ•ž μ›μ†Œ λ“€μ—¬λ‹€ 보기
    def peek(self):
        if self.isEmpty():
            raise IndexError('Queue empty')
        return self.data[(self.front + 1) % self.maxCount]

 

 

퇴근 8λΆ„μ „~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

λ°˜μ‘ν˜•
λŒ“κΈ€