golang数据结构和算法之CircularBuffer环形缓冲队列
慢慢练语法和思路,
想说的都在代码及注释里。
CircularBuffer
package CircularBuffer const arraySize = 10 type CircularBuffer struct { data [arraySize]int pointer int } //只实现了CircularBuffer环形缓冲队列的基本方法 func (b *CircularBuffer) InsertValue(i int) { if b.pointer == len(b.data) { b.pointer = 0 } b.data[b.pointer] = i b.pointer += 1 } func (b *CircularBuffer) GetValues() [arraySize]int { return b.data } func (b *CircularBuffer) GetValuesFromPosition(i int) ([arraySize]int, bool) { var out [arraySize]int if i >= len(out) { return out, false } for u := 0; u < len(out); u++ { if i >= len(b.data) { i = 0 } out[u] = b.data[i] i += 1 } return out, true }
CircularBuffer_test
package CircularBuffer import ( "fmt" "math/rand" "testing" "time" ) func TestCircularBuffer(t *testing.T) { var cb CircularBuffer random := rand.New(rand.NewSource(time.Now().UnixNano())) //生成三轮随机数,来测试这个CircularBuffer for i := 0; i < 3*len(cb.data); i++ { cb.InsertValue(random.Intn(arraySize)) fmt.Println(cb, cb.pointer, (i+1)%arraySize) //判断时,要排除在pointer最大时,因为此时,余数为0,而pointer为数组长度 if cb.pointer != arraySize && cb.pointer != (i+1)%arraySize { t.Fail() } //其它几个方法,待测试 } }
golang数据结构和算法之CircularBuffer环形缓冲队列的更多相关文章
- golang数据结构和算法之QueueLinkedList链表队列
队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...
- 数据结构和算法 – 3.堆栈和队列
1.栈的实现 后进先出 自己实现栈的代码 using System; using System.Collections.Generic; using System.Linq; using ...
- JavaScript 版数据结构与算法(二)队列
今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...
- JS数据结构及算法(二) 队列
队列是遵循先进先出的一种数据结构,在尾部添加新元素,并从顶部移除元素. 1.普通队列 function Queue() { this.items = []; } Queue.prototype = { ...
- golang数据结构和算法之BinarySearch二分查找法
基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...
- 用JS描述的数据结构及算法表示——栈和队列(基础版)
前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...
- Java数据结构和算法(五)——队列
前面一篇博客我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本篇博客我们介绍另外一个这样的工具——队列.栈是后进先出,而队列刚好相反,是先进先出. 1.队列的 ...
- 数据结构与算法JavaScript描述——使用队列
1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...
- 用Python实现的数据结构与算法:双端队列
一.概述 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构.双端队列也拥有两端:队首(front).队尾(rear),但与队列不同的是,插入操作在两 ...
随机推荐
- Docker系列01-容器初探
关于容器的发展史 关于容器有不得不说的历史故事,以下资料来自于互联网收集整理所得: 容器概念始于 1979 年提出的 UNIX chroot,它是一个 UNIX 操作系统的系统调用,将一个进程及其子进 ...
- docker实用命令
退出容器又不关闭容器:Ctrl + P + Q 比如这种情况: 直接输入exit 会退出且关闭容器,工程就stop了 或者Ctrl + C,会报错KeyboardInterrupt,工程就也stop了 ...
- MySQL学习——管理用户权限
MySQL学习——管理用户权限 摘要:本文主要学习了使用DCL语句管理用户权限的方法. 了解用户权限 什么是用户 用户,指的就是操作和使用MySQL数据库的人.使用MySQL数据库需要用户先通过用户名 ...
- 简述FreeCAD在vs2017下的编译与dxf导入
最近发现 FreeCAD 官方在发布 0.19_pre 时已提供 vs2017 x64的LibPack,现在就再来测试一下. 编译 下载 FreeCADLibs_12.1.2_x64_VC15.7z ...
- element-ui 中dialog居中
.el-dialog{ display: flex; flex-direction: column; margin:0 !important; ...
- Noip2016Day2T3 愤怒的小鸟
题目链接 problem 平面内有n个点,每次可以确定一条过原点且开口向上的抛物线,将这条抛物线上所有的点都删去.问最少需要删几次可以删掉全部的点. solution n比较小,直接状压一下.因为已经 ...
- js 的cookie问题
获取时解码可以用decodeURIComponent(),代替 unescape() // 设置cookiefunction setCookie(name,value) { var Days = 30 ...
- Linux 下编写一个 PHP 扩展
假设需求 开发一个叫做 helloWord 的扩展. 扩展里有一个函数,helloWord(). echo helloWord('Tom'); //返回:Hello World: Tom 本地 ...
- CentOS 7 firewalld详解,添加删除策略
一.CentOS7中firewall防火墙 修改防火墙配置文件之前,需要对之前防火墙[/etc/firewalld/zones/public.xml]做好备份 重启防火墙后,需要确认防火墙状态和防火墙 ...
- 【BZOJ4823】[CQOI2017]老C的方块(网络流)
[BZOJ4823][CQOI2017]老C的方块(网络流) 题面 BZOJ 题解 首先还是给棋盘进行黑白染色,然后对于特殊边左右两侧的格子单独拎出来考虑. 为了和其他格子区分,我们把两侧的这两个格子 ...