go 陣列實現單向佇列
本佇列有問題, 單向的,需要優化尾環形佇列
package main import ( "errors" "fmt" "os" ) type Queue struct { maxSize int arr [4]int // 陣列模擬佇列 front int // 指向佇列的最前面 隊首 rear int // 指向隊尾 } func main() { queue := &Queue{ maxSize: 4, arr: [4]int{}, front: -1, rear: -1, } var key string var val int for { fmt.Println("1 add 新增資料到佇列") fmt.Println("2 get 從佇列獲取資料") fmt.Println("3 show 顯示佇列") fmt.Println("4 exit 退出佇列") fmt.Scanln(&key) switch key { case "add": fmt.Println("請輸入一個數") fmt.Scanln(&val) err := queue.addQueue(val) if err != nil { fmt.Println("新增錯誤", err) } else { fmt.Println("新增成功") } case "get": val, err := queue.get() if err != nil { fmt.Println(err.Error()) } fmt.Printf("取出一個數 %d\n", val) case "show": queue.show() case "exit": os.Exit(0) } } } // 新增資料到佇列 func (q *Queue) addQueue(value int) (err error) { // 判斷佇列是否已滿 if q.ifFull() { return errors.New("佇列已滿") } q.rear++ // rear後移 q.arr[q.rear] = value return nil } // 從佇列中取出資料 func (q *Queue) get() (int, error) { // 判斷佇列是否為空 if q.isEmpty() { fmt.Println("佇列為空") } q.front++ val := q.arr[q.front] return val, nil } func (q *Queue) ifFull() bool { return q.rear == q.maxSize-1 // rear 是佇列尾部 含佇列尾部 } func (q *Queue) isEmpty() bool { return q.rear == q.front } // 顯示佇列 func (q *Queue) show() { // 找到隊首 遍歷到隊尾 fmt.Println("\n隊列當前的情況是:") for i := q.front + 1; i <= q.rear; i++ { fmt.Printf("array[%d]=%d\n", i, q.arr[i]) } }
新增成功
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
add
請輸入一個數
3
新增成功
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
show
隊列當前的情況是:
array[0]=1
array[1]=2
array[2]=3
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
get
取出一個數 1
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
show
隊列當前的情況是:
array[1]=2
array[2]=3
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
get
取出一個數 2
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
show
隊列當前的情況是:
array[2]=3
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
add
請輸入一個數
4
新增成功
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
show
隊列當前的情況是:
array[2]=3
array[3]=4
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
get
取出一個數 3
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
get
取出一個數 4
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
show
隊列當前的情況是:
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列
add
請輸入一個數
4
新增錯誤 佇列已滿
1 add 新增資料到佇列
2 get 從佇列獲取資料
3 show 顯示佇列
4 exit 退出佇列