Go数据结构之Queue

Queue


  简单而实用的数据结构,FIFO,通过循环数组避免队列出现“似乎满了”的现象。


package Queue

import "errors"

const (
defaultQueueSize=10
)
var queueSize int
type MyQueue struct{
front int
rear int
currentCount int
elements interface {}
}
/**
指定大小的初始化
*/
func NewMyQueueBySize(size int) *MyQueue{
queueSize=size
return &MyQueue{0, size-1,0,make([] interface {},size)}
}
/**
按默认大小进行初始化
*/
func NewMyQueue() *MyQueue{
return NewMyQueueBySize(defaultQueueSize)
}
/**
向下一个位置做探测
*/
func ProbeNext(i int) int{
return (i+1)%/queueSize
}
/**
清空队列
*/
func (queue *MyQueue)ClearQueue(){
queue.front=0
queue.rear=queueSize-1
queue.currentCount=0
}
/**
是否为空队列
*/
func (queue *MyQueue)IsEmpty() bool{
if ProbeNext(queue.rear)==queue.front{
return true
}
return false
}
/**
队列是否满了
*/
func (queue *MyQueue)IsFull() bool{
if ProbeNext(ProbeNext(queue.rear))==queue.front{
return true
}
return false
}
/**
入队
*/
func (queue *MyQueue)Offer(e interface {}) error{
if queue.IsFull()==true{
return errors.New("the queue is full.")
}
queue.rear=ProbeNext(queue.rear)
queue.elements[queue.rear]=e
queue.currentCount=queueSize+1
return nil
}
/**
出队一个元素
*/
func (queue *MyQueue)Poll()(interface {},error){
if queue.IsEmpty()==true{
return nil,errors.New("the queue is empty.")
}
tmp:=queue.front
queue.front=ProbeNext(queue.front)
queue.currentCount-1
return queue.elements[tmp],nil
}

Go数据结构之Queue

时间: 2024-08-05 20:35:47

Go数据结构之Queue的相关文章

数据结构之queue

queue queue先进先出 可用函数 empty(); //判断队列是否为空 size(); //返回队列大小 top(); //返回队首元素 back(); //返回队尾元素 push(); //入队 pop(); //出队 priority_queue 优先化队列 默认为从大到小,对首元素最大,队尾元素最小,但是可改为从小到大 priority_queue<int,vector<int>,greater<int> >pq; pq队列即为从小到大顺序 与queue

[C++][数据结构]队列(queue)的实现

对于队列的定义,前人之述备矣. 队列的实现方法与栈非常相似.我直接在我实现的那个栈的代码上加了一点东西,全局替换了一些标识符,就实现了这个队列. 我实现的是一个queue<value>容器类,支持push,pop,top,size,empty,clear和copy construction操作. 主要的实现思路是,先写出几个支持基本操作的类_queue_impl,然后再写一个包装类queue,包装基本操作,再实现size,copy struction,top,clear和抛出异常的功能.这样做

【数据结构】 Queue 的简单实现

public class XQueue<T> { /// <summary> /// 第一个元素 /// </summary> private static XQueueItem<T> _top; /// <summary> /// 最后一个元素 /// </summary> private static XQueueItem<T> _last; /// <summary> /// 长度 /// </su

Python与数据结构[2] -&gt; 队列/Queue[0] -&gt; 数组队列的 Python 实现

队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- 下面将使用Python中的list来替代C语言中的数组实现数组队列的数据结构. Note: 这里的实现并没有像C语言中的申请一块固定大小的数组,手动的定制数组中队列的头尾位置,而是利用list的特性直接完成,因此较为简单. 数组队列的实现与数组栈的实现基本类似,同时入列和出列也十分简单,仅需要对数组进行操作即

数据结构--树

无论是链表,栈还是队列,它们都是线性结构的,每个节点的左边最多一个节点,右边也最多一个节点,对于大量的输入数据,线性表的访问时间太慢,不宜使用.这里我要说一种非线性的数据结构,其大部分操作的运行时间平均为O(logn). 我们涉及到的这种数据结构叫做树.在计算机科学中,树是非常有用的抽象概念.我们形象的去描述一棵树,一个家族的老祖可能有两个儿子,这两个儿子一个有一个儿子,一个有三个儿子,像这样发展下去的一个族谱,就是一个树.下面是常见的一种树:二叉树. 本文中以二叉树为例,将二叉树的数据结构定义

SPL标准库常用的数据结构

栈数据结构 1 $stack = new SplStack(); //栈数据结构->先进后出 2 $stack->push('data1'); //入栈 3 $stack->push('data2'); //入栈 4 echo $stack->pop(); //出栈->data2 5 echo $stack->pop(); //出栈->data1 队列数据结构 1 $queue = new SplQueue(); //队列数据结构->先进先出 2 $queu

stack queue priority_queue

可以直接使用的数据结构 stack queue priority_queue 头文件 <stack> <queue> <queue> 声明 stack<int>s1 queue<int>q; #include<functional> #include<vector> priority_queue<int,vector<Int>,less<Int>> pq; 从小到大 容量 s1.size

Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其另一端进行删除操作. 队列中允许进行插入操作的一端称为队尾,允许进行删除操作的一端称为队头.队列的插入操作通常称作入队列,队列的删除操作通常称作出队列.最简单的例子就是我们平时的排队,先进先出. 顺序队列的存储结构 下图是一个有6个存储空间的顺序队列的动态示意图,图中front

看数据结构写代码(16)顺序队列的实现(循环队列)

循环队列的基本结构如下: front 属性 表示 队头,rear 属性表示 队尾. 在队空时 :q.rear 和 q.front 都为0 ,其余时刻q.rear 指向 队尾的后继节点,q.front指向 队头. 当在队尾插入元素时,q.rear + 1 ,在删除 队头元素时 ,q.front + 1,这样的操作 会造成 "假溢出"问题. 图(d) 就是一种 假溢出 问题,q.rear 指向 空间的边界,再插入 会造成 溢出,但是 实际上 空间 并未满. 为了解决假溢出,将 队列 看成