[数据结构]P1.2 队列
* 注: 本文/本系列谢绝转载,如有转载,本人有权利追究相应责任。 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 队列的更多相关文章
- C语言数据结构-链式队列的实现-初始化、销毁、清空、长度、队列头元素、插入、删除、显示操作
1.数据结构-链式队列的实现-C语言 typedef struct QNode { int data; struct QNode *next; }QNode,*QueuePtr; typedef st ...
- javascript数据结构与算法---队列
javascript数据结构与算法---队列 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素.队列用于存储按顺序排列的数据,先进先出,这点和栈不一样(后入先出).在栈中,最后入栈的元素 ...
- C++数据结构之链式队列(Linked Queue)
C++数据结构之链式队列,实现的基本思想和链式栈的实现差不多,比较不同的一点也是需要注意的一点是,链式队列的指向指针有两个,一个是队头指针(front),一个是队尾指针(rear),注意指针的指向是从 ...
- [数据结构]C语言队列的实现
我个人把链表.队列.栈分为一类,然后图.树分为一类.(串不考虑),分类的理由就是每一类有规律可循,即你能通过修改极少数的代码把链表变成队列.栈.(这里我们不考虑其他诸如设计模式等因素),因此本贴在讲完 ...
- JavaScript数据结构和算法----队列
前言 队列和栈很像,只是用了不同的原则.队列是遵循先进先出(FIFO)原则的一组有序的的项,队列在尾部添加新元素,从顶部移除元素.最新添加的元素必须必须排队在队列的,末尾.可以想象食堂排队买饭的样子. ...
- JavaScript数据结构与算法-队列练习
队列的实现 // 队列类 function Deque () { this.dataStore = []; this.enqueueFront = enqueueFront; this.enqueue ...
- 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...
- C语言- 基础数据结构和算法 - 队列的顺序存储
听黑马程序员教程<基础数据结构和算法 (C版本)>, 照着老师所讲抄的, 视频地址https://www.bilibili.com/video/BV1vE411f7Jh?p=1 喜欢的朋友 ...
- python数据结构与算法——队列
队列结构可以使用数组来模拟,只需要设定头和尾的两个标记 参考自<啊哈> # 按书中的代码会出现索引越界的问题(书中申请了超量的空间) # 尝试令tai初始为len(q)-1则不会出错但少了 ...
随机推荐
- 【模拟与阅读理解】Gym - 101954C Rullete
http://codeforces.com/gym/101954/problem/C 题意:14行伪代码让你翻译. 坑得yibi #include<stdio.h> #include< ...
- [AI][tensorflow][keras] archlinux下 tersorflow and keras 安装
tensorflow TensorFlow is an open-source machine learning library for research and production. https: ...
- Swagger学习笔记
狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Swagger学习笔记 课程目标 了解Swagger的概念及作用 掌握在项目中集成Swagger ...
- nvm 安装使用
事先说明-------先安装nvm,再安装nodejs [nvm参考安装地址] nvm install 6.9.4 # 安装nodejs6.9.4版本 nvm use 6.9.4 # 使用nodejs ...
- PowerBI新功能: PowerBI多报表共享一个数据集
在PowerBI里面建模,来来回回摸了一遍之后,肯定不想在另外一个报表的时候重复一次建模--这样不利于复用和维护. 四月份的更新版提供了一个预览功能(如下),可以让多报表(pbix)共享同一个数据集. ...
- Linux平台 Oracle 18c RAC安装Part2:GI配置
三.GI(Grid Infrastructure)安装 3.1 解压GI的安装包 3.2 安装配置Xmanager软件 3.3 共享存储LUN的赋权 3.4 使用Xmanager图形化界面配置GI 3 ...
- Deeplab v3+的结构的理解,图像分割最新成果
Deeplab v3+ 结构的精髓: 1.继续使用ASPP结构, SPP 利用对多种比例(rates)和多种有效感受野的不同分辨率特征处理,来挖掘多尺度的上下文内容信息. 解编码结构逐步重构空间信息来 ...
- ASP.NET页面之间传值的方式之Session(个人整理)
Session Session在ASP.NET中,表示客户端(Goggle,Firefox,IE等)与服务器端的会话,用来存储特定会话信息,准确来说,是用来存储特定用户信息.当客户端向服务器发送一个请 ...
- Java访问修饰符(访问控制符)
Java 通过修饰符来控制类.属性和方法的访问权限和其他功能,通常放在语句的最前端.例如: public class className { // body of class } private bo ...
- 【Spark-core学习之四】 Spark任务提交
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...