0
点赞
收藏
分享

微信扫一扫

Java数据结构——队列(数组)

树下的老石头 2022-01-16 阅读 63

一言以蔽之

银行排队,从头出,从尾巴进。

数组特征

  • 最大数量:满了再进,报异常。
  • 数组长度:够用即可。
  • 头部:从此处取数据。
  • 尾部:从此处加数据。

状态

  • 空列:头=尾
  • 满列:尾-头>=最大数量

入队列

判满,报异常。
加入尾部,尾部指针后移。

出队列

判空,报异常。
取出头部,头部指针后移。

数组实现的特点

会慢慢往后移动。

属性设计

public class ArrayQueue {
	private final Integer maxSize = 5;
	private Integer bottom = 0;
	private Integer top = 0;
	private String[] arr = new String[24];

}

判断空列or满列

public Boolean isFull() {
	return top - bottom >= maxSize;
}

public Boolean isEmpty() {
	return top.equals(bottom);
}

入列出列

public ArrayQueue addOne(String s) {
	if (isFull()) {
		throw new RuntimeException("满啦");
	}
	arr[top] = s;
	top++;
	return this;
}

public String removeOne() {
	if (isEmpty()) {
		throw new RuntimeException("没啦");
	}
	String s = arr[bottom];
	arr[bottom] = null;
	bottom++;
	return s;
}

全部代码

public class ArrayQueue {
	private final Integer maxSize = 5;
	private Integer bottom = 0;
	private Integer top = 0;
	private final String[] arr = new String[24];

	public static void main(String[] args) {
		fun4();
	}

	//入6
	public static void fun1() {
		ArrayQueue queue = new ArrayQueue();
		System.out.println("初始" + queue);
		queue.addOne("A").addOne("B").addOne("C").addOne("D").addOne("E").addOne("F");
		System.out.println("入六" + queue);
	}

	//空出
	public static void fun2() {
		ArrayQueue queue = new ArrayQueue();
		System.out.println("初始" + queue);
		System.out.println(queue.removeOne());
		System.out.println("出一" + queue);
	}

	//入5出5
	public static void fun3() {
		ArrayQueue queue = new ArrayQueue();
		System.out.println("初始" + queue);
		queue.addOne("A").addOne("B").addOne("C").addOne("D").addOne("E");
		System.out.println("入五" + queue);
		System.out.println(queue.removeOne());
		System.out.println(queue.removeOne());
		System.out.println(queue.removeOne());
		System.out.println(queue.removeOne());
		System.out.println(queue.removeOne());
		System.out.println("出五" + queue);
	}

	//入1出1,重复10遍
	public static void fun4() {
		ArrayQueue queue = new ArrayQueue();
		System.out.println("初始" + queue);
		System.out.println(queue.addOne("A"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("B"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("C"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("D"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("E"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("F"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("G"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("H"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("I"));
		System.out.println(queue.removeOne());
		System.out.println(queue.addOne("J"));
		System.out.println(queue.removeOne());
		System.out.println("结果" + queue);
	}

	@Override
	public String toString() {
		return "ArrayQueue{maxSize=" + maxSize + ", bottom=" + bottom + ", top=" + top + "}\n" + Arrays.toString(arr);
	}

	public Boolean isFull() {
		return top - bottom >= maxSize;
	}

	public Boolean isEmpty() {
		return top.equals(bottom);
	}

	public ArrayQueue addOne(String s) {
		if (isFull()) {
			throw new RuntimeException("满啦");
		}
		arr[top] = s;
		top++;
		return this;
	}

	public String removeOne() {
		if (isEmpty()) {
			throw new RuntimeException("没啦");
		}
		String s = arr[bottom];
		arr[bottom] = null;
		bottom++;
		return s;
	}
}

测试:满了入列

在这里插入图片描述

测试:空了出列

在这里插入图片描述

测试:入5出5

在这里插入图片描述

测试:边入边出,10次

在这里插入图片描述

举报

相关推荐

0 条评论