golang数据结构之环形队列
目录结构:
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数据结构之环形队列的更多相关文章
- DPDK 无锁环形队列(Ring)详解
DPDK 无锁环形队列(Ring) 此篇文章主要用来学习和记录DPDK中无锁环形队列相关内容,结合了官方文档说明和源码中的实现,供大家交流和学习. Author : Toney Email : vip ...
- 数据结构-环形队列 C和C++的实现
队列: 含义:是一种先入先出(FIFO)的数据结构. 当我们把数据一个一个放入队列中.当我们需要用到这些数据时,每次都从队列的头部取出第一个数据进行处理.就像排队进场一样,先排队的人先进场. 结构如下 ...
- 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...
- 【数据结构】C++语言无锁环形队列的实现
无锁环形队列 1.Ring_Queue在payload前加入一个头,来表示当前节点的状态 2.当前节点的状态包括可以读.可以写.正在读.正在写 3.当读完成后将节点状态改为可以写,当写完成后将节点状态 ...
- 【数据结构】C++语言环形队列的实现
队列--先进先出 队列的一个缺点--出队后的内存空间浪费了,不能二次利用 环形队列--解决以上缺点的队列,用过的内存空间可以重复利用 github: https://github.com/HITFis ...
- 【转】C#环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: 1 public class MyQueue< ...
- C#实现环形队列
概述 看了一个数据结构的教程,是用C++写的,可自己C#还是一个菜鸟,更别说C++了,但还是大胆尝试用C#将其中的环形队列的实现写出来,先上代码: public class MyQueue<T& ...
- Python数据结构:栈 队列
栈,队列的特性: 1.栈(stacks)是一种只能通过访问其一端来实现数据存储与检索的线性数据结构,具有后进先出(last in first out,LIFO)的特征 2.队列(queue)是一种具有 ...
- <2014 05 16> 线性表、栈与队列——一个环形队列的C语言实现
栈与队列都是具有特殊存取方式的线性表,栈属于先进后出(FILO),而队列则是先进先出(FIFO).栈能够将递归问题转化为非递归问题,这是它的一个重要特性.除了FILO.FIFO这样的最普遍存取方式外, ...
随机推荐
- (python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read timed out.')
(python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, ‘Read timed out.’)pip工具安装百度经验链接: pip安装 ...
- partition by 与ROW_NUMBER()函数使用详解
SQL Server数据库partition by 与ROW_NUMBER()函数使用详解 关于SQL的partition by 字段的一些用法心得 先看例子: if object_id('TESTD ...
- 企业级堡垒机 jumpserver
环境准备 系统:CentOS 7 IP:192.168.10.101 关闭selinux 和防火墙 # CentOS $ setenforce # 可以设置配置文件永久关闭 $ systemctl s ...
- Keystone安装与配置
一.实验目的: 1.掌握OpenStack环境搭建的基础工作 2.掌握keystone的安装与配置方法 3.掌握keystone基础接口的调用方法 二.实验步骤: 1.利用最初创建的快照克隆两台Cen ...
- PhpSpreadsheet的简单使用
由于PHPExcel已经不再维护,PhpSpreadsheet是PHPExcel的下一个版本.PhpSpreadsheet是一个用纯PHP编写的库,并引入了命名空间,PSR规范等.这里简单介绍下Php ...
- go语言的常量
Go 语言常量 常量是一个简单值的标识符,在程序运行时,不会被修改的量. 常量中的数据类型只可以是布尔型.数字型(整数型.浮点型和复数)和字符串型. 常量的定义格式: const identifier ...
- ETCD:HTTP JSON API通过gRPC网关
原文地址:HTTP JSON API through the gRPC gateway etcd v3 使用 gRPC 作为消息协议.etcd项目包括一个基于gRPC的Go客户端和一个命令行工具,et ...
- Maven 教程之 pom.xml 详解
作者:dunwu https://github.com/dunwu/blog 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. My ...
- Windows系统调用中的系统服务表
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中的系统服务表 如果这部分不理解,可以查看 ...
- linux-VMtools安装
一.解决的问题 1.剪切板无法共享 2.共享文件夹的设置 3.窗口无法自适应 二. 安装 1.进入centos 2.点击VMware菜单--->install VMware tools 3.打开 ...