请完成如下循环顺序队列的出队操作算法。顺序队列的存储结构描述如下:#define MAXQSIZE 100 //队列可能的最大长度typedef struct {QElemType *base; // 队列存储空间基地址int front ; //指示队首元素存储单元的位置(队首指针)int rear; //指示队尾元素的下一存储单元的位置(队尾指针)}SqQueue;Status DeQueue (SqQueue &Q, QElemType &e) //少用一个存储单元区别判满与判空条件的方法// 删除循环顺序队列Q中的队首元素,并用e返回其值{if (____) //当前队空{printf("The Queue is NULL!\n");return ERROR;}____=Q.base[Q.front];//用e返 队首元素____; //队首指针下移一位return OK;}
查看答案
请完成如下链队列的入队操作算法。链队列的存储结构描述如下:typedef struct QNode{QElemType data;struct QNode *next;}QNode,*QueuePtr; //链队列的结点类型及指向结点的指针类型typedef struct{QueuePtr front; // 队首指针QueuePtr rear;// 队尾指针} LinkQueue; //链队列类型Status EnQueue(LinkQueue &Q, QElemType e)// 在链队列的队尾插入新的元素e,使其成为新的队尾元素{ QueuePtrp=(QueuePtr)malloc(sizeof(QNode)); //为新结点分配空间if ( ____ ) //空间分配失败return ERROR;p->data=e; //e存入新结点的数据域p->next=____; //修改链,让新结点插入到链队列的尾部____;Q.rear=p;//队尾指针使其指向新的队尾结点return OK;}
请完成如下链队列的出队操作算法。链队列的存储结构描述如下:typedef struct QNode{QElemType data;struct QNode *next;}QNode,*QueuePtr; //链队列的结点类型及指向结点的指针类型typedef struct{QueuePtr front; // 队首指针QueuePtr rear;// 队尾指针} LinkQueue; //链队列类型Status DeQueue(LinkQueue &Q, QElemType &e)// 删除链队列中的队首数据元素,并用e返回其值{ if( ____ ) //队空{printf("The Queue is NULL!\n");return ERROR;}QueuePtr p=____;//p指针指向待删除的队首结点e=p->data;//用e保存队首结点的数据元素值____; //修改链指针使队首结点从链中脱离if (____) //如果被删的结点是队尾结点Q.rear=Q.front;free(p); //释放待删结点空间return OK;}
请完成下列只以尾指针rear标识的带头结点的循环链队列的入队操作算法。链队列的存储结构描述如下:typedef struct CQNode{ QElemType data;struct QNode *next;}CQNode,*LinkCQueue;Status EnCQueue(LinkCQueue &rear, QelemType e){p=____;//为新结点分配空间并用p指针指向它if(!p)return ERROR;p->data=e;p->next=____;//将p插入到rear的后面____=p;rear=____;return OK;}
请完成下列只以尾指针rear标识的带头结点的循环链队列的出队队操作算法。链队列的存储结构描述如下:typedef struct CQNode{ QElemType data;struct QNode *next;}CQNode,*LinkCQueue;Status DeQueue(LinkCQueue &rear, QelemType &e){ If ( ____ )//队空return ERROR;p= ____;//用p记下待删结点e=p->data;rear->next->next=____;//修改链,使被删结点p从链中脱离出来free(p);return OK;}