배열 구현 대기열 방법은 다음과 같습니다.
1. 배열 구조가 대기열의 데이터를 저장하는 데 사용되는 경우 대기열 배열의 선언은 위에 표시된 것과 같습니다. 여기서 maxSize는 대기열의 최대 용량입니다. 큐의 입력과 출력은 각각 프런트 엔드와 백 엔드에서 처리되므로 데이터 입력에 따라 변경되는 큐의 프런트 엔드와 리어 엔드의 첨자를 각각 기록하려면 앞과 뒤라는 두 개의 변수가 필요합니다. 🎜🎜#
3 데이터가 저장되는 대기열은 "대기열"입니다:# 🎜🎜#①, 비어 있음: Rear==front;
②, 전체: Rear=maxSize-1;
3, tail 포인터가 Rear
동영상 튜토리얼 공유:
java 동영상 튜토리얼구체적인 구현 코드는 다음과 같습니다. (1) , 판단 대기열이 가득 찼는지 여부
(2) 대기열이 비어 있는지 확인
(3) 대기열에 데이터 추가
(4) 대기열에서 데이터를 가져옵니다.
(5), 현재 대기열 데이터를 표시합니다.
(6), 대기열의 헤더 데이터를 표시합니다. 데이터가 유출되지 않도록 주의하세요.
예시는 다음과 같습니다:
package com.ycx.queue; import java.util.Scanner; public class ArrayQueueDemo { public static void main(String[] args) { //测试 //创建一个队列 ArrayQueue queue = new ArrayQueue(3); char key = ' ';//接受用户输入 Scanner input = new Scanner(System.in); boolean flag = 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("输一个数"); int val=input.nextInt(); queue.addQueue(val); break; case 'g': //取出数据 因为方法里面抛出了异常 所以这里需要捕获 try{ int res=queue.getQueue(); System.out.printf("取出的数据为%d\n",res); }catch (Exception e){ System.out.println(e.getMessage()); } break; case 'h': try{ int res=queue.headQueue(); System.out.printf("队列头的数据为%d\n",res); }catch (Exception e){ System.out.println(e.getMessage()); } break; case 'e': //退出程序 input.close();//关闭 flag=false; break; default: break; } } System.out.println("程序退出"); } } //一、使用数组模拟队列-编写一个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;//指向队列尾,指向队列尾的数据(即就是队列最后一个位置 ) } //1.判断队列是否满 public boolean isFull(){ return rear==maxSize-1;//因为rear是从-1开始的(如果不理解就看笔记上的图) } //2.判断队列是否为空 public boolean isEmpty(){ return rear==front; } //3.添加数据到队列中 public void addQueue(int n){ //判断队列是否为满 if(isFull()){ System.out.println("队列已满,不能加入数据"); } rear++;//rear 后移 arr[rear]=n; //也可以直接写成 arr[++rear]:rear先加再取值 } //4.获取队列的数据,出队列 public int getQueue(){ if(isEmpty()){ throw new RuntimeException("队列空,不能取数据"); } front++; //front 后移 因为front指向的是前一个元素(front=-1) return arr[front]; } //5.显示当前队列数据 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]); //格式化输出 } } //6.显示队列的头数据,注意不是取出数据 public int headQueue(){ if(isEmpty()){ throw new RuntimeException("队列为空"); } return arr[front+1]; //注意:front需要加1 } }문제 분석 및 최적화#🎜🎜 # (1) 단점: 배열은 한 번만 사용할 수 있으며 코드 재사용을 구현할 수 없습니다.
(배열의 요소를 모두 빼면 배열은 비어 있지만 요소를 배열에 추가할 수는 없습니다.) (2), 최적화: a로 변경 가능 원형 배열(나머지 수행).
추천 관련 기사 및 튜토리얼:
java빠른 시작
위 내용은 Java에서 배열을 통해 대기열을 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!