java如何实现队列queue数据结构
发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,这篇文章主要介绍java如何实现队列queue数据结构,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概念队列是一种非原始(特殊)的线性表,是一种先进先出(FIFO)的数据结构。
千家信息网最后更新 2024年11月29日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安全错误
数据库的锁怎样保障安全
ssh 链接数据库
普法e家软件开发
数据库漏洞操作技巧
难网络安全手抄报
江门靠谱的零件加工管理软件开发
app抢票软件开发
蚌埠系统软件开发外包公司
上城区 软件开发公司
美国网络安全舆论
如何做微信数据库
南召系统软件开发公司
服务器 frp
北京卓睿安软件开发公司
数据库文件系统正在使用中
通知数据库
机架式服务器深度
ctf网络安全大赛图片题目
万方智搜合作数据库有哪些
如何创建一个临时数据库
u盘如何做服务器系统启动盘
人民日报图文数据库哪些学校购买
英特尔服务器主板内存吗
医保网络安全事件应急预案
软件开发项目案例2016年
如何开启ftp服务器
癌症 数据库
建设部网络安全和信息化
北信源网络安全管理
服务器ssd硬盘能插几个
斗门软件开发定制