慢慢练语法和思路,

想说的都在代码及注释里。

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环形缓冲队列的更多相关文章

  1. golang数据结构和算法之QueueLinkedList链表队列

    队列和堆栈不一样的地方在于进出顺序: 堆栈是后进先出, 队列是先进先出. QueueLinkedList.go package QueueLinkedList type Node struct { d ...

  2. 数据结构和算法 – 3.堆栈和队列

    1.栈的实现   后进先出     自己实现栈的代码 using System; using System.Collections.Generic; using System.Linq; using ...

  3. JavaScript 版数据结构与算法(二)队列

    今天,我们要讲的是数据结构与算法中的队列. 队列简介 队列是什么?队列是一种先进先出(FIFO)的数据结构.队列有什么用呢?队列通常用来描述算法或生活中的一些先进先出的场景,比如: 在图的广度优先遍历 ...

  4. JS数据结构及算法(二) 队列

    队列是遵循先进先出的一种数据结构,在尾部添加新元素,并从顶部移除元素. 1.普通队列 function Queue() { this.items = []; } Queue.prototype = { ...

  5. golang数据结构和算法之BinarySearch二分查找法

    基础语法差不多了, 就需要系统的撸一下数据结构和算法了. 没找到合适的书, 就参考github项目: https://github.com/floyernick/Data-Structures-and ...

  6. 用JS描述的数据结构及算法表示——栈和队列(基础版)

    前言:找了上课时数据结构的教程来看,但是用的语言是c++,所以具体实现在网上搜大神的博客来看,我看到的大神们的博客都写得特别好,不止讲了最基本的思想和算法实现,更多的是侧重于实例运用,一边看一边在心里 ...

  7. Java数据结构和算法(五)——队列

    前面一篇博客我们讲解了并不像数组一样完全作为存储数据功能,而是作为构思算法的辅助工具的数据结构——栈,本篇博客我们介绍另外一个这样的工具——队列.栈是后进先出,而队列刚好相反,是先进先出. 1.队列的 ...

  8. 数据结构与算法JavaScript描述——使用队列

    1.使用队列:方块舞的舞伴分配问题 前面我们提到过,经常用队列模拟排队的人.下面我们使用队列来模拟跳方块舞的人.当 男男女女来到舞池,他们按照自己的性别排成两队.当舞池中有地方空出来时,选两个队 列中 ...

  9. 用Python实现的数据结构与算法:双端队列

    一.概述 双端队列(deque,全名double-ended queue)是一种具有队列和栈性质的线性数据结构.双端队列也拥有两端:队首(front).队尾(rear),但与队列不同的是,插入操作在两 ...

随机推荐

  1. 关于一道fork生成子进程的题目

    题目如下: pid_t pid1,pid2; pid1=fork(); pid2=fork(); ||pid2<) { printf("Fork Failed\n"); } ...

  2. Druid-代码段-4-1

    所属文章:池化技术(一)Druid是如何管理数据库连接的? 本代码段对应主流程4,丢弃连接的守护线程: //连接池瘦身,参考主流程4 public class DestroyConnectionThr ...

  3. Python入门基础学习(文件与异常处理)

    Python基础学习笔记(七) 捕获异常的语法格式: 文件的基本操作: 打开文件 读.写文件 关闭文件 read方法 --读取文件: open函数的第一个参数是要打开的文件名(文件名区分大小写) 如果 ...

  4. Redis安装和基本操作

    Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. Redis 是属于非关系型数据库1.数据比模型较简单2.需要灵活性更强的IT系统3.对数据库性能 ...

  5. 小型数据库性能对比(对比了SQLite、FireBird、FastDB、SQLServer2000绿色版、Access、BDB、PostgreSQL)

    一.全面对比 SQLite.FireBird.FastDB.SQLServer2000绿色版.Access.BDB.PostgreSQL对比结果如下: 二.国产数据库 三.SQLite 与Postgr ...

  6. 201871010123-吴丽丽《面向对象程序设计(Java)》第十三周学习总结

    201871010123-吴丽丽<面向对象程序设计(Java)>第十三周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. python-13-集合增删查

    前言 集合:可变的数据类型,但元素必须是不可变的数据类型,无序不重复,既可哈希.所以python的集合是不能进行修改的,只有增删查.可哈希.不可变数据类型有:元组.bool.int.str 一.增 1 ...

  8. Leetcode练习题Longest Common Prefix

    Question: Longest Common Prefix Write a function to find the longest common prefix string amongst an ...

  9. SPU和SKU介绍及区别

    一.spu概念 SPU = Standard Product Unit (标准化产品单元) SPU是商品信息聚合的最小单位,是一组可复用.易检索的标准化信息的集合,该集合描述了一个产品的特性.通俗点讲 ...

  10. 跟着高淇学Python——第一到第三章总结

    2019/10/26 第一章:Python介绍 Python是一种解释型,面向对象的语言.特点是: 可读性强 简洁,简洁 面向对象 免费开源 可移植性和跨平台性 丰富的库 可扩展性 应用范围:1.人工 ...