36.Go语言·数据结构·数组模拟队列

2019-06-18  本文已影响0人  一枼落知天下

main.go

// Go语言·数据结构
package main

import (
    "errors"
    "fmt"
    "os"
)

var content string = `
————————————————Go语言·数据结构————————————————————
一、队列
    1.队列是一个有序列表,可以用数组或链表来实现
    2.遵循先入先出的原则:先存入队列的数据,要先取出,后存入的要后取出

二、使用数组模拟队列


`

type Queue struct {
    maxSize int
    array   [5]int //数组模拟队列
    front   int    //对首
    rear    int    //队尾
}

// 添加数据到队列
func (this *Queue) AddQueue(val int) (err error) {
    //判断队列是否已满
    if this.rear == this.maxSize-1 {
        return errors.New("队列已满!")
    }

    this.rear++

    this.array[this.rear] = val
    return
}

// 显示队列,从对首到队尾
func (this *Queue) ShowQueue() {
    // 对首到队尾的数据
    for i := this.front + 1; i <= this.rear; i++ {
        fmt.Printf("this.array[%d]=%v \n ", i, this.array[i])
    }
}

// 从队列中取数据
func (this *Queue) GetQueue() (val int,err error) {
    //判断队列是否已满
    if this.front == this.rear {
        return val,errors.New("队列已空!")
    }

    this.front++

     val = this.array[this.front]
    return 
}


func main() {
    queue := &Queue{
        maxSize: 5,
        front:   -1,
        rear:    -1,
    }

    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.AddQueue(val)
                if err != nil {
                    fmt.Println("添加队列失败")
                }else{
                    fmt.Println("添加队列成功")
                }
            case 2:
                 val,err := queue.GetQueue()
                 if err != nil {
                    fmt.Println(err) 
                 }
                 fmt.Println("从队列中取到的是:",val)
            case 3:
                queue.ShowQueue()
            case 4:
                os.Exit(0)
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读