隊列可以用數組或鏈表實現,遵從先入先出。
目錄結構:

在main中調用queue包中的屬性和方法,如何調用參考另一篇文章: https://www.cnblogs.com/xiximayou/p/12005480.html
一個隊列需要有四要素:容量、隊首指針、隊尾指針、存儲數據的數組;
當隊尾指針==容量-1時,此時隊列已滿,就不能再有數據進隊;
當隊首指針==隊尾指針時,此時隊列已空,就不能再從隊列中取出數據;
同時可以發現,這種隊列只能使用一次,因為那時隊首和隊尾都指向隊尾了。
代碼如下:
queue.go
package queue import ( "errors" "fmt" ) //Queue 使用結構體管理隊列 type Queue struct { MaxSize int Array [4]int //模擬隊列 Front int //隊列首位 Rear int //隊列尾部 } //AddQueue 向隊列中添加一個值 func (q *Queue) AddQueue(val int) (err error) { q.MaxSize = 4 //先判斷隊列是否已滿 if q.Rear == q.MaxSize-1 { return errors.New("隊列已滿") } q.Rear++ q.Array[q.Rear] = val return } //GetQueue 得到一個值 func (q *Queue) GetQueue() (val int, err error) { if q.Front == q.Rear { return -1, errors.New("隊列已空") } q.Front++ val = q.Array[q.Front] return val, err } //ShowQueue 顯示隊列 func (q *Queue) ShowQueue() { for i := q.Front + 1; i <= q.Rear; i++ { fmt.Printf("queue[%d]=%v\t", i, q.Array[i]) } }
main.go
package main import ( "fmt" "go_code/data_structure/queue" "os" ) func main() { var key string var val int q := &queue.Queue{ MaxSize: 4, Front: -1, Rear: -1, } for { fmt.Println("------------------------------") fmt.Println("1.輸入add表示添加數據到隊列") fmt.Println("2.輸入get表示從隊列中獲取數據") fmt.Println("3.輸入show表示顯示隊列") fmt.Println("4.輸入exit表示退出") fmt.Println("------------------------------") fmt.Scanln(&key) switch key { case "add": fmt.Println("請輸入要添加的值:") fmt.Scanln(&val) err := q.AddQueue(val) if err != nil { fmt.Println(err) } else { fmt.Println("添加成功") fmt.Println("Rear:", q.Rear) } case "get": val, err := q.GetQueue() if err != nil { fmt.Println(err) } else { fmt.Println("得到的值為:", val) fmt.Println("Front:", q.Front) } case "show": q.ShowQueue() fmt.Println() case "exit": os.Exit(0) } } }
