[数据结构]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则不会出错但少了 ...
随机推荐
- Web开发——jQuery基础
参考: 参考W3School:jQuery 教程 参考:jQuery 参考手册 参考(常用):jQuery API 测试 JavaScript 框架库 - jQuery 测试 JavaScript 框 ...
- Hibernate 补充 ManyToOne、OneToMany、OneToOne的使用例
1.前言 Hibernate 为程序员提供一种级联操作,在编写程序时,通过 Hibernate 的级联功能可以很方便的操作数据库的主从表的数据, 我们最常用的级联是级联保存和级联删除. ...
- Mac 报错:-bash: telnet: command not found
解决方法 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/i ...
- java框架之Spring(3)-JDBC模板使用&事务管理
下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...
- #WEB安全基础 : HTTP协议 | 0x1 TCP/IP通信
TCP/IP是如何通信的呢? 请看图 用TCP/IP协议族通信时,会通过分层顺序与对方进行通信.发送端从应用层往下走,接受层从链路层往上走. 客户端为了浏览界面在应用层发送请求,为了方便传输在传输层的 ...
- sql 身份证计算年龄和性别
IdentityNumber 是身份证号 年龄: ,), GETDATE()) / 365.25) as '推荐人年龄', 15位的身份证计算年龄: case when b.IdentityNumbe ...
- Kubernetes持久化存储1——示例
目录贴:Kubernetes学习系列 一.简介 存储管理与计算管理是两个不同的问题.Persistent Volume子系统,对存储的供应和使用做了抽象,以API形式提供给管理员和用户使用.要完成这一 ...
- Python工资高还是Java?
说起来,随着人工智能和大数据逐渐进入人们的眼中,越来越多的人看到互联网未来大好发展趋势,而想要学习一门技术来进入其中,以期分一杯羹.但是,作为人工智能和大数据的重要编程语言,Python和Java,该 ...
- koa2 中 cookie 存在的中文问题
koa2 中的 cookie 没办法直接设置中文,会报错 ‘ argument value is invalid ’ 解决办法: 先将它转成 ‘ base64 ’ 编码来存储 new Buffer( ...
- ts文件编译后变量在vscode里报错
需要将编译过的同名js文件删除才可以