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 退出队列