java 数组排列组合算法,编写实现队列的例程,使用数组

  java 数组排列组合算法,编写实现队列的例程,使用数组

  00-1010一、什么是队列二。用数组模拟队列

  00-1010队列是一个有序列表,可以用数组或者链表来实现。遵循先进先出的原则,即先存储在队列中的数据要先取出。数据存储后,再取出。请看一个队列的模拟图。1、2和3代表同一个队列。队列中有两个指针,前面指示队列的头,后面指示队列的尾。

  图1显示队列中还没有数据,所以前端和后端初始化都是-1。图2中有数据存储时,front不变,而rear随着数据的增加而变化。存储四个数据,所以rear=3。再次查看图3。前面变成2,后面不变。因为前两个数据依次先拿出来,所以团长就变成了2。

  这是队列中的“先入先出”。

  00-1010的思路也比较简单,因为队列的输出和输入是从前端到后端分别处理的,所以需要两个变量front和rear分别记录队列前端和后端的下标。

  前随数据的输出而变化,后随数据的输入而变化。

  包装稀疏数组;导入Java。util。扫描仪;公共类myarray队列{ public static void main(String[]args){//创建一个队列数组队列array queue=新数组队列(3);char key=//接受用户输入扫描仪扫描仪=新扫描仪(系统。在);布尔循环=真;//输出一个菜单while(loop){ system。出去。println( s(show):显示队列);系统。出去。println( e(出口):退出程序);系统。出去。println( a(add):添加数据到队列);系统。出去。打印第:页从队列取出数据);系统。出去。println( h(头):显示队首的数据);key=scanner.next().charAt(0);//接收一个字符开关(键){ case s :数组队列。显示队列();打破;案例 : System.out.println(请要添加的数);int value=scanner。nextint();arrayQueue.addQueue(值);打破;案例 g : try { int RES=array queue。get queue();System.out.printf(取出的数据是:%d ,RES);} catch(异常e){ system。出去。println(e . getmessage());}破;案例 h : try { int head value=array queue。显示head queue();System.out.printf(队首数据是:%d ,头值);} catch(异常e){ system。出去。println(e . getmessage());}破;案例 e :扫描仪。close();循环=假打破;} } System.out.println(退出程序);}}//把队列抽象成一个类,ArrayQueueclass ArrayQueue { //表示数组最大容量private int maxSize//队列头私有int front//队列尾私人int rear//用于存放数据的数组private int[]arr;//构造器公共数组队列(int arr maxSize){ maxSize=arr maxSize;arr=new int[maxSize];front=-1;//指向队首的前一个位置rear=-1;//指向队列尾部,包括队列最后的这个数据} //判断队列是否已经存满public boolean是full(){ return rear==maxSize-1;//注意这里的maxSize-1为什么要减1 } //判断队列是否为空public boolean isEmpty(){ return rear==front;} //添加数据到队列public void addQueue(int num) { //判断队列是否满了if(已满()){ system。出去。println(队列已满,不可加入数据);返回;}后方;//让后面的后移arr[rear]=num;} //拿出队列数据public int getQueue() { //判断队列是否空if (isEmpty()) { //抛出异常抛出新的RuntimeException(队列为空,不可取数据);}正面;//前面后移return arr[front];} //显示队列所有数据public void showQueue() { //遍历if(isEmpty()){ system。出去。println(队列为空);返回;} for(int I=0;长度;I){系统。出去。printf( arr[% d]=% d n ,I,arr[I]);} } //显示队里的队首数据public int showHeadQueue(){ if(isEmpty()){//抛出异常抛出新的RuntimeException(队列为空,不可取数据);} return arr[front 1];//注意这里为甚么要1,因为指向队首的前一个位置}}可以用代码分别的进行各项操作,看起来似乎没问题。

  但是,实际是有问题。

  这里创建的数组使用一次就不能再使用了。比如数据取出后,就不能再用了。

  所以要优化一下,用算法,改成循环队列。以上是java数据结构和算法数组模拟队列的例子的详细说明。更多关于java数据结构算法数组模拟队列的信息,请关注其他热门IT相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: