순환 대기열의 구현(Go)

순환 대기열의 구조는 다음과 같이 정의됩니다.
//         
type CircularQueue struct {
    q []interface{}
    capacity int
    head int
    tail int
}

구현 작업은 다음과 같습니다.
  • 큐 만들기
  • 원소입대
  • 원소출대
  • 만점
  • 판정
  • 스트리밍 대기열
  • 코드는 다음과 같습니다.
    package main
    
    import "fmt"
    
    //         
    type CircularQueue struct {
        q []interface{}
        capacity int
        head int
        tail int
    }
    
    //     
    func NewCircularQueue(n int) *CircularQueue {
        if n == 0 {
            return nil
        }
        return &CircularQueue{
            q: make([]interface{}, n),
            capacity: n,
            head:     0,
            tail:     0,
        }
    }
    
    
    //     
    func (this *CircularQueue) IsEmpty() bool {
        if this.head == this.tail {
            return true
        }
        return false
    }
    
    
    //     
    func (this *CircularQueue) IsFull() bool {
        if this.head == (this.tail + 1) % this.capacity {
            return true
        }
        return false
    }
    
    //     
    func (this *CircularQueue) EnQueue(v interface{}) bool {
        if this.IsFull() {
            return false
        }
        this.q[this.tail] = v
        this.tail = (this.tail + 1) % this.capacity
        return true
    }
    
    //     
    func (this *CircularQueue) DeQueue() interface{}  {
        if this.IsEmpty() {
            return false
        }
        v := this.q[this.head]
        this.head = (this.head+1) % this.capacity
        return v
    }
    
    //      
    func (this *CircularQueue) String() string {
        if this.IsEmpty() {
            return "empty queue!"
        }
        result := "head"
        var i = this.head
        for {
            result += fmt.Sprintf("

    좋은 웹페이지 즐겨찾기