php环行队列实现,java数组实现队列及环形队列实现过程解析

这篇文章主要介绍了java数组实现队列及环形队列实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

代码内容

ArrayQueue---用数组实现队列

package com.structure;

import java.util.Scanner;

/**

* @auther::9527

* @Description: 数组模拟队列

* @program: jstl2

* @create: 2019-10-05 08:58

*/

public class ArrayQueueDemo {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

//测试

ArrayQueue queue = new ArrayQueue(3);

char key = ' '; //接受用户输入

boolean loop = true; //循环终止判断器

while (loop) {

System.out.println("s(show):显示队列");

System.out.println("(e(exit)):退出程序");

System.out.println("a(add):添加数据到队列");

System.out.println("g(get):从队列取出数据");

System.out.println("h(head):查看队列头部的数据");

System.out.println("按提示输入......");

key = scanner.next().charAt(0); //接收数据

switch (key) {

case 's':

queue.showQueue();

break;

case 'a':

System.out.println("请输入一个数");

int value = scanner.nextInt();

queue.addQueue(value);

break;

case 'g':

try {

int res = queue.getQueue();

System.out.printf("取出的数是%d\n", res);

} catch (Exception e) {

System.out.println(e.getMessage());

}

break;

case 'h':

try {

int res = queue.headQueue();

System.out.printf("队列头部的数是%d\n", res);

} catch (Exception e) {

System.out.println(e.getMessage());

}

break;

case 'e':

scanner.close();

loop = false;

break;

default:

System.out.println("...输入不合法,请重新输入...");

break;

}

}

System.out.println("程序退出....");

}

}

//使用数组模拟队列--编写一个ArrayQueue

class ArrayQueue {

private int maxSize; //数组的最大容量

private int front; //队列头

private int rear; //队列尾

private int[] arr; //存放数据的数组,模拟队列.

//创建队列的构造器

public ArrayQueue(int arrMaxSize) {

maxSize = arrMaxSize;

arr = new int[maxSize];

front = -1;

rear = -1;

}

//判断队列是否已经满了

public boolean isFull() {

return rear == maxSize - 1;

}

//判断队列是否为空

public boolean isEmpty() {

return rear == front;

}

//添加数据到队列

public void addQueue(int n) {

//判断队列是否已满

if (isFull()) {

System.out.println("队列已满,不能添加");

return;

}

rear++; //指针后移

arr[rear] = n;

}

//数据出队列

public int getQueue() {

//判断队列是否为空

if (isEmpty()) {

throw new RuntimeException("队列为空,不能取数据");

}

front++; //头部指针后移

return arr[front];

}

//显示队列的所有数据

public void showQueue() {

if (isEmpty()) {

System.out.println("队列为空,没有数据");

return;

}

for (int i = 0; i < arr.length; i++) {

System.out.printf("arr[%d]=%d\n", i, arr[i]);

}

}

//显示队列的头部数据,这个不是取出数据

public int headQueue() {

//判断是否为空

if (isEmpty()) {

System.out.println("队列为空,没有数据....");

throw new RuntimeException("队列为空,没有数据....");

}

return arr[front + 1];

}

}

改进版---环形队列:

环形队列代码

package com.structure;

import java.util.Scanner;

/**

* @auther::9527

* @Description: 环形队列

* @program: jstl2

* @create: 2019-10-05 09:53

*/

public class CircleArrayQueueDemo {

public static void main(String[] args) {

//创建一个环形队列 这里输入最大数是4,其实有效的是3

CircleArray queue = new CircleArray(4);

char key = ' '; // 接收用户输入

Scanner scanner = new Scanner(System.in);//

boolean loop = true;

// 输出一个菜单

while (loop) {

System.out.println("s(show): 显示队列");

System.out.println("e(exit): 退出程序");

System.out.println("a(add): 添加数据到队列");

System.out.println("g(get): 从队列取出数据");

System.out.println("h(head): 查看队列头的数据");

key = scanner.next().charAt(0);// 接收一个字符

switch (key) {

case 's':

queue.showQueue();

break;

case 'a':

System.out.println("输出一个数");

int value = scanner.nextInt();

queue.addQueue(value);

break;

case 'g': // 取出数据

try {

int res = queue.getQueue();

System.out.printf("取出的数据是%d\n", res);

} catch (Exception e) {

// TODO: handle exception

System.out.println(e.getMessage());

}

break;

case 'h': // 查看队列头的数据

try {

int res = queue.headQueue();

System.out.printf("队列头的数据是%d\n", res);

} catch (Exception e) {

// TODO: handle exception

System.out.println(e.getMessage());

}

break;

case 'e': // 退出

scanner.close();

loop = false;

break;

default:

break;

}

}

System.out.println("程序退出~~");

}

}

class CircleArray {

private int maxSize; //数组的最大容量

//front 变量调整:front就指向队列的第一个元素,即:arr[front]=arr[0]

private int front;

//rear 变量调整:rear 初始值为0 指向队列的最后一个元素的位置,因为需要空出一个位置作约束

private int rear;

private int[] arr;

//构造器

public CircleArray(int arrMaxSize) {

maxSize = arrMaxSize;

arr = new int[maxSize];

}

//判断队列是否已满

public boolean isFull() {

return (rear + 1) % maxSize == front;

}

//判断队列是否为空

public boolean isEmpty() {

return rear == front;

}

//添加数据到队列

public void addQueue(int n) {

//判断队列是否已满

if (isFull()) {

System.out.println("队列已满,不能添加数据");

return;

}

//直接加入数据

arr[rear] = n;

//rear 后移,后移的时候,要通过取模来实现环形后移

rear = (rear + 1) % maxSize;

}

//获取队列的数据,出队列

public int getQueue() {

if (isEmpty()) {

throw new RuntimeException("队列为空,不能取数据");

}

//由于front是指向队列的第一个元素,所以需要

// 1、front的值先保存到临时变量

//2、将front后移一位,通过取模实现环形后移,

// 3、将临时变量返回

int temp = arr[front];

front = (front + 1) % maxSize;

return temp;

}

//显示队列的所有数据

public void showQueue() {

if (isEmpty()) {

System.out.println("队列为空,没有数据~");

return;

}

//遍历环形队列....这里有个小技巧,需要记住

for (int i = front; i < front + size(); i++) {

System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);

}

}

//求出当前队列有效数据的个数

public int size() {

return (rear + maxSize - front) % maxSize;

}

//显示队列的头部数据

public int headQueue(){

//判断是否为空

if (isEmpty()){

throw new RuntimeException("队列为空,没有数据");

}

return arr[front];

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/567906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++混淆点-static关键字理解

.先来介绍它的第一条也是最重要的一条&#xff1a;隐藏。&#xff08;static函数&#xff0c;static变量均可&#xff09; 当同时编译多个文件时&#xff0c;所有未加static前缀的全局变量和函数都具有全局可见性。 举例来说明。同时编译两个源文件&#xff0c;一个是a.c&…

php分页代码 页数太多,php分页函数示例代码分享

一例php分页函数代码。分享一例php分页函数代码&#xff0c;用此函数实现分页代码很不错。代码&#xff0c;php分页函数。/** 使用方法&#xff1a;require_once(mypage.php);$resultmysql_query("select * from mytable", $myconn);$totalmysql_num_rows($result); …

C++基础02-C++对c的拓展

变量名实质上是一段连续存储空间的别名&#xff0c;是一个标号(门牌号) 通过变量来申请并命名内存空间. 通过变量的名字可以使用存储空间. 变量名&#xff0c;本身是一段内存的引用&#xff0c;即别名(alias). 引用可以看作一个已定义变量的别名。 引用的语法&#xff…

matlab在电力系统故障的应用,MATLAB在电力系统故障分析中的应用

第5章MATLAB在电力系统故障分析中的仿真实例 5 1无穷大功率电源供电系统三相短路仿真5 2同步发电机突然短路的暂态过程仿真5 3小电流接地系统单相故障 5 1无穷大功率电源供电系统三相短路仿真 5 1 1无穷大功率电源供电系统三相短路的暂态过程5 1 2无穷大功率电源供电系统仿真模…

C++基础03-C++对c的拓展-函数

一、内联函数 c 语言中有宏函数的概念。宏函数的特点是内嵌到调用代码中去,避免了函数调用 的开销。但是由于宏函数的处理发生在预处理阶段,缺失了语法检测 和有可能带来的语 意差错。 特点&#xff1a; 1&#xff09;内联函数声明时inline关键字必须和函数定义结合在一起&a…

php小程序onload,微信小程序 loading 组件实例详解

这篇文章主要介绍了微信小程序 loading 组件实例详解的相关资料,需要的朋友可以参考下loading通常使用在请求网络数据时的一种方式&#xff0c;通过hidden属性设置显示与否主要属性&#xff1a;wxml显示loading正在加载jsPage({data:{// text:"这是一个页面"hiddenLo…

机器学习之实验过程02

机器学习之实验过程-数据清理 from sklearn.model_selection import train_test_split from sklearn.metrics import mean_squared_errordata_path = /home/py/Work/机器学习/labs/data/Feedback.csv df = pd.read_csv(data_path) df.head() print (df.tail()) rename_pai…

C++基础04-类基础

一、类和对象 面向对象三大特点&#xff1a;封装、继承、多态。 struct 中所有行为和属性都是 public 的(默认)。C中的 class 可以指定行为和属性的访问方式。 封装,可以达到,对内开放数据,对外屏蔽数据,对外提供接口。达到了信息隐蔽的功能。 class 封装的本质,在于将数…

matlab 矩阵位移法编程 结构力学,matlab 矩阵位移法编程 结构力学

矩阵位移法编程大作业(091210211)一、编制原理本程序的原理是基于结构力学矩阵位移法原理&#xff0c;以结构结点位移作基本未知量&#xff0c;将要分析的结构拆成已知节点力—结点力位移关系的单跨梁集合&#xff0c;通过强令结构发生待定的基本未知位移&#xff0c;在各个单跨…

C++混淆点-构造函数参数

#include<iostream> using namespace std;class Test { public://Test(int x, int y) { //或者将形参名不要等于数据成员名// //x x; //自赋值 错误// //y y;// this->x x; //正确 形参a屏蔽了成员变量a&#xff0c;所以必须用this指针索引&#xff0c;这样程序直…

php 静态页面模板类,dedetag.class.php 静态模板类

类文件include/dedetag.class.php这个文件是dedecms V5.3及之前版本使用的主要的模板类&#xff0c;它是解析式模板类&#xff0c;并非编译式的(区别是前者通过获得标签位置进行内容替换&#xff0c;后者是直接解析式PHP代码&#xff0c;二次执行)一、模板语法织梦模板引擎是一…

C/C++混淆点-字符串指针

c语言中没有字符串的类型&#xff0c; 所以对字符串操作&#xff0c;有两种形式:可以用字符指针&#xff0c;或者字符串数组&#xff08;这里的指针变量c, 系统会为其重新分配内存) &#xff08;1&#xff09;用字符数组存放一个字符串 char string[]"Linux C"; pri…

python 文件上传下载,python实现上传下载文件功能

最近刚学python,遇到上传下载文件功能需求&#xff0c;记录下&#xff01;django web项目&#xff0c;前端上传控件用的是uploadify。文件上传 - 后台view 的 Python代码如下&#xff1a;csrf_exemptrequire_http_methods(["POST"])def uploadFiles(request):try:use…

C++基础05-类构造函数与析构函数

总结&#xff1a; 1、类对象的作用域为两个{}之间。在遇到}后开始执行析构函数 2、当没有任何显式的构造函数&#xff08;无参&#xff0c;有参&#xff0c;拷贝构造&#xff09;时&#xff0c;默认构造函数才会发挥作用 一旦提供显式的构造函数&#xff0c;默认构造函数不复…

PHP网站配置项,Thinkphp5通用网站后台配置项的动态添加及更新

一、引入无论平时我们自己制作&#xff0c;还是浏览别人的网站&#xff0c;它都具有其相应的一些共用的、通用的属性&#xff0c;比如&#xff1a;网站的名字&#xff0c;关键字、备案号、分页数量、是否开启缓存等信息。一些网站可能将配置项写死在后台&#xff0c;无法动态更…

C++基础06-类与对象之new和malloc

1、C和C动态分配内存区别&#xff1a; 在C语言中是利用库函数malloc和free来分配和撤销内存空间的。 C提供了较简便而功能较强的运算符new和delete来取代 malloc和free函数。 new和delete是运算符&#xff0c;不是函数&#xff0c;因此执行效率高。 2、new和delete的用法 &l…

php获取数组中的全部可以吗,php获取数组中所有值的方法

php的数组操作函数array_values 可以提取一个数组中所有元素值&#xff0c;具体的使用方法&#xff0c;可以参考下面的教程。array_values() 函数的作用是返回数组中所有元素的值&#xff0c;使用起来非常简单&#xff0c;只有一个必选参数&#xff0c;就可以返回一个包含给定数…

C++基础07-类之静态成员变量和成员函数

总结&#xff1a; 1、静态数据成员和静态成员函数属于整个类而不是某个对象 即使没有定义对象&#xff0c;静态成员也是存在的 2、static 成员类外存储,求类大小,并不包含在内。 &#xff08;因为存储在全局区&#xff0c;而类一般存储在栈区&#xff09; 3、静态数据成员在…

oracle 查询cpu 100%,Oracle 11g中查询CPU占有率高的SQL

oracle版本&#xff1a;oracle11g背景&#xff1a;今天在Linux中的oracle服务上&#xff0c;运用top命令发现许多进程的CPU占有率是100%。操作步骤&#xff1a;以进程PID:7851为例执行以下语句&#xff1a;方法一&#xff1a;(1)通过PID&#xff0c;查得相对应的系统进程对应的…

C++基础08-this指针-const修饰成员函数-函数返回引用/值

一、this指针 1、C类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效&#xff01; 2、C中类的普通成员函数都隐式包含一个指向当前对象的this指针。 3、静态成员函数、成员变量属于类 4、静态成员函数与普通成员函数的区别 静态成员函数不包含指…