* 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任。 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. Spring Boot 你所不知道的超级知识学习路线清单

    因而 Spring Boot 应用本质上就是一个基于 Spring 框架的应用,它是 Spring 对“约定优先于配置”理念的最佳实践产物,它能够帮助开发者更快速高效地构建基于 Spring 生态圈的 ...

  2. 可持久化Trie

    ---恢复内容开始--- HAOI 2019 DAY1 T1 我爆零了. 爆零的感觉很难受 原因竟然是我从没犯过的错误 审题不清.情绪低迷. 也许 也许 也许就是想让我知道我有多菜吧. 求前k大的区间 ...

  3. android studio/Intellij IDEA(MAC OSX)中android模拟器无法启动的一种原因

    翻了stackoverflow上好多方式,各种重装重启清理缓存,都没有效果. 后来发现,用IDEA创建的模拟器的路径是 /Users/xirtam/.android/avd 而IDE使用的路径是 AN ...

  4. 扩容Linux文件系统

    扩容Linux文件系统 腾讯云 云硬盘扩容 https://cloud.tencent.com/product/cbs https://cloud.tencent.com/document/produ ...

  5. 常用Git命令清单。

    上期传送门:[清单]7个管理和优化网站资源的工具 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Workspace:工作区 Index / Stage:暂存区 Repository: ...

  6. html5dom2

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  7. 0003-20180422-自动化第三章-python基础学习笔记

    3章 内容回顾: 1. 计算机组成 2. 程序编译器 3. 变量 4. 条件 5. 循环 6. py2与py3区别 - 默认编码, - 除法, - input ,raw_input 7. 位,字节关系 ...

  8. 【2017-05-02】winform弹出警告框选择性操作、记事本制作、对话框控件和输入输出流

    一.winform弹出警告框选择性操作 MessageBox.Show()返回一个枚举类值(第一个参数为弹出窗口显示的内容,第二个参数为弹出窗口的标题,第三个参数为弹出窗口包含的按钮) 先新建一个变量 ...

  9. select报错

    query = query.Where(c => c.MfcKey==temp); int hhho = query.Count(); query = from q in query join ...

  10. [转载]Javascript .then()这个方法是什么意思?

    then()方法是异步执行. 意思是:就是当.then()前的方法执行完后再执行then()内部的程序,这样就避免了,数据没获取到等的问题. 语法:promise.then(onCompleted, ...