单向队列的数组实现:
定义一个数组,给定数组最大长度,定义队列头指针,尾指针,头指针和尾指针相等则表示队列为空,尾指针与数组最大长度相等则表示队列已满
代码表示为:
package 数据结构;
import java.util.Random;
/**
* 使用数组模拟队列
*/
public class 队列 {
public static void main(String[] args) {
ArrQueue arrQueue1=new ArrQueue(10);
for(int i=0;i<11;i++)
{
arrQueue1.add(10);
System.out.println("-----------------------------------");
System.out.println("头指针指向:"+arrQueue1.getFront());
System.out.println("尾指针指向"+arrQueue1.getRear());
}
for(int i=0;i<11;i++)
{
arrQueue1.get();
System.out.println("-----------------------------------");
System.out.println("头指针指向:"+arrQueue1.getFront());
System.out.println("尾指针指向"+arrQueue1.getRear());
}
arrQueue1.showqueue();
}
}
class ArrQueue{
/**
* maxsize:数组最大容量
* front:队列头指针
* rear:队列尾指针
* arr:队列数组
*/
private int maxsize;
private int front;
private int rear;
private int []arr;
//getter and setter
public int getMaxsize() {
return maxsize;
}
public void setMaxsize(int maxsize) {
this.maxsize = maxsize;
}
public int getFront() {
return front;
}
public void setFront(int front) {
this.front = front;
}
public int getRear() {
return rear;
}
public void setRear(int rear) {
this.rear = rear;
}
public int[] getArr() {
return arr;
}
public void setArr(int[] arr) {
this.arr = arr;
}
public ArrQueue(int maxsize) {
/**
* //指向队列头部的前一个位置,便于添加数据(不含)
* //指向队列尾,包含最后一个数据
*/
this.maxsize = maxsize;
arr=new int[maxsize];
front=-1;
rear=-1;
}
public boolean isFull(){//判断队列是否满了
return rear==maxsize-1;
}
public boolean isEmpty(){
return rear==front;
}
public void add(int n){
if( isFull())
{
System.out.println("数据已满,无法添加");
}
else{
//入队,队尾后移
rear++;
arr[rear]=n;
}
}
public int get(){
if(isEmpty())
{ //会直接导致return
throw new RuntimeException("队列中无数据,取出失败");
}
else{
//出队,队首后移
front++;
return arr[front];
}
}
public void showqueue(){
if(isEmpty())
{
System.out.println("队列为空,没有数据");
}
else{
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+"\t");
}
}
}
}
运行结果图: