IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java 数组实现循环链表 -> 正文阅读

[数据结构与算法]java 数组实现循环链表

实现循环链表的难点在于, 当front和rear指向同一个位置时,这代表的是队空还是队满呢?

解决这种问题的常见做法是这种:

方法一 : 使用一标记,用以区分这样的易混淆的情形, 重新定义一个变量, 用于存储队列中数据个数。

方法二 : 牺牲一个元素空间。当front和rear相等时,为空。当rear的下一个位置是front时。为满


?代码实现 :?

package dataStructure.circleArray;

import java.lang.reflect.Array;

/**
 * @author hctrl
 * @date 2021/8/12 20:14
 */
public class CircleArray<T> {


	private Integer size;

	private Integer front;

	private Integer rear;

	private T[] arr;


	public CircleArray(Class<T> type, int length) {
		this.size = length;
		arr = (T[]) Array.newInstance(type, length);
		front = 0;
		rear = 0;
	}

	//判断数组是否满了
	public boolean isFull() {

		
		return (rear + 1) % size == front;
	}

	//判断数组是否为空
	public boolean isEmpty() {
		return front == rear;
	}

	//入队列
	public void push(T t) {

		//判断队列是否已经满了
		if (isFull()) {
			System.out.println("队列已经满了===========");
			return;
		}

		arr[rear] = t;
		rear = (rear + 1) % size;

	}

	//出队列
	public void poll() {

		System.out.println(arr[front]);

		if (isEmpty()) {
			System.out.println("队列为空=====================");
			return;
		}

		front = (front + 1) % size;

	}

	//查看队列中的全部元素  (rear + maxSize - front) % maxSize
	public void showAll() {

		int count = (rear + size - front) % size;
		for (int i = front; i < front + count; i++) {
			System.out.printf("arr[%d] = %d\n", i % size, arr[i % size]);
		}

	}

}

?测试类 :?

package dataStructure.circleArray;

import java.util.Scanner;

/**
 * @author hctrl
 * @date 2021/8/12 20:14
 */
public class CircleArrayTest {


	public static void main(String[] args) {

		CircleArray<Integer> circleArray = new CircleArray<>(Integer.class,7);
		boolean loop = true;

		while (loop){

			System.out.println("=======================================================");
			System.out.println("push: 入队");
			System.out.println("poll: 出队");
			System.out.println("show: 查看全部数据");
			System.out.println("=======================================================");

			Scanner scanner = new Scanner(System.in);
			String choose = scanner.next();
			switch (choose){

				case "push":
					System.out.println("请输入入队的数据==============");
					Scanner scanner1 = new Scanner(System.in);
					int i = scanner1.nextInt();
					circleArray.push(i);
					break;
				case "poll":
					circleArray.poll();
					break;
				case "show":
					circleArray.showAll();
					break;
				default:
					loop = false;
					break;
			}
		}

	}

}

?

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-13 12:32:05  更:2021-08-13 12:33:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:42:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码