美文网首页
37.Go语言·数据结构·数组环形队列

37.Go语言·数据结构·数组环形队列

作者: 一枼落知天下 | 来源:发表于2019-06-18 20:18 被阅读0次

    main.go

    // Go语言·数据结构
    package main
    
    import (
        "errors"
        "fmt"
        "os"
    )
    
    var content string = `
    ————————————————Go语言·数据结构————————————————————
    一、队列
        1.队列是一个有序列表,可以用数组或链表来实现
        2.遵循先入先出的原则:先存入队列的数据,要先取出,后存入的要后取出
    
    二、使用数组环形队列
        //对首=对首+1%对列最大值——————取模
        //队尾=队尾+1%对列最大值——————取模
        //队列长度=(队尾 +对列最大值-对首)%对列最大值——————取模
        0 0+1%5 1+1%5 2+1%5 3+1%5 4+1%5
    
    `
    
    type CircleQueue struct {
        maxSize int
        array   [5]int //数组模拟队列
        head   int    //对首
        tail    int    //队尾
    }
    
    // 入队列
    func (this *CircleQueue) Push(val int) (err error) {
        if this.IsFull(){
            return  errors.New("队列已满!")
        }
        this.array[this.tail] = val
        this.tail = (this.tail+1)%this.maxSize
        return 
    }
    
    // 出队列
    func (this *CircleQueue) Pop() (val int,err error) {
        if this.IsEmpty() {
            return 0,errors.New("队列已空!")
        }
        val = this.array[this.head]
        this.head = (this.head+1)%this.maxSize
        return
    }
    
    // 显示队列
    func (this *CircleQueue) ListQueue() {
        size := this.Size()
        if size ==0{
            fmt.Println("队列已空!")
        }
    
        tmp := this.head
        for i:=0; i<size ;i++ {
            fmt.Printf("this.array[%d]=%d \n",tmp,this.array[tmp])
            tmp = (tmp+1)%this.maxSize
        }
    }
    
    
    // 判断环形队列是否满咯
    func (this *CircleQueue) IsFull() bool{
        return (this.tail+1)%this.maxSize == this.head
    }
    
    // 判断环形队列是否为空
    func (this *CircleQueue) IsEmpty() bool{
        return this.tail == this.head
    }
    
    // 获取环形队列有多少个元素
    func (this *CircleQueue) Size() int{
        return (this.tail +this.maxSize-this.head)%this.maxSize
    }
    
    func main() {
        queue := &CircleQueue{
            maxSize: 5,
            head:   0,
            tail:   0,
        }
    
        var key int
        var val int
    
        for {
            fmt.Println("1.添加队列")
            fmt.Println("2.取出队列")
            fmt.Println("3.显示队列")
            fmt.Println("4.退出")
            fmt.Scanln(&key)
            switch key {
                case 1:
                    fmt.Print("请输入一个数>>>")  
                    fmt.Scanln(&val)
                    err := queue.Push(val)
                    if err != nil {
                        fmt.Println("添加队列失败")
                    }else{
                        fmt.Println("添加队列成功")
                    }
                case 2:
                     val,err := queue.Pop()
                     if err != nil {
                        fmt.Println(err) 
                     }
                     fmt.Println("从队列中取到的是:",val)
                case 3:
                    queue.ListQueue()
                case 4:
                    os.Exit(0)
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:37.Go语言·数据结构·数组环形队列

          本文链接:https://www.haomeiwen.com/subject/lgvqqctx.html