旗下导航:搜·么
当前位置:网站首页 > JAVA教程 > 正文

java中运用数组完成环形行列【JAVA教程】,java,数组,实现,环形队列

作者:搜教程发布时间:2019-12-02分类:JAVA教程浏览:46评论:0


导读:思绪剖析:1.front变量的寄义做一个调解:front就指向行列的第一个元素,也就是说arr[front]就是行列的第一个元素front的初始值...

思绪剖析:

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网别的相干文章!

标签:java数组实现环形队列


欢迎 发表评论: