队列1-顺序队列

来源:互联网 发布:防御矩阵 觉醒 steam 编辑:程序博客网 时间:2024/06/09 18:22

队列:对头删除操作,队尾插入操作,先进先出原则

定义队列接口

package queue;class QueueEmptyException extends RuntimeException{public QueueEmptyException(String err){super(err);}}public interface Queue {//定义队列接口public int getSize();public boolean isEmpty();public void enqueue(Object e);//入队public Object dequeue() throws QueueEmptyException;public Object peek() throws QueueEmptyException;}
package queue;class Stu{private String name;private int id;public Stu(String name, int id){this.name=name;this.id=id;}public int getId(){return id;}public String getName(){return name;}public String toString(){return id+" "+name;}}public class QueueArray implements Queue{private static final int CAP=7;//队列大小private Object[] elements;//数据元素数组private int capacity;private int front;private int rear;public QueueArray(){elements=new Object[CAP];front=rear=0;capacity=CAP;}public QueueArray(int cap){capacity=cap+1;elements=new Object[capacity];front=rear=0;}public int getSize(){return (rear-front+capacity)%capacity;//利用capacity避免循队列时,rear<front时出现负数}public boolean isEmpty(){//当头尾指针相同时,为空队列return front==rear;}public void print(){for(int i=front;i<rear;i++){System.out.print("\t"+elements[i].toString());}System.out.println();}private void expandSpace(){//当存储空间不够时,额外开辟空间Object[] a =new Object[elements.length*2];int i=front;int j=0;while(i!=rear){//从front到rear前一个存储单元的元素复制到新数组中a[j]=elements[j];j++;i=(i+1)%capacity;}elements=a;capacity=elements.length;front=0;rear=j;}public void enqueue(Object e){if(getSize()==capacity-1) expandSpace();elements[rear]=e;//rear为队尾元素后面的位置,front初始为0,只第一个元素rear=(rear+1)%capacity;}public Object dequeue()throws QueueEmptyException{if(isEmpty()){throw new QueueEmptyException("队列已空");}Object obj=elements[front];elements[front]=null;front=(front+1)%capacity;return obj;}public Object peek() throws QueueEmptyException{if(isEmpty()) throw new QueueEmptyException("队列已空");return elements[front];}public static void main(String[] args){QueueArray qa=new QueueArray();Stu a1=new Stu("Alice",1);Stu a2=new Stu("Bob",2);Stu a3=new Stu("Cindy",3);Stu a4=new Stu("David",4);Stu a5=new Stu("Even",5);qa.enqueue(a1);qa.enqueue(a2);qa.enqueue(a3);qa.enqueue(a4);qa.print();System.out.print("dequeue: "+qa.dequeue());qa.print();qa.enqueue(a5);qa.print();}}




0 0