队列是一种非原始(特殊)的线性表,是一种先进先出(fifo)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
fifo:first input first output,即先添加的元素,先移除,最后添加的元素,最后移like造句除。
工作方式类似于商场排队结账情形:
数组模拟队列图示:
插入值操作:inrt ——》 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 in酒精燃烧产生什么t[] 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 impty() {return rear == front;} // 添加数据public 个人目标计划书怎么写void addqueue(int n) {if (isfull()) {system.out.println("队列已满,不能再添加数据了!");return;}rear++; // 让rear 后移arr[rear] = n;} // 获取数据public int getqueue() {if (impty()) {// 通过抛出异常throw new runtimeexception("队列为空,无数据可取!");}front++; // front后移return arr[front]; } // 显示队列的所有数据public void showqueue() { if (impty()) {system.out.println("队列空的,没有数据~~");return;}for (int i = 0; i < arr.length; i++) {system.out.printf("arr[%d]=%d\n", i, arr[i]);}} // 显示队列的头部指向的下一ppt课件个public int headqueue() {if (impty()) {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) {ca 's': //显示队列所有数据queue.showqueue();break;ca 'a': //添加数据system.out.println("输出一个数");int value = scanner.nextint();queue.addqueue(value);break;ca 'g': //依次取出数据try {int res = queue.getqueue();system.out.printf("取出的数据是%d\n", res);} catch (exception e) {// todo: handle exceptionsystem.out.println(e.getmessage());}break;ca 'h': //查看队列头指向try {int res = queue.headqueue();system.out.printf("队列头的数据是%d\n", res);} catch (exception e) {// todo: handle exceptionsystem.out.println(e.getmessage());}break;ca 'e': //退出程序scanner.clo();loop = fal;break;default:break;}}system.out.println("程序退出~~");}
到此这篇关于java实现队列queue数据结构详解的文章就介绍到这了,更多相关java实现队列queue内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 21:36:38,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/28799444ccd9f8e1dfff96c900884aa0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:java实现队列queue数据结构详解.doc
本文 PDF 下载地址:java实现队列queue数据结构详解.pdf
留言与评论(共有 0 条评论) |