3.3.2 队列的存储表示和操作的实现

 二、循环队列
算法
  bool EnQueue (Queue &Q,ElemType e)
 {
 // 若当前队列不满,这在当前队列的尾元素之后,
 // 插入元素 e 为新的队列尾元素,并返回TRUE,否则返回FALSE

  if ((Q.rear + 1) % Q.queuesize == Q.front )
   return FALSE;
  Q.elem[Q.rear] = e;
  Q.rear = (Q.rear+1) % Q.queuesize;
  return TRUE;
 }

 
 
  思考题 由于顺序存储结构是一次性地分配空间,因此在入队列的操作中首先应该判别当前队列是否已经"满"了,那么队列满的判别条件又是什么呢?
 
  算法
  int QueueLength (Queue Q)
 {
 // 返回队列Q中元素个数,即队列的长度
  return ((Q.rear-Q.front+Q.queuesize) % Q.queuesize);
 }
   
  因为在循环队列中,队尾指针的"数值"有可能比队头指针的数值小,因此为避免在求队列长度两者相减时出现负值的情况,在作取模运算之前先加上一个最大容量的值。