zoukankan      html  css  js  c++  java
  • go数组实现环形队列

    package main
    
    import (
    	"errors"
    	"fmt"
    	"os"
    )
    
    // CircleQueue 环形队列
    type CircleQueue struct {
    	maxSize int
    	arr     [5]int
    	head    int // 队首
    	tail    int // 队尾
    }
    
    func main() {
    	queue := CircleQueue{
    		maxSize: 5,
    		arr:     [5]int{},
    		head:    0,
    		tail:    0,
    	}
    
    	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.Push(val)
    			if err != nil {
    				fmt.Println("添加错误", err)
    			} else {
    				fmt.Println("添加成功")
    			}
    		case "get":
    			val, err := queue.Pop()
    			if err != nil {
    				fmt.Println(err.Error())
    			}
    			fmt.Printf("取出一个数 %d
    ", val)
    
    		case "show":
    			queue.Show()
    
    		case "exit":
    			os.Exit(0)
    		}
    
    	}
    
    }
    func (q *CircleQueue) Push(val int) error {
    	if q.IsFull() {
    		return errors.New("队列已满")
    	}
    
    	// tail 在队列尾部 但是不包含最后的元素
    	q.arr[q.tail] = val
    	q.tail = (q.tail + 1) % q.maxSize
    
    	return nil
    }
    
    func (q *CircleQueue) Pop() (int, error) {
    	if q.IsEmpty() {
    		return 0, errors.New("队列为空")
    	}
    	// head指向队首 并且包含队首元素
    	val := q.arr[q.head]
    	q.head = (q.head + 1) % q.maxSize
    	return val, nil
    }
    
    // IsEmpty  队列是否为空
    func (q *CircleQueue) IsEmpty() bool {
    	return q.tail == q.head
    }
    
    func (q *CircleQueue) IsFull() bool {
    	return (q.tail+1)%q.maxSize == q.head
    }
    
    func (q *CircleQueue) Size() int {
    	return (q.tail + q.maxSize - q.head) % q.maxSize
    }
    
    func (q *CircleQueue) Show() {
    	fmt.Println("环形队列情况如下 ",q.head,q.tail)
    	size := q.Size()
    	if size == 0 {
    		fmt.Println("队列为空")
    	}
    	tempHead := q.head
    	for i := 0; i < size; i++ {
    		fmt.Printf("arr[%d]=%d
    ", tempHead, q.arr[tempHead])
    		tempHead = (tempHead + 1) % q.maxSize
    	}
    }
    
    
  • 相关阅读:
    atom那些事儿
    浙江省和杭州市
    Web API之indexedDB和Web SQL
    绝对定位元素居中
    多列等高布局
    git生成ssh key及github ssh key对接
    vuejs模板使用方法
    css3动画图片波纹效果
    sticky footer布局,定位底部footer
    css3圆环闪烁动画
  • 原文地址:https://www.cnblogs.com/brady-wang/p/15364205.html
Copyright © 2011-2022 走看看