算法——Java实现队列
顺序队列:
概念:
队列是一种先进先出的线性表,只允许在一端插入,另一端删除。允许插入的一端称为队尾,允许删除的一端称为队头
顺序队列的实现:
import org.junit.jupiter.api.Test; /**
* 顺序队列
* @author wydream
*
*/ public class QueueSequence { private String[] arr;//队列数组
private int end=0;//队尾标志 //向队列中添加元素
public void push(String[] arr,String value) {
if(end<arr.length) {
arr[end]=value;
end++;
return;
}else {
System.out.println("队列已经满了");
return;
} } //取出队列元素
public String pop(String[] arr) {
String rs;
if(arr[0]==null) {
System.out.println("队列为空,请先向队列中添加元素");
return null;
}else {
rs=arr[0];
arr[0]=null;
move(arr);
return rs;
}
} //队列元素向前移动
public void move(String[] arr) {
for(int i=0;i<arr.length-1;i++) {
if(arr[i+1]!=null) {
arr[i]=arr[i+1];
}else{
arr[i]=null;
break;
}
}
} @Test
public void test() {
String[] arr=new String[10];
push(arr,"北京");
push(arr,"上海");
push(arr,"广东");
push(arr,"杭州");
push(arr,"苏州");
push(arr,"扬州");
pop(arr);
pop(arr);
pop(arr);
pop(arr);
} }
循环队列:
概念:
- 顺序队列的不足:顺序队列在进行插入操作时,直接在队尾插入就可以,此时时间复杂度为O(1),但是在出列是在队头,即下标为0的位置,也就意味着队列中所有的元素都得向前移动,此时时间复杂度为0(n),效率较低。
- 队列出列时不需要所有的元素都移动,引入两个指针即可,一个头指针front指向队头元素,一个尾指针rear指向队尾元素,此时队列出列只需移动指针即可。但是此种情况下会出现一种溢出情况(如下图),此时队列中任然是有空间的可以存放元素的,但是尾指针已经溢出,于是就有了循环队列。
- front指向队头,rear指向队尾的下一个位置;队为空的判断:front==rear;队为满的判断:(rear+1)%MAXSIZE==front
实现循环队列:
/**
* java实现循环队列
* @author wydream
*
*/ import org.junit.jupiter.api.Test; public class QueueArray { Object[] arr=new Object[10];;//对象数组,队列最多存储a.length-1个对象
int front=0;//队首下标
int rear=0;//队尾下标 /**
* 将一个对象追加到队列尾部
*/
public boolean enqueue(Object obj) {
if((rear+1)%arr.length==front) {
return false;
}
arr[rear]=obj;
rear=(rear+1)%arr.length;
return true; } //出队列
public Object dequeue() {
if(rear==front) {
return null;
}
Object obj=arr[front];
front=(front+1)%arr.length;
return obj;
} @Test
public void test() {
QueueArray q=new QueueArray();
System.out.println(q.enqueue("北京"));
System.out.println(q.enqueue("上海"));
System.out.println(q.enqueue("广东"));
System.out.println(q.enqueue("深圳"));
for(int i=0;i<4;i++){
System.out.println(q.dequeue());
}
} }
算法——Java实现队列的更多相关文章
- 数据结构与算法Java描述 队列
package com.cjm.queue; /** * 数据结构与算法Java实现 队列 * * @author 小明 * */ public class Myqueue { private Nod ...
- Java数据结构和算法 - 栈和队列
Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...
- 无向图的最短路径算法JAVA实现
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
- 无向图的最短路径算法JAVA实现(转)
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
- Java并发指南11:解读 Java 阻塞队列 BlockingQueue
解读 Java 并发队列 BlockingQueue 转自:https://javadoop.com/post/java-concurrent-queue 最近得空,想写篇文章好好说说 java 线程 ...
- 解读 java 并发队列 BlockingQueue
点击添加图片描述(最多60个字)编辑 今天呢!灯塔君跟大家讲: 解读 java 并发队列 BlockingQueue 最近得空,想写篇文章好好说说 java 线程池问题,我相信很多人都一知半解的,包括 ...
- 10分钟搞定 Java 并发队列好吗?好的
| 好看请赞,养成习惯 你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it ...
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- 快速排序算法 java 实现
快速排序算法 java 实现 快速排序算法Java实现 白话经典算法系列之六 快速排序 快速搞定 各种排序算法的分析及java实现 算法概念 快速排序是C.R.A.Hoare于1962年提出的一种划分 ...
随机推荐
- 通过bat文件 进行mysql 连接 或者 操作涉及 密码的,如果密码 中有 % 号的话要特殊处理
比如我想在bat文件中进行一个数据库的连接 或者进行一个数据库中的 数据 导入或者导出(mysqldump) 这样子都会用到数据库密码, 假如这个数据库的密码 中又有 % 的话就要特殊转义一下才行执行 ...
- EL表达式 -- 比较不错
EL表达式 EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有E ...
- 复习python的__call__ __str__ __repr__ __getattr__函数 整理
class Www: def __init__(self,name): self.name=name def __str__(self): return '名称 %s'%self.name #__re ...
- Daily Scrum 1/7/2015
Process: Zhaoyang: Do some code intergration and test the total feature in the IOS APP. Yandong: Cod ...
- Java - window下环境配置
JDK下载 官网:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html 百度网盘: 链接:https://pan.ba ...
- C - Long Beautiful Integer codeforces 1269C 构造
题解: 这里的m一定是等于n的,n为数最大为n个9,这n个9一定满足条件,根据题目意思,前k个一定是和原序列前k个相等,因此如果说我们构造出来的大于等于原序列,直接输出就可以了,否则,由于后m-k个一 ...
- C. Beautiful Regional Contest
用前缀和写一直wa.. 思路:让金牌和银牌最少,通多增加铜牌的方式来扩大总奖牌的个数. #include<bits/stdc++.h> using namespace std; map&l ...
- 数据结构与算法--堆(heap)与栈(stack)的区别
堆和栈的区别 在C.C++编程中,经常需要操作的内存可分为以下几个类别: 栈区(stack):由编译器自动分配和释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈. 堆区(heap ...
- 详解 NIO流
在观看本篇博文前,建议先观看本人博文 -- <详解 IO流> NIO流: 首先,本人来介绍下什么是NIO流: 概述: Java NIO ( New IO )是从 Java 1.4 版本开始 ...
- 详解 缓冲区(Buffer 抽象类)
在本篇博文中,本人主要讲解NIO 的两个核心点 -- 缓冲区(Buffer) 和 通道 (Channel)之一的 缓冲区(Buffer), 有关NIO流的其他知识点请观看本人博文<详解 NIO流 ...

