初始时置front和rear均为-1(front==rear),该顺序队的四要素如下:队空条件:front==rear。队满(上溢出)条件:rear==Maxsize-1(因为每个元素进队都让rear增1,当rear到达最大下标时不能再增加。元素e进队操作:先将队尾指针rear增1,然后将元素e放在该位置(进队的元素总是在尾部插入的)。出队操作:先将队头指针front增1,然后取出该位置的元素(出队的元素总是在队头出来的)。11/92
初始时置front和rear均为-1(front==rear),该顺序队的四要素如下: 队空条件:front==rear。 队满(上溢出)条件:rear==MaxSize-1(因为每个元素进队都让 rear增1,当rear到达最大下标时不能再增加。 元素e进队操作:先将队尾指针rear增1,然后将元素e放在该位置(进 队的元素总是在尾部插入的)。 出队操作:先将队头指针front增1,然后取出该位置的元素(出队的 元素总是在队头出来的)。 11/92
非循环队列的泛型类SqQueueclass<E>//非循环队列泛型类classSqQueueclass<E>//假设容量为100ffinal int Maxsize=ioo;//存放队列中的元素private E [] data;1/队头队尾指针private int front,rear;//构造方法public SqQueueclass(){data =(E[])new Object[MaxSize];front=-1;rear=-1;7/队列的基本运算算法由于容量扩展比较复杂,这里采用固定容量的队列。12/92
class SqQueueClass<E> //非循环队列泛型类 { final int MaxSize=100; //假设容量为100 private E [] data; //存放队列中的元素 private int front,rear; //队头队尾指针 public SqQueueClass() //构造方法 { data = (E[])new Object[MaxSize]; front=-1; rear=-1; } //队列的基本运算算法 } 非循环队列的泛型类SqQueueClass<E> 由于容量扩展比较复杂,这里采用固定容量的队列。 12/92
非循环队列的基本运算算法(1)判断队列是否为空empty()//判断队列是否为空public booleanempty()return front==rear;10-1front>rearV13/92
非循环队列的基本运算算法 public boolean empty() //判断队列是否为空 { return front==rear; } 4 3 2 1 0 front -1 rear 13/92
(2)进队push(e)1/元素e进队publicvoid push(Ee)1/队满(if(rear==Maxsize-1)throw new IllegalArgumentException("队满")rear++;data[rear]=e;rear44rearfrontd33假溢出!22b1front→O-114/92
public void push(E e) //元素e进队 { if (rear==MaxSize-1) //队满 throw new IllegalArgumentException("队满"); rear++; data[rear]=e; } e d c b 4 3 2 1 0 -1 rear front 4 3 2 1 0 -1 rear front 假溢出! 14/92
(3)出队pop()//出队元素public Epop()/ /队空(if(empty())throw new IllegalArgumentException("队空");front++;return(E)data[front];15/92
public E pop() //出队元素 { if (empty()) //队空 throw new IllegalArgumentException("队空"); front++; return (E)data[front]; } 15/92