队列是什么,如何理解队列?
- 队列一般称queue,是一个有序列表
- 队列一般的原则为:先进先出【谁先来,谁先走】
- 队列一般的场景可以想象:银行取现排队,移动营业厅排队,买咖啡排队等例子
用数组来模拟队列的思路
- 队列本身是一个有序列表,我们需要一个maxSize ,表示这个队列最大的长度。
-
队列有头部和尾部,我们用 front/rear 来定义头尾,默认都为-1
package main import ( "fmt" "os" ) // 用数组实现一个非环形的queue队列 // 思路分析: // 1。创建一个array的数组(front前端 rear后端,默认值为-1)[存在在结构体中] // 2。front(前) 初始化为-1 // 3。rear(队列尾部)初始化为 -1 // 4。完成对基本操作: // AddQueue:加入数据到队列 // GetQueue:从队列读取数据 // ShowQueue:查看队列显示 // 用结构体管理队列 type Queue struct { maxSize int // 数组的最大值 array [5]int // 定义的数组 front int // 表示指向队列的头部 rear int // 表示指向队列的尾部 } // AddQueue 添加数据到队列 func (this *Queue) AddQueue(data int) error { // 先判断队列是否已满. if this.rear == this.maxSize-1 { // rear是队列尾部,包含队尾 return fmt.Errorf("队列已满,error") } // 如果队列没有满, rear 往后娜一个位置 this.rear++ this.array[this.rear] = data return nil } func (this *Queue) ShowQueue() { // 要找到头,然后遍历到尾部 fmt.Printf("队列当前的情况是:") for i := this.front + 1; i <= this.rear; i++ { fmt.Printf("arrary[%d]=%d\t", i, this.array[i]) } fmt.Println() } func (this *Queue) GetQueue() (val int, err error) { // 从队列中取出数据 // 判断队列是否为空 if this.front == this.rear { return 0, fmt.Errorf("队列为空") } // front 对首(不包含队首) this.front++ // 首部往后退一下 val = this.array[this.front] return val, nil } // 入口主函数 func main() { data := &Queue{ maxSize: 5, front: -1, rear: -1, } // 添加数据. var key string var val int for { fmt.Println("1 输入add表示添加数据到queue") fmt.Println("2 输入get 表示获取queue队列") fmt.Println("3 输入show 表示显示queue队列") fmt.Println("4 输入exit 表示退出") fmt.Scanln(&key) switch key { case "add": fmt.Println("请输入要添加的数据") fmt.Scanln(&val) err := data.AddQueue(val) if err != nil { fmt.Println("添加失败了!") return } fmt.Println("添加成功") case "get": val, err := data.GetQueue() if err != nil { fmt.Println("error", err) return } fmt.Println("value is", val) case "show": data.ShowQueue() case "exit": os.Exit(0) } } }
标签:尾部,队列,golang,int,数组,front,数据结构,rear From: https://www.cnblogs.com/wuchangblog/p/16704099.html