《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得到的 ...
随机推荐
- [HIHO1082]然而沼跃鱼早就看穿了一切(字符串水题)
题目链接:http://hihocoder.com/problemset/problem/1082 数据范围小,胡搞. /* ━━━━━┒ギリギリ♂ eye! ┓┏┓┏┓┃キリキリ♂ mind! ┛┗ ...
- minimum-number-of-arrows-to-burst-balloons(还挺好)
https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/ 与会议室排期问题,很相似. package com. ...
- 【干货】国外程序员整理的 C++ 资源大全
关于 C++ 框架.库和资源的一些汇总列表,由 fffaraz发起和维护. 内容包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard ...
- hdu3333(线段树)
区间更新,单点查询. hdu3333 #include <iostream> #include <stdio.h> #include <string.h> #inc ...
- js之json
关于json不了解的,请点击:http://www.json.org/json-zh.html json对象的属性必须要用双引号,值为字符串类型也只能使用双引号,例:{"name" ...
- C#操作office进行Excel图表创建,保存本地,word获取
,新建C#控制台应用程序(Excel创建图表) using System; using System.Collections.Generic; using System.Linq; using Sys ...
- openerp学习笔记 context 的应用
1.在Action中定义,context用于传递搜索条件和分组条件,在搜索视图中默认显示: 示例代码: <record model="ir.actions.act_window&quo ...
- 07day2
居然是动规专场.这样不好吧? 采药 [问题描述] 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到 ...
- 【Java】MD5加密
package sdfg; import java.math.BigInteger; import java.security.MessageDigest; import java.security. ...
- 【英语】Bingo口语笔记(37) - 动物的多种表达
let the cat out of the bag.不在袋子中的猫 指秘密被泄露 dog tired 累成狗 doggy bag 食品袋