欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  1、队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如上图,其中maxSize是队列的最大容量;
 
  2、队列的输入、输出分别从前后端处理,因此需要front和rear两个变量分别记录队列前后端的下标,其会随着数据输入而改变;
 
  3、将数据存入的队列为“queue":
 
  ①、对空:rear==front;
 
  ②、队满:rear=maxSize-1;
 
  ③、当尾指针rear<maxSize-1时,则将数据存入rear所指的数组中。
 
  视频教程分享:java视频教程
 
  具体实现代码如下:
 
  (1)、判断队列是否满
 
  (2)、判断队列是否为空
 
  (3)、添加数据到队列中
 
  (4)、获取队列的数据,出队列;
 
  (5)、显示当前队列数据;
 
  (6)、显示队列的头数据,注意不是取出数据;
 
  示例如下:
 
  
 
  
 
  
 
  
 
  
 
  
 
  
 
  packagecom.ycx.queue;
 
  importjava.util.Scanner;
 
  publicclassArrayQueueDemo{
 
  publicstaticvoidmain(String[]args){
 
  //测试
 
  //创建一个队列
 
  ArrayQueuequeue=newArrayQueue(3);
 
  charkey='';//接受用户输入
 
  Scannerinput=newScanner(System.in);
 
  booleanflag=true;//控制循环默认死循环
 
  //输出菜单
 
  while(flag){
 
  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=input.next().charAt(0);//接受收一个字符
 
  switch(key){
 
  case's':
 
  queue.showQueue();
 
  break;
 
  case'a':
 
  System.out.println("输一个数");
 
  intval=input.nextInt();
 
  queue.addQueue(val);
 
  break;
 
  case'g'://取出数据因为方法里面抛出了异常所以这里需要捕获
 
  try{
 
  intres=queue.getQueue();
 
  System.out.printf("取出的数据为%d\n",res);
 
  }catch(Exceptione){
 
  System.out.println(e.getMessage());
 
  }
 
  break;
 
  case'h':
 
  try{
 
  intres=queue.headQueue();
 
  System.out.printf("队列头的数据为%d\n",res);
 
  }catch(Exceptione){
 
  System.out.println(e.getMessage());
 
  }
 
  break;
 
  case'e'://退出程序
 
  input.close();//关闭
 
  flag=false;
 
  break;
 
  default:
 
  break;
 
  }
 
  }
 
  System.out.println("程序退出");
 
  }
 
  }
 
  //一、使用数组模拟队列-编写一个ArrayQueue类
 
  classArrayQueue{
 
  privateintmaxSize;//表示数组的最大容量
 
  privateintfront;//队列头
 
  privateintrear;//队列尾
 
  privateint[]arr;//该数组用于存放数据,模拟队列
 
  //创建队列的构造器
 
  publicArrayQueue(intarrMaxsize){
 
  maxSize=arrMaxsize;
 
  arr=newint[maxSize];//初始化数组
 
  front=-1;//指向队列头部,分析出front是指向队列头的前一个位置有效数据的位置
 
  rear=-1;//指向队列尾,指向队列尾的数据(即就是队列最后一个位置)
 
  }
 
  //1.判断队列是否满
 
  publicbooleanisFull(){
 
  returnrear==maxSize-1;//因为rear是从-1开始的(如果不理解就看笔记上的图)
 
  }
 
  //2.判断队列是否为空
 
  publicbooleanisEmpty(){
 
  returnrear==front;
 
  }
 
  //3.添加数据到队列中
 
  publicvoidaddQueue(intn){
 
  //判断队列是否为满
 
  if(isFull()){
 
  System.out.println("队列已满,不能加入数据");
 
  }
 
  rear++;//rear后移
 
  arr[rear]=n;//也可以直接写成arr[++rear]:rear先加再取值
 
  }
 
  //4.获取队列的数据,出队列
 
  publicintgetQueue(){
 
  if(isEmpty()){
 
  thrownewRuntimeException("队列空,不能取数据");
 
  }
 
  front++;//front后移因为front指向的是前一个元素(front=-1)
 
  returnarr[front];
 
  }
 
  //5.显示当前队列数据
 
  publicvoidshowQueue(){
 
  //遍历
 
  if(isEmpty()){
 
  System.out.println("当前队列为空");
 
  return;
 
  }
 
  for(inti=0;i<arr.length;i++){
 
  System.out.printf("arr[%d]=%d\n",i,arr[i]);//格式化输出
 
  }
 
  }
 
  //6.显示队列的头数据,注意不是取出数据
 
  publicintheadQueue(){
 
  if(isEmpty()){
 
  thrownewRuntimeException("队列为空");
 
  }
 
  returnarr[front+1];//注意:front需要加1
 
  }
 
  }
 
  问题分析并优化
 
  (1)、缺点:数组只能使用一次,不能实现代码的复用。
 
  (当把数组中所有的元素取出来后,数组为空,但无法添加元素进入数组)
 
  (2)、优化:可以改成一个环形的数组(进行取余)。






本文转载自中文网
 

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h55942.shtml