java算法-单向队列
队列是一种:先进先出,后进后出的数据结构
单项队列: 从前面删除元素,从后面插入元素,跟现实中排队是一样的道理
这里我们用指针移动位置的方法。因为数组删除元素,如果我们要跟现实中排队效果一样,就需要移动数组,很浪费时间和空间。
所以:
>添加元素时,当尾部到达数组末尾的时候,我们就把他指向头部
>删除元素时,当头部到达数组末尾的时候,我们就把头部重置,即指向0
package com.ghostwu; class Queue { private Object[] queueArr;
private int maxSize; //总大小
private int front; //头
private int rear; //尾
private int realNums; //队列真实长度 public Queue( int _n ){
maxSize = _n;
queueArr = new Object[maxSize];
front = 0;
rear = -1;
realNums = 0;
} public void append( int value ){
if( isFull() ){
System.out.println( "队列满了" );
}else {
if( rear == maxSize - 1 ){ //尾部满了,把指针指到头部
rear = -1;
}
queueArr[++rear] = value;
realNums++;
}
} public Object shift(){
Object value = null;
if( !isEmpty() ){
value = peekFront();
queueArr[front] = null;
front++;
if( front == maxSize ){
front = 0;
}
realNums--;
}
return value;
} public Object peekFront(){
return queueArr[front];
} public boolean isFull(){
return realNums == maxSize;
} public boolean isEmpty(){
return realNums == 0;
} public int getSize(){
return realNums;
} public void print(){
for( int i = 0; i < queueArr.length; i++ ){
System.out.print( queueArr[i] + "\t" );
}
}
} public class MyQueue { public static void main(String[] args) { Queue q = new Queue( 5 );
q.append( 10 );
q.append( 20 );
q.append( 30 );
q.append( 40 );
q.append( 50 ); System.out.println( q.peekFront() );
System.out.println( q.getSize() );
q.shift();
System.out.println( q.peekFront() );
q.print();
q.append( 100 );
q.append( 200 );
} }
java算法-单向队列的更多相关文章
- java算法--普通队列
数据结构队列 首先明确一下队列的概念. 队列是一种有序列表,使用数组的结构来存储队列的数据. 队列是一种先进先出的算法.由前端加入,由后端输出. 如下图: 第一个图 第二个图 第三个图 这就是队列 ...
- java算法--循环队列
循环队列 我们再用队列得时候不知道发没发现这样一个问题. 这是一个只有三个位置得队列,在进行三次加入(addqueue)操作和三次取出(get)操作之后再进行加入操作时候的样子.明显可以看到,队列已经 ...
- Java数据结构和算法(二)--队列
上一篇文章写了栈的相关知识,而本文会讲一下队列 队列是一种特殊的线性表,在尾部插入(入队Enqueue),从头部删除(出队Dequeue),和栈的特性相反,存取数据特点是:FIFO Java中queu ...
- Java实现 蓝桥杯 算法提高 队列操作
算法提高 队列操作 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 队列操作题.根据输入的操作命令,操作队列(1)入队.(2)出队并输出.(3)计算队中元素个数并输出. 输入格式 ...
- Java多线程 阻塞队列和并发集合
转载:大关的博客 Java多线程 阻塞队列和并发集合 本章主要探讨在多线程程序中与集合相关的内容.在多线程程序中,如果使用普通集合往往会造成数据错误,甚至造成程序崩溃.Java为多线程专门提供了特有的 ...
- java-Enumeration,单向队列Queue及双向队列Deque等容器简单使用
1.Enumeration容器使用: package com.etc; import java.util.Enumeration; import java.util.Vector; /* Enumer ...
- 【java多线程】队列系统之说说队列Queue
转载:http://benjaminwhx.com/2018/05/05/%E8%AF%B4%E8%AF%B4%E9%98%9F%E5%88%97Queue/ 1.简介 Queue(队列):一种特殊的 ...
- java算法--稀疏数组
数据结构必要知识 线性结构 线性结构是最常用的数据结构,数据元素之间存在一对一的线性关系. 线性结构有两种不同的存储结构,即顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是 ...
- Java集合--阻塞队列及各种实现的解析
阻塞队列(Blocking Queue) 一.队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIF ...
随机推荐
- 使用C++版本Mxnett进行预测的注意事项
现在越来越多的人选择Mxnet作为深度学习框架,相应的中文社区非常活跃,而且后面推出的gluon以及gluoncv非常适合上手和实验,特别是gluoncv中提供了非常多.非常新的预训练model zo ...
- react-native 项目初始化
react-native 项目初始化 搭建java,android,node环境 http://www.cnblogs.com/morang/p/react-native-java-build.htm ...
- 快速找出网站中可能存在的XSS漏洞实践(一)
一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...
- Redis 配置内容总结
命令 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf. 你可以通过 CONFIG 命令查看或设置配置项. (1)config get config_setting_ ...
- Kubernetes 笔记 01 初识 Kubernetes 新时代的领航者
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 大明王朝时期, ...
- 写了2年python,知道 if __name__ == '__main__' 什么意思吗?
相信刚接触Python的你一定有过如此经历,把所有的代码都写在 if __name__ == '__main__'下,因为有人告诉你,这样比较符合 Pythonista 的代码风格. 殊不知这段代码的 ...
- JavaScript之Promise学习笔记
一直想知道Promise到底是怎么实现的,网上一搜几十篇文章,看的一脸蒙蔽.最后算是找到几个讲的真心很详细明了的.看了一份源码看了很久很久……最后找大佬问了几处看不懂的地方,大佬只看了十几分钟就看懂了 ...
- Intellij IDEA神器居然还有这些小技巧
概述 Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜.出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intel ...
- 课程五(Sequence Models),第三周(Sequence models & Attention mechanism) —— 0.Practice questions:Sequence models & Attention mechanism
- MFC控件GDI编程
MFC控件GDI编程 一丶学习内容 1.了解常用的GDI函数绘图. 2.使用常用的画笔画刷. 二丶常用的GDI函数绘图 上方则为我们常用的GDI函数了. 画线 矩形. 以及圆 等等. 2.1 画线代码 ...