《Java数据结构与算法》笔记-CH4-4循环队列
/**
* 循环队列
*/
class Queue {
private int maxSize;
private long[] queue;
private int front;
private int rear;
private int nItems; public Queue(int size) {
maxSize = size;
queue = new long[maxSize];
front = 0;
rear = -1;
nItems = 0;
} /**
* 插入value 运行的前提条件是队列不满。满的话抛出异常
*
* @param value
* @throws Exception
*/
public void insert(long value) throws Exception {
if (isFull()) {
throw new Exception("queue is full, can not insert " + value);
}
// 当rear指针指向数组的顶端,即maxSize-1位置时,在插入数据项之前,必须绕回到数组的底端。
// 回绕操作把rear设置为-1,因此当rear加1后为0,是数组底端的下标值
if (rear == maxSize - 1) {
rear = -1;
}
// 插入操作rear队尾指针加一后,在队尾指针所指的位置处插入新的数据。然后nItem++
queue[++rear] = value;
nItems++;
} /**
* 队头移除操作 前提是队列不空,为空则抛出异常
*
* @return
* @throws Exception
*/
public long remove() throws Exception {
if (isEmpty()) {
throw new Exception("queue is empty, can not remove");
}
// 移除操作总是由front指针得到队头数据项的值,然后将front加一。
long temp = queue[front++];
// 如果进行完毕后front的值超过数组的顶端,也就是==maxSize,front就必须绕回到0位置
if (front == maxSize)
front = 0;
// 操作完毕后,nItems减一
nItems--;
return temp;
} public long peekFront() {
return queue[front];
} public boolean isEmpty() {
return nItems == 0;
} public boolean isFull() {
return nItems == maxSize;
} public int size() {
return nItems;
}
} public class QueueDemo {
public static void main(String[] args) {
Queue q = new Queue(5);
try {
for (int i = 0; i < 7; i++) {
q.insert(i);
}
} catch (Exception e) {
System.out.println(e);
} try {
for (int i = 0; i < 7; i++) {
System.out.println("removed " + q.remove() + ", and queue size is: " + q.size());
}
} catch (Exception e) {
System.out.println(e);
} }
}
《Java数据结构与算法》笔记-CH4-4循环队列的更多相关文章
- Java数据结构和算法(五):队列
简介 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插入操作的端称为 ...
- Java数据结构和算法(1)之队列
1.队列的基本概念 队列(queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表.进行插 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- Java数据结构和算法 - 哈希表
Q: 如何快速地存取员工的信息? A: 假设现在要写一个程序,存取一个公司的员工记录,这个小公司大约有1000个员工,每个员工记录需要1024个字节的存储空间,因此整个数据库的大小约为1MB.一般的计 ...
- Java数据结构和算法(六)——前缀、中缀、后缀表达式
前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...
- Java数据结构和算法(九)——高级排序
春晚好看吗?不存在的!!! 在Java数据结构和算法(三)——冒泡.选择.插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大 ...
- Java数据结构和算法 - 堆
堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...
- Java数据结构和算法 - 二叉树
前言 数据结构可划分为线性结构.树型结构和图型结构三大类.前面几篇讨论了数组.栈和队列.链表都是线性结构.树型结构中每个结点只允许有一个直接前驱结点,但允许有一个以上直接后驱结点.树型结构有树和二叉树 ...
- Java数据结构和算法 - 高级排序
希尔排序 Q: 什么是希尔排序? A: 希尔排序因计算机科学家Donald L.Shell而得名,他在1959年发现了希尔排序算法. A: 希尔排序基于插入排序,但是增加了一个新的特性,大大地提高了插 ...
- Java数据结构和算法 - 递归
三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ...
随机推荐
- Android HTTPS(2)HttpURLConnection.getInputStream异常的原因及解决方案
Common Problems Verifying Server Certificates InputStream in = urlConnection.getInputStream(); getIn ...
- HTML发展历史
概述 HTML从1993到如今的发展,同时针对其以后的发展进行评测. HTML 语言作为网络语言标准规范,在计算机的发展史中有着不可或缺的地位.在HTML 上的成就也决定着一个时代的发展. 1.HTM ...
- jQuery 停止动画、jQuery Callback 函数、jQuery - Chaining
一.jQuery 停止动画 jQuery stop() 方法用于在动画或效果完成前对它们进行停止. stop() 方法适用于所有 jQuery 效果函数,包括滑动.淡入淡出和自定义动画. $(sele ...
- R语言多重共现性的检测
1.kappa值 2. library(car)vif(lm.sol) 得到各个系数的方差膨胀因子,当0<VIF<10的时候,不存在多重共线性,当10<=VIF<100,存在较 ...
- Excel文件操作方式比较
C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑. 由于前两天要做导表工具,比较了常用的方法,总结一下写个短文, 1.OLE的方式 这个大约是最常用的方 ...
- [CTO]创业团队CTO应具备的素质
原文地址:http://www.cyzone.cn/a/20131001/245862_2.html [导读]CTO要让技术团队明白,公司不是请你来搞纯技术研发的,个别人可以纯技术导向,但整个团队的目 ...
- ecshop 修改模板可输出php代码
1.找到includes 文件夹下的 cls_template.php function fetch_str函数 2.只留下以下代码 function fetch_str($source) { if ...
- (六)6.10 Neurons Networks implements of softmax regression
softmax可以看做只有输入和输出的Neurons Networks,如下图: 其参数数量为k*(n+1) ,但在本实现中没有加入截距项,所以参数为k*n的矩阵. 对损失函数J(θ)的形式有: 算法 ...
- HDU5400 Arithmetic Sequence
解题思路:这题看懂题目是很关键的,这个区间是等差数列,且公差为d1或d2, 特别注意单个数字也为等差数列.每次求出等差数列序列长度,然后 求出对应这种长度对应有多少种组合方式,累加起来就是结果. ...
- WPF为提示信息文本增加闪烁效果
程序通常需要显示某些提醒用户警示的信息,如:收件箱(40)其中数量闪烁就会起到警示效果.可以适用如下Storyboard实现: <ItemsControl.ItemTemplate> &l ...