目录结构:

circlequeue.go

package queue

import (
"errors"
"fmt"
) //CircleQueue 环型队列
type CircleQueue struct {
MaxSize int
Array []int
Front int
Rear int
} //Push 向队列中添加一个值
func (q *CircleQueue) Push(val int) (err error) {
//先判断队列是否已满
if q.IsFull() {
return errors.New("队列已满")
}
q.Array[q.Rear] = val
//队尾不包含元素
//q.Rear++
q.Rear = (q.Rear + 1) % q.MaxSize
return
} //Pop 得到一个值
func (q *CircleQueue) Pop() (val int, err error) {
if q.IsEmpty() {
return -, errors.New("队列已空")
}
//队首包含元素
val = q.Array[q.Front]
//q.Front++
q.Front = (q.Front + 1) % q.MaxSize
return val, err
} //IsFull 队列是否满了
func (q *CircleQueue) IsFull() bool {
return (q.Rear+1)%q.MaxSize == q.Front
} //IsEmpty 队列是否为空
func (q *CircleQueue) IsEmpty() bool {
return q.Front == q.Rear
} //Size 队列的大小
func (q *CircleQueue) Size() int {
return (q.Rear + q.MaxSize - q.Front) % q.MaxSize
} //Show 显示队列
func (q *CircleQueue) Show() {
//取出当前队列有多少元素
size := q.Size()
if size == {
fmt.Println("队列为空")
}
//辅助变量,指向Front
tmpFront := q.Front
for i := ; i < size; i++ {
fmt.Printf("queue[%d]=%v\t", tmpFront, q.Array[tmpFront])
tmpFront = (tmpFront + 1) % q.MaxSize
} }

main.go

package main

import (
"fmt"
"go_code/data_structure/queue"
"os"
) func main() { var key string
var val int
q := &queue.CircleQueue{
MaxSize: ,
Front: ,
Rear: ,
}
for {
fmt.Println("------------------------------")
fmt.Println("1.输入push表示添加数据到队列")
fmt.Println("2.输入pop表示从队列中获取数据")
fmt.Println("3.输入show表示显示队列")
fmt.Println("4.输入exit表示退出")
fmt.Println("------------------------------")
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:", q.Rear)
}
case "pop":
val, err := q.Pop()
if err != nil {
fmt.Println(err)
} else {
fmt.Println("得到的值为:", val)
fmt.Println("Front:", q.Front)
} case "show":
q.Show()
fmt.Println()
case "exit":
os.Exit()
}
}
}

注意标红的地方,这是循环队列的核心。

golang数据结构之环形队列的更多相关文章

  1. DPDK 无锁环形队列(Ring)详解

    DPDK 无锁环形队列(Ring) 此篇文章主要用来学习和记录DPDK中无锁环形队列相关内容,结合了官方文档说明和源码中的实现,供大家交流和学习. Author : Toney Email : vip ...

  2. 数据结构-环形队列 C和C++的实现

    队列: 含义:是一种先入先出(FIFO)的数据结构. 当我们把数据一个一个放入队列中.当我们需要用到这些数据时,每次都从队列的头部取出第一个数据进行处理.就像排队进场一样,先排队的人先进场. 结构如下 ...

  3. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

  4. 【数据结构】C++语言无锁环形队列的实现

    无锁环形队列 1.Ring_Queue在payload前加入一个头,来表示当前节点的状态 2.当前节点的状态包括可以读.可以写.正在读.正在写 3.当读完成后将节点状态改为可以写,当写完成后将节点状态 ...

  5. 【数据结构】C++语言环形队列的实现

    队列--先进先出 队列的一个缺点--出队后的内存空间浪费了,不能二次利用 环形队列--解决以上缺点的队列,用过的内存空间可以重复利用 github: https://github.com/HITFis ...

  6. 【转】C#环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...

  7. C#实现环形队列

    概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...

  8. Python数据结构:栈 队列

    栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有 ...

  9. <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现

    栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外, ...

随机推荐

  1. 2019 DevOps 必备面试题——容器化和虚拟化

    原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...

  2. QT Creator: The process could not be started!

    如果往工程里面增加了uac.manifest 文件后,QT creator不通过管理员启动的话,若要debug程序的话,就会提示 “The process could not be started!” ...

  3. 记录python上传文件的坑(2)

    描述: 1.之前在写项目mock代码时,碰到一个上传文件的接口,但项目接口本身有token保护机制,碰到token失效时,需要重新获取一次token后,再次对上传文件发起请求,在实际调用中发现,第一次 ...

  4. 06-Node.js学习笔记-创建web服务器

    创建web服务器 //引用系统模块 const http = require('http'); //创建web服务器 //用于处理url地址 const url = require('url'); c ...

  5. [译]Vulkan教程(32)生成mipmap

    [译]Vulkan教程(32)生成mipmap Generating Mipmaps 生成mipmap Introduction 入门 Our program can now load and ren ...

  6. 关于使用宏将csv批量转换成xls的分享

    最近在使用遇到一个问题需要把csv格式的文件转成xls,随便新建一个excel,然后打开,选择“开发工具”,找到下图“宏”,如果跟下图一样的话就需要先启用宏,启用之后可以直接把下面的代码直接复制到代码 ...

  7. HTML51-清除浮动overflow、网易注册界面基本结构搭建

    一.overflow:hidden;作用 (1)可以将超出标签范围的内容裁剪掉 (2)清除浮动 .box1{ background-color: red; /*border:1px white sol ...

  8. Vue 从入门到进阶之路(十三)

    之前的文章我们介绍了一下 vue 中的作用域插槽,本章我们来看一下动态组件与 v-once 指令. <!DOCTYPE html> <html lang="en" ...

  9. Jmeter元件——JSON Extractor后置处理器介绍2

    在前段时间将JSON Extractor元件做了个简单的介绍:Jmeter元件——JSON Extractor后置处理器介绍1,今天以一个具体的json,以不同的方式提取数据做个详细的介绍. 一.模拟 ...

  10. Astyle 一键格式化项目代码

    代码格式化差异问题: 一个团队有多个开发,因开发习惯不同,开发时少添加了空格.换行等. 格式化代码时,一般会将整个文档格式化,代码提交时会发现未知的修改项. Astyle格式化工具 官网下载地址:Ar ...