Java 队列模拟
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 队列模拟,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2647字,纯文字阅读大概需要4分钟。
内容图文
队列介绍:
队列是一个有序列表,可以用数组(顺序存储)或是链表(链式存储)来实现
遵循先进先出原则
加数据在队列尾部加,取数据在队列头部取
模拟:
队列有一个指向队首的变量,一个指向队尾的变量,一个存储数据的数组
class Queue<T> {
int head;
int tail;
int maxSize;
T [] dataArr;
//环形队列,head指向当前队首元素,tail指向队尾元素的后一位
public Queue(int maxSize) {
this.maxSize = maxSize;
this.dataArr = (T[]) new Object[maxSize];
}
//判断队列是否已满
//tail+1表示添加一个元素后队列的tail指向,加% this.maxSize处理环形
//可能tail指向1,head指向2
public boolean isFull() {
return (this.tail + 1) % this.maxSize == this.head;
}
//判断队列是否为空
//tail和head是否指向相同
public boolean isEmpty() {
return this.tail == this.head;
}
//添加元素
public void push(T data) {
if(isFull()) {
System.out.println("队列已满,添加失败");
return;
}
this.dataArr[tail] = data;
this.tail = (this.tail + 1) % this.maxSize;
}
//取出队首元素
//head指向加一,加% this.maxSize处理环形
public T pop() {
if(isEmpty()) {
System.out.println("队列已空,取出失败");
return null;
}
int tmp = this.head;
this.head = (this.head + 1) % this.maxSize;
return this.dataArr[tmp];
}
//打印队列
public void show() {
if(isEmpty()) {
System.out.println("队列为空");
return;
}
for (int i = this.head; i < this.head + getRealSize(); i++) {
System.out.println(this.dataArr[i % this.maxSize]);
}
}
//查看队首元素
public T peek() {
if(isEmpty()) {
System.out.println("队列为空,取出队首失败");
return null;
}
return this.dataArr[this.head];
}
//获取队列有效元素个数
public int getRealSize() {
return (this.tail + this.maxSize - this.head) % this.maxSize;
}
}
public static void main(String[] args) {
Queue<String> queue = new Queue<String>(5);
System.out.println("队列测试开始:");
System.out.println("push: 添加元素");
System.out.println("pop: 取出元素");
System.out.println("peek: 查看队首元素");
System.out.println("show: 打印队列");
System.out.println("exit: 退出");
Scanner scanner = new Scanner(System.in);
boolean flag = true;
while (true) {
String cmd = scanner.next();
switch (cmd) {
case "push":
System.out.println("====添加元素====");
queue.push(scanner.next());
break;
case "pop":
System.out.println("====取出元素====");
System.out.println(queue.pop());
break;
case "peek":
System.out.println("====查看队首元素====");
System.out.println(queue.peek());
break;
case "show":
System.out.println("====打印队列====");
queue.show();
break;
case "exit":
flag = false;
break;
default:
System.out.println("****不能识别的指令****");
break;
}
if(! flag) {
break;
}
System.out.println("push: 添加元素");
System.out.println("pop: 取出元素");
System.out.println("peek: 查看队首元素");
System.out.println("show: 打印队列");
System.out.println("exit: 退出");
}
scanner.close();
System.out.println("测试结束");
}
内容总结
以上是互联网集市为您收集整理的Java 队列模拟全部内容,希望文章能够帮你解决Java 队列模拟所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。