golang数据结构之环形队列
发布时间:2020-12-16 09:18:21 所属栏目:大数据 来源:网络整理
导读:目录结构: circlequeue.go package queueimport ( " errors " fmt " ) // CircleQueue 环型队列 type CircleQueue struct { MaxSize int Array [ 5 ] Front Rear } Push 向队列中添加一个值 func (q *CircleQueue) Push(val ) (err error) { 先判断队列是否
circlequeue.go package queue import ( "errors" fmt" ) //CircleQueue 环型队列 type CircleQueue struct { MaxSize int Array [5] Front Rear } Push 向队列中添加一个值 func (q *CircleQueue) Push(val ) (err error) { 先判断队列是否已满 if q.IsFull() { return errors.New(队列已满) } q.Array[q.Rear] = val 队尾不包含元素 q.Rear++ q.Rear = (q.Rear + 1) % q.MaxSize returnPop 得到一个值 func (q *CircleQueue) Pop() (val ,err error) { q.IsEmpty() { return -1,errors.New(队列已空) } 队首包含元素 val = q.Array[q.Front] q.Front++ q.Front = (q.Front + 1) % q.MaxSize val,err } IsFull 队列是否满了 func (q *CircleQueue) IsFull() bool { return (q.Rear+1)%q.MaxSize == q.Front } IsEmpty 队列是否为空 func (q *CircleQueue) IsEmpty() q.Front == q.Rear } Size 队列的大小 func (q *CircleQueue) Size() (q.Rear + q.MaxSize - q.Front) % q.MaxSize } Show 显示队列 func (q *CircleQueue) Show() { 取出当前队列有多少元素 size := q.Size() if size == 0 { fmt.Println(队列为空辅助变量,指向Front tmpFront := q.Front for i := 0; i < size; i++ { fmt.Printf(queue[%d]=%vttmpFront = (tmpFront + 1) % q.MaxSize } } main.go package main import ( go_code/data_structure/queueos ) func main() { var key string var val q := &queue.CircleQueue{ MaxSize: 5for------------------------------) fmt.Println(1.输入push表示添加数据到队列2.输入pop表示从队列中获取数据3.输入show表示显示队列4.输入exit表示退出) fmt.Scanln(&key) switch key { case push: fmt.Println(请输入要添加的值:) fmt.Scanln(&val) err := q.Push(val) if err != nil { fmt.Println(err) } else { fmt.Println(添加成功) fmt.Println(Rear:pop: val,err := q.Pop() 得到的值为:Front:show: q.Show() fmt.Println() exit: os.Exit() } } } 注意标红的地方,这是循环队列的核心。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |