假设循环队列中只设rear和quelen来分别指示队尾元素的位置和队中元素的个数,试给出判别此循环队列的队满条件,并写出相应的人队和出队算法,要求出队时需返回队头元素。
根据题意,可定义该循环队列的存储结构为: #define QueueSize 100 typedef char Datatype;//设元素的类型为char型 typedef struct { int quelen; int rear; Datatype Data[QueueSize]; }CirQueue; CirQueue*Q; 循环队列的队满条件是:Q一﹥quelen==QueueSize (1)判断队满 int FullQueue(CirQueue*Q) { //*判队满,队中元素个数等于空间大小 return Q一>quelen==QueueSize; } (2)入队 void EnQueue(CirQueue*Q,Datatype x) {//入队 if(FullQueue(Q)) Error("队已满,无法入队"); Q一>Data[-Q一>rear]=x; Q一>rear=(Q一>rear+1)%QueueSize; Q一>quelenq++; } (3)出队 Datatype DeQueue(CirQueue*Q) { //出队 if(Q一>quelen==0) Error("队已空,无元素可出队"); int tmpfront; //设一个临时队头指针 tmpfront=(QueueSize+Q一>rear—Q一:>quelen+1)%QueueSize; //计算头指针位置 Q一>quelen—一; return Q一>Data[tmpfront]; }