* 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任。 2019年4月8日

Stan Zhang 2019年4月8日  格物致知,经世致用。

队列是一种先进先出FIFO的模型,常见操作有: push、pull 获得队列出口首元素并从队列中删除、peek 查看队列出口首元素,不从队列中删除。

队列与其他线性结构一样,可以使用数组或者链表实现,这里使用数组实现。

使用数组实现队列长度必然是固定的,因此规定当队列存满之后不再进行扩容,只是提示。

队列中为了充分使用数据空间,首尾指针采用与数组长度求模的方式进行添加和删除。

Java代码:

package ds2.queue;

public class ArrayQueue {
static class Queue{
int maxSize;
int queSize;
long[] data ;
int head; // 头索引
int tail; // 尾索引
public Queue(int maxSize) {
this.maxSize = maxSize;
this.data = new long[maxSize];
this.head = 0;
this.tail = -1;
} public boolean isFull(){
return maxSize == queSize;
} public boolean isEmpty(){
return queSize == 0;
} /**
* 向尾部加数据
* 线性时间
* @param data
*/
public void push(long data){
if(isFull()){
System.out.println("The element cann't be inserted owing to the queue is full!");
}else{
this.tail = (this.tail + 1)%this.data.length;
this.data[this.tail] = data;
this.queSize ++ ;
}
} /**
* 从头部取数据,线性时间
* @return
*/
public long peek(){
return this.data[this.head];
} /**
* 从头部取数据
* @return
*/
public long pull(){
long data = this.data[this.head];
this.head = (this.head + 1)%this.data.length;
this.queSize --;
return data;
} public void foreachPrint(){
if(this.isEmpty()){
System.out.println("[]");
return;
}
System.out.print("[" + this.data[this.head]);
for(int i = 1,j = this.head + 1; i < queSize; i++,j++){
System.out.print("," + this.data[j%this.data.length]);
}
System.out.println("]");
} } public static void main(String[] args) {
Queue queue = new Queue(4);
queue.push(1);
queue.foreachPrint();
queue.push(2);
queue.foreachPrint();
queue.push(3);
queue.foreachPrint();
queue.push(4);
queue.foreachPrint();
queue.push(5);
queue.foreachPrint();
System.out.println(queue.peek());
queue.foreachPrint();
System.out.println(queue.pull());
queue.foreachPrint();
System.out.println(queue.pull());
queue.foreachPrint();
queue.push(5);
queue.foreachPrint();
queue.push(6);
queue.foreachPrint();
}
}

result::

[1]
[1,2]
[1,2,3]
[1,2,3,4]
The element cann't be inserted owing to the queue is full!
[1,2,3,4]
1
[1,2,3,4]
1
[2,3,4]
2
[3,4]
[3,4,5]
[3,4,5,6]

[数据结构]P1.2 队列的更多相关文章

  1. C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作

    1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...

  2. javascript数据结构与算法---队列

    javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...

  3. C++数据结构之链式队列(Linked Queue)

    C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...

  4. [数据结构]C语言队列的实现

    我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...

  5. JavaScript数据结构和算法----队列

    前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...

  6. JavaScript数据结构与算法-队列练习

    队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...

  7. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

  8. C语言- 基础数据结构和算法 - 队列的顺序存储

    听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...

  9. python数据结构与算法——队列

    队列结构可以使用数组来模拟,只需要设定头和尾的两个标记 参考自<啊哈> # 按书中的代码会出现索引越界的问题(书中申请了超量的空间) # 尝试令tai初始为len(q)-1则不会出错但少了 ...

随机推荐

  1. 解决url传中文参数问题

    项目中要做一个表格导出功能,用的是location.url传值给后台导出表格数据.由于传中文会出现乱码现象.故需要给参数转码,具体如下: 对于url要传的中文参数进行两次编码(注意是两次),即enco ...

  2. 【立体几何】分类讨论很细节 Gym - 101967I Путешествие по тору

    http://codeforces.com/gym/101967/attachments 题意:定义了一个甜甜圈.(torus) 不是让你二重积分啦233 现在有一个星球是甜甜圈形状的,它有四条很关键 ...

  3. 范进中Nature——儒林外史新义

    范进中Nature——儒林外史新义 范进发了文章回办公室,实验室一块儿搬砖的挂名作者俱各欢喜.正待烧锅煮方便面,只见他老板胡副教授,手里拿着一包外卖和一瓶红星二锅头,走了进来.范进向他作揖,坐下.胡副 ...

  4. 在不同语言中static的用法

    static (计算机高级语言) 编辑 像在VB,C#,C,C++,Java,PHP中我们可以看到static作为关键字和函数出现,在其他的高级计算机语言如FORTRAN.ALGOL.COBOL.BA ...

  5. 【LeetCode每天一题】Length of Last Word(字符串中最后一个单词的长度)

    Given a string s consists of upper/lower-case alphabets and empty space characters ' ', return the l ...

  6. SpringBoot框架的使用

    什么是SpringBoot Spring Boot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目.大多数SpringBoot项目只需要很少的配置文件. SpringBoo ...

  7. SV coverage

    covergroup是对coverage model的一种包装,每个covergroup可以包含: 1) sync event来触发采样, 2) 很多coverpoint, 3) cross cove ...

  8. bzoj2880

    打公式好麻烦 QAQ 为了节省时间去复习,原谅我引用一下别人的博客...http://blog.csdn.net/acdreamers/article/details/8542292 #include ...

  9. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  10. Spring IOC 注入方式详解 附代码

    引言 Spring框架作为优秀的开源框架之一,深受各大Java开发者的追捧,相信对于大家来说并不陌生,Spring之所以这么流行,少不了他的两大核心技术IOC和IOP.我们这里重点讲述Spring框架 ...