1,若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0 或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试 编写与此结构相应的入队和出队

    技术2025-12-29  14

    1,若希望循环队列中的元素都能得到利用,则需设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列状态是“空”还是“满”。试编写与此结构相应的入队和出队算法。

     思路:利用tag来标记队列空或满的条件如下为:

    tag等于0时,并且Q.front==Q.rear ,则为队空;tag等于1时,并且Q.front==Q.rear,则为队满。

    队列结构

    #define MaxSize 10; typedef struct Queue{ int tag; int front, rear; int data[MaxSize]; }Queue;

    初始化队列

    // 初始化队列 void InitQueue(Queue &Q){ Q.tag = 0; Q.front = Q.rear = 0; }

    队列判空

    // 判空 bool Empty(Queue Q){ if(tag == 0 && Q.front == Q.rear){ return true; } return false; }

    队列判满

    // 判满 bool Full(Queue Q){ if(tag == 1 && Q.front == Q.rear){ return true; } return false; }

    入队

    // 入队 bool EnQueue(Queue &Q, int n){ // 判满 if(Full(Q)){ return false; } Q.data[Q.rear] = n; Q.rear = (Q.rear+1)%MaxSize; // 节点入队后,判断指针是否相等,决定空满标志tag的值 if(Q.rear == Q.front){ Q.tag = 1; } return true; }

    出队

    bool DeQueue(Queue &Q, int &e){ if(Empty(Q)){ return false; } e = Q.data[Q.front]; Q.front = (Q.front+1)%MaxSize; if(Q.front == Q.rear){ Q.tag = 0; } return true; }

     

    Processed: 0.012, SQL: 9