zoukankan      html  css  js  c++  java
  • 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
    ", 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("
    队列当前的情况是:")
    	for i := q.front + 1; i <= q.rear; i++ {
    		fmt.Printf("array[%d]=%d
    ", 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 退出队列

  • 相关阅读:
    如何实时抓取动态网页数据?
    产品经理面试——简历填写
    项目章程
    IDEA 必要配置
    项目章程
    基础知识02 零基础入门学习汇编语言02
    基础知识03 零基础入门学习汇编语言03
    进制转换教程
    基础知识04 零基础入门学习汇编语言04
    基础知识01 零基础入门学习汇编语言01
  • 原文地址:https://www.cnblogs.com/brady-wang/p/15364002.html
Copyright © 2011-2022 走看看