首页 > 其他分享 >Go-数组模拟队列(环形列表)

Go-数组模拟队列(环形列表)

时间:2022-09-18 02:55:21浏览次数:89  
标签:head err val 队列 fmt 列表 Println Go

 

 

复制
package main

import (
	"errors"
	"fmt"
	"os"
)

type CircleQueue struct {
	maxSize int
	array   [5]int
	head    int
	tail    int
}

//添加队列
func (c *CircleQueue) Push(val int) (err error) {
	//先判断队列是否已满
	if c.IsFull() {
		return errors.New("queue full")
	}
	c.array[c.tail] = val
	c.tail = (c.tail + 1) % c.maxSize
	return
}

//取出队列
func (c *CircleQueue) Pop() (val int, err error) {
	//先判断队列是否为空
	if c.IsEmpty() {
		return 0, errors.New("queue empty")
	}
	val = c.array[c.head]
	c.head = (c.head + 1) % c.maxSize
	return val, err
}

//判断环形队列为空
func (c *CircleQueue) IsEmpty() bool {
	return c.head == c.tail
}

//判断环形队列满了
func (c *CircleQueue) IsFull() bool {
	return (c.tail+1)%c.maxSize == c.head
}

//环形队列的数目
func (c *CircleQueue) Size() int {
	return (c.tail + c.maxSize - c.head) % c.maxSize
}

//显示队列
func (c *CircleQueue) ListQueue() {
	fmt.Println("环形队列情况如下:")
	size := c.Size()
	if size == 0 {
		fmt.Println("队列为空")
		return
	}
	tempHead := c.head
	for i := 0; i < size; i++ {
		fmt.Printf("array[%d]=%d\n", tempHead, c.array[tempHead])
		tempHead = (tempHead + 1) % c.maxSize
	}
	fmt.Println()
}

func main() {
	var key string
	var val int
	queue := &CircleQueue{
		maxSize: 5,
		head:    0,
		tail:    0,
	}
	//添加数据
	for {
		fmt.Println("\n1.输入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.Error())
			} else {
				fmt.Println("加入队列ok")
			}
		case "get":
			val, err := queue.Pop()
			if err != nil {
				fmt.Println(err.Error())
			} else {
				fmt.Println("从队列取出一个数=", val)
			}
		case "show":
			queue.ListQueue()
		case "exit":
			os.Exit(0)
		}
	}
}

 

标签:head,err,val,队列,fmt,列表,Println,Go
From: https://www.cnblogs.com/wuchangblog/p/16704101.html

相关文章

  • Go-单链表
    单链表-往最后面插入复制packagemainimport"fmt"typeHeroNodestruct{ noint namestring nicknamestring next*HeroNode}//在单链表......
  • 数据结构一: golang 单向队列
    队列是什么,如何理解队列?队列一般称queue,是一个有序列表队列一般的原则为:先进先出【谁先来,谁先走】队列一般的场景可以想象:银行取现排队,移动营业厅排队,买咖啡排队等例......
  • 我的Go并发之旅、01 并发哲学与并发原语
    注:本文所有函数名为中文名,并不符合代码规范,仅供读者理解参考。上下文上下文(Context)代表了程序(也可以是进程,操作系统,机器)运行时的环境和状态,联系程序整个生命周期与资源调......
  • 在Go语言中,你是怎样使用Json的方法
    Encode将一个对象编码成JSON数据,接受一个interface{}对象,返回[]byte和error:func Marshal(v interface{}) ([]byte, error)Marshal函数将会递归遍历整个对象,依次按成......
  • 一文理解golang中的链表
    每节运煤车就是单链表里的元素,每节车厢里的煤炭就是元素中保存的数据。前后车通过锁链相连,作为单链表运煤车,从1号车厢开始,每节车厢都知道后面拉着哪一节车厢,却不知道前面是......
  • django框架之模型层-Ajax
    目录Ajax基本操作数据编码格式Ajax携带文件数据Ajax回调函数参数问题sweetalter介绍django自带的序列化组件图书管理系统Ajax基本操作1.Ajax:js自带的功能(学习的是jQuery......
  • 【django学习-11】模板3:自定义标签与过滤器
    前言:Django虽然内置了二十多种标签和六十多种过滤器,但是为了给Web开发者提供更好使用体验,Django也提供了自定义标签与过滤器的功能。当内置标签与过滤器满足不了实际......
  • mongodb 基本概念
    文档是mongodb的最小数据集单位,是多个键值对有序租户在一起的数据单元,类似于关系型数据库的记录集合一组文档的集合,文档存放的是数据,集合内的结构是可以不同的,集......
  • IAR Temple Project add some codes cannot go to the accure location,why
    https://www.iar.com/knowledge/support/technical-notes/ide/troubleshooting-the-embedded-workbench-ide/......
  • 【Django】简单的图书管理系统
    目录1.数据准备2.首页搭建3.书籍展示4.书籍添加5.书籍编辑6.书籍删除1.数据准备classBook(models.Model):"""图书表"""title=models.CharField(max_length=......