* 用数组实现数据结构:队列(头指针,尾指针,最大容量)
* 添加数据(入队),删除数据(出队),遍历数据(查看所有数据),得到队头队尾元素。
* 缺点:数组使用一次就不能用了,复用性差。
* 改进:使用环形数组队列。
*/
public class ArrayQueue {
public static void main(String[] args) {
ArrayQueue queue = new ArrayQueue(10);
System.out.println(queue.isEmpty());
System.out.println(queue.isFull());
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
queue.add(5);
queue.traverse();
System.out.println("队头元素:"+queue.getFirst());
System.out.println("队尾元素:"+queue.getLast());
queue.delete();
queue.traverse();
queue.add(6);
queue.add(7);
queue.add(8);
queue.add(9);
queue.add(10);
queue.add(11);
}
int[] arr;
int MAX_SIZE;
int front;
int rear;
public ArrayQueue(int max_size){
this.MAX_SIZE = max_size;
front = -1;
rear = -1;
arr = new int[max_size];
}
public int getFirst(){
if (isEmpty()){
throw new RuntimeException("队列是空的,获取不到第一个元素!");
}
return arr[front+1];
}
public int getLast(){
if (isEmpty()){
throw new RuntimeException("队列是空的,获取不到最后一个元素!");
}
return arr[rear];
}
public boolean isEmpty(){
if (front == rear){
return true;
}
return false;
}
public boolean isFull(){
if (rear == MAX_SIZE-1){
return true;
}
return false;
}
public boolean add(int element){
if (isFull()){
throw new RuntimeException("添加元素失败,队列已满");
}
rear++;
arr[rear] = element;
return true;
}
public boolean delete(){
if (isEmpty()){
throw new RuntimeException("出队失败,队列已空");
}
front++;
return true;
}
public void traverse(){
int counts = 0;
for (int i = front+1; i < rear+1; i++) {
counts ++;
System.out.println("第"+counts+"个元素是:"+arr[i]);
}
}
}