学编程 ❀(๑╯◡╰๑)❀ 就上soxunxi.cn!这里有CMS,CSS,NET,PHP,Linux,HTML,JAVA,MySQL,Python等教程.
当前位置: JAVA > java中运用数组完成环形行列【JAVA教程】,java,数组,实现,环形队列

思绪剖析:

1. front 变量的寄义做一个调解: front 就指向行列的第一个元素, 也就是说 arr[front] 就是行列的第一个元素

front 的初始值 = 0

2. rear 变量的寄义做一个调解:rear 指向行列的末了一个元素的后一个位置. 由于愿望空出一个空间做为商定

rear 的初始值 = 0

3. 当行列满时,前提是 (rear + 1) % maxSize == front 【满】

4.行列为空的前提, rear == front 空

5. 当我们如许剖析, 行列中有用的数据的个数 (rear + maxSize - front) % maxSize // rear = 1 front = 0

6. 我们就能够在本来的行列上修正获得,一个环形行列

java相干视频教程分享:java进修视频

代码完成:

import java.util.Scanner;
public class CircleArrayQueueDemo {
	public static void main(String[] args) {
		//测试一把
		System.out.println("测试数组模仿环形行列的案例~~~");
		// 建立一个环形行列
		CircleArray queue = new CircleArray(4); //申明设置4, 其行列的有用数据最大是3
		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] 就是行列的第一个元素 
	//front 的初始值 = 0
	private int front; 
	//rear 变量的寄义做一个调解: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 value = arr[front];
		front = (front + 1) % maxSize;
		return value;
	}
	// 显现行列的一切数据
	public void showQueue() {
		// 遍历
		if (isEmpty()) {
			System.out.println("行列空的,没有数据~~");
			return;
		}
		// 思绪:从front入手下手遍历,遍历多少个元素
		for (int i = front; i < front + size() ; i++) {
			System.out.printf("arr[%d]=%d\n", i % maxSize, arr[i % maxSize]);
		}
	}
	// 求出当前行列有用数据的个数
	public int size() {
		// rear = 2
		// front = 1
		// maxSize = 3 
		return (rear + maxSize - front) % maxSize;   
	}
	// 显现行列的头数据, 注重不是掏出数据
	public int headQueue() {
		// 推断
		if (isEmpty()) {
			throw new RuntimeException("行列空的,没有数据~~");
		}
		return arr[front];
	}
}

相干文章教程分享:java疾速入门

以上就是java中运用数组完成环形行列的细致内容,更多请关注ki4网别的相干文章!

「梦想一旦被付诸行动,就会变得神圣,如果觉得我的文章对您有用,请帮助本站成长」

分享到:
赞(0) 打赏

支付宝扫一扫打赏

微信扫一扫打赏

上一篇:

下一篇:

相关推荐

0 条评论关于"java中运用数组完成环形行列【JAVA教程】,java,数组,实现,环形队列"

最新评论

    暂无留言哦~~

博客简介

看古风美女插画Cos小姐姐,素材合集图集打包下载:炫龙网,好看二次元插画应有尽有,唯美小姐姐等你来。

友情链接

他们同样是一群网虫,却不是每天泡在网上游走在淘宝和网游之间、刷着本来就快要透支的信用卡。他们或许没有踏出国门一步,但同学却不局限在一国一校,而是遍及全球!申请交换友链

服务热线:
 

 QQ在线交流

 旺旺在线