java如何实现队列queue数据结构
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要介绍java如何实现队列queue数据结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概念队列是一种非原始(特殊)的线性表,是一种先进先出(FIFO)的数据结构。
千家信息网最后更新 2025年01月20日java如何实现队列queue数据结构
这篇文章主要介绍java如何实现队列queue数据结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
概念
队列是一种非原始(特殊)的线性表,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
FIFO:first input first output,即先添加的元素,先移除,最后添加的元素,最后移除。
工作方式类似于商场排队结账情形:
数组模拟队列图示:
队列中两个主要操作
插入值操作:insert ——》 enqueue(入队) ——》参数是要插入的数据data
删除值操作:remove ——》 dequeue (出队)——》 无参
队列遵循以下条件:
如果 FRONT = 0,那么队列就是空的。
如果 REAR = size of the queue,那么队列就是满了。
如果 FRONT = REAR,那么队列中至少有一个元素。
如果你想知道队列中元素的总数,那么使用这个公式计算(REAR - FRONT)+1。
队列的数组实现
我们可以通过数组、堆栈和链表来实现队列。其中数组是实现队列的最简单方法。
创建一个大小为 n 的数组。将 FRONT 和 REAR 的值初始化为 -1,该值表示该数组当前为空。
编写一个ArrayQueue类如下:
class ArrayQueue { private int maxSize; // 数组的最大容量 private int front; // 队列头 private int rear; // 队列尾 private int[] arr; // 存放数据, 模拟队列 // 创建构造器,初始化 public ArrayQueue(int arrMaxSize) { maxSize = arrMaxSize; arr = new int[maxSize]; front = -1; // front 是指向队列头的前一个位置 rear = -1; // rear 是指向队列尾的数据(最后一个数据) } // 判断队列是否已满 public boolean isFull() { return rear == maxSize - 1; } // 判断队列是否为空 public boolean isEmpty() { return rear == front; } // 添加数据 public void addQueue(int n) { if (isFull()) { System.out.println("队列已满,不能再添加数据了!"); return; } rear++; // 让rear 后移 arr[rear] = n; } // 获取数据 public int getQueue() { if (isEmpty()) { // 通过抛出异常 throw new RuntimeException("队列为空,无数据可取!"); } front++; // front后移 return arr[front]; } // 显示队列的所有数据 public void showQueue() { if (isEmpty()) { System.out.println("队列空的,没有数据~~"); return; } for (int i = 0; i < arr.length; i++) { System.out.printf("arr[%d]=%d\n", i, arr[i]); } } // 显示队列的头部指向的下一个 public int headQueue() { if (isEmpty()) { throw new RuntimeException("队列为空,没有数据~~"); } return arr[front + 1]; }}
编写测试方法:
//创建一个队列 ArrayQueue queue = new ArrayQueue(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("程序退出~~"); }
以上是"java如何实现队列queue数据结构"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
队列
数据
数组
元素
指向
数据结构
结构
程序
后移
内容
就是
方法
篇文章
输出
原始
特殊
两个
个数
价值
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
sql数据库监听启动
万厨互联网科技有限公司
db2是数据库管理系统软件吗
网络安全的危害政治
青岛市网络安全周
北京魔带互联网科技
挂图作战 网络安全
网络技术对口升学考试题
多人编辑数据库网站
网络安全认证的机构
全国地理基础信息数据库
企业软件开发crm
软件开发有没有国家二级
网络安全该怎样自学
网络安全品牌优势
营口团市委开展网络安全宣传
django数据库数据
方正证券 方闻千 网络安全
苹果手机收件服务器主机名称
我国网络安全体系的特点
河南理工大学计算机网络技术学费
学网络技术被骗了怎么办
武魂数据库
达梦数据库给用户赋权
浚峰网络技术
如何对数据库表进行排序
属于数据库系统组成部分的事
服务器安全狗卸载影响系统
网络安全法6月实施
网络安全分析师就业