在模拟实现 队列前应先简单的了解先队列的一些特点
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
队列最大的特点就是先进先出
利用数组实现单向队列
// 使用数组模拟 单向队列 // 整个过程就是利用 出队指针和入队指针来完成队列先进先出的特性 //顶部指针始终指向第一个入队的数,当顶部元素出队后指针向后移动 // 步骤 /* 1 队列的初始化 包括 一个用来 指向顶部的指针 (出队),一个指向尾部的指针 (用于入队) 一个数组 * 2 判断数组 是否满了的方法 ,和是否为空的方法 * 3 添加 元素到队列的方法 : 每当元素入队时判断队列是否满了,判断通过则 对当前的尾指针进行后移并存放元素 * 4出队方法,出队前判断队列是否为空,不为空输出当前出队指针指向的元素,并将出队指针后移 * */ class ArrayQueue{ private int maxsize; //数组最大容量 private int font ; // 队列头部的前一个位置 private int rear ; // 队列尾 private int[] arr ;// 数组 //创建队列构造器 public ArrayQueue(int arrmaxsize){ maxsize = arrmaxsize; arr = new int[maxsize]; font = -1 ; //队列头部的前一个位置 rear = -1 ; //尾指针 指向数组中最后一个位置 } // 判断队列 是否满了 public boolean isFull(){ return rear == maxsize -1 ; } // 判断是否为空 public boolean isEmpty(){ return rear == font; } //添加数据 到队列 public void addQueue(int n){ if(isFull()){ System.out.println("队列已满"); return; } rear++ ; //rear 后移 arr[rear] = n; } // 获取队列数据 public int getQueue(){ if (isEmpty()){ throw new RuntimeException("没有数据"); } font++; // return arr[font]; } //显示数据 public void show (){ if (isEmpty()){ System.out.println("没有数据"); } for(int i =0 ;i<arr.length;i++){ System.out.printf("%d\n",i,arr[i]); } } }