package sparseArray;
/**
* 队列:先入先出
*数组实现的普通队列,存在问题,数据出队列,并没有把数据从队列中删除,只是移动了指针,所以队列不能复用。
* @param <E>
*/
public class ArryQueue<E> {
private int maxSize; //表示队列(数组)最大容量
private int front; //队列头
private int rear; //队列尾
private Object[] arr; //存放数据的数组,用来模仿队列
public ArryQueue(int arrMaxSize) {
maxSize = arrMaxSize;
arr = new Object[maxSize];
front = -1;
rear = -1;
}
//判断队列是否满
public boolean isFull(){
return rear==maxSize-1;
}
//判断队列是否为空
public boolean isEmpty(){
return rear == front;
}
//添加数据到队列
public void addQueue(E e){
if(isFull()){
System.out.println("队列已满,无法添加数据!");
return;
}
rear++; //让rear后移
arr[rear]=e;
}
public E getQueue(){
if(isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
front++;
return (E) arr[front]; //数据出队列,并没有把队列数据删除,只是移动了指针。
}
//显示队列的所有数据
public void showQueue(){
if(isEmpty()){
System.out.println("队列为空,没有数据!");
return;
}
for(int i = 0;i<arr.length;i++){
System.out.printf("arr[%s]=%s\n",i,arr[i]);
}
}
//显示队列头数据,注意不是取数据
public E headQueue(){
if(isEmpty()){
throw new RuntimeException("队列为空,不能取数据");
}
return (E) arr[front + 1];
}
public static void main(String[] args) {
ArryQueue queue = new ArryQueue(3);
queue.addQueue("a");
queue.addQueue("b");
queue.addQueue("c");
queue.addQueue("d");
//queue.addQueue("e");
queue.showQueue();
int a=0;
System.out.printf("%d",a++); //输出0,执行完后a=1
int b=0;
System.out.printf("%d",++b);//输出1,执行完后b=1
}
}
队列已满,无法添加数据!
arr[0]=a
arr[1]=b
arr[2]=c
0
1