一、队列的概念
队列是一个有序列表,可以用数组或者是链表来实现的。遵循的是先入先出的原则,就是先存入队列的数据要先取出,后面存的需要后面取出。插入的一端称为队尾,删除的一端称为队头,队列里没有元素就称它为空队列。
队列包括顺序队列和链式队列。
顺序队列通常是采用了一维数组存储队列里的元素,另外是增加两个指针分别是指向了数组里的队首元素和队尾的元素。其中对头的指针称为front,队尾的称为rear。
链式队列就是采用单链表作为存储表示,链式队列的队头指针指向单链表的第一个结点,队尾指针指向单链表的最后一个结点。链式队列的队头元素存放在单链表的第一个结点内,若要从队列中退出一个元素,必须从单链表中删去第一个结点,而存放着新元素的结点应插在队列的队尾,即单链表的最后一个结点后面,这个新节点将成为新的队尾。
二、顺序队列的实现
接下来我们来实现一下顺序队列,首先我们要初始化队列:
class ListQueue{//数组的最大容量private int maxSize;//对头指针private int front;//队尾指针private int rear;//数组大小private int size;//队列数组private int[] queue;public ListQueue(int maxSize){this.maxSize=maxSize;this.front=0;this.rear=0;this.size=0;queue=new int[maxSize];}
}
判空的方法:
public boolean isEmpty(){return front==rear;}
判满的方法:
public boolean isFull(){return rear==maxSize;}
元素入队的操作:
public void addNumber(int num){if(isFull()){throw new RuntimeException("队列满,无法入队");}queue[rear]=num;rear++;size++;}
元素出队的操作:
public int getNumber(){if(isEmpty()){throw new RuntimeException("队列空,无法出队");}int num = queue[front];front++;size--;return num;}
遍历队列的元素:
public void showQueue(){if(isEmpty()){throw new RuntimeException("队列空,无法遍历");}for (int i=front;i<rear;i++){System.out.println(queue[i]);}}
获取队列的元素个数:
public int getSize(){return size;}