所以可以使用deque(double-ended queue,双端队列)和list对queue初始化,而vector因其缺少pop_front(),不能用于queue。 ●front():返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue为空,返回值是未定义的。 ●back():返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回...
{Q->front=Q->rear=0;returnOK;}//返回长度intgetLenth(LoopQueue*Q){return(Q->rear-Q->front+MAXSIZE)%MAXSIZE;}//插入元素intinsertLQueue(LoopQueue*Q){//这里牺牲掉了一个储存位置,用rear+1来和队头索引相比较以判断是否为满,//是为了和队列判空的条件相区分//判断队列是否为满,未满则可以...
Q->front = Q->rear; } return OK; } /* **操作结果:清空队列元素 */ Status ClearQueue(LinkQueue *Q){ Q->front = Q->rear; Q->front->next = NULL; return OK; } /* **操作结果: 若队列为空,则返回TRUE,否则返回FALSE */ Status QueueEmpty(LinkQueue Q){ return Q.front == Q.rear?
1、要求front指向队头,rear指向队尾,那么初始化front=0,rear究竟是0还是n-1,不妨假设rear=0,那么很明显此时已经有一个元素入队了,在a[0]的位置,此时front=rear=0,与初始为空矛盾.所以rear=(0-1)%n=n-1.2、循环队列为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并...
顺序队的出队,只能从队头出队,对于顺序队,只需要修改队头标志front 就可以,这样就可以把数据从逻辑上删除。 //出队操作,出队成功返回TRUE,出队失败返回FALSE StatusDeListQueue(ListQueue*lq){if(lq->front==lq->rear){printf("队已空\n");returnFALSE;}lq->front++;returnTRUE;} ...
que(const queue &que); //拷贝构造函数 1. 2. 赋值操作: queue& operator=(const queue &que); //重载等号操作符 1. 数据存取: push(elem); //往队尾添加元素 pop(); //从对头移除第一个元素 back(); //返回最后一个元素 front(); //返回第一个元素 ...
base[q.front];//当前的队列头元素作为返回值 64 q.front=(q.front+1)%max;//front指针后移 65 return e; 66 } 67 } 68 int dequeue1(queue &q,elemtype &e) 69 { 70 //出队列操作 71 if(q.front==q.rear)//空队列不能出队 72 { 73 //队空 74 cout<<"空队列,无法删除头元素!"<<...
// 层序遍历void BinaryTreeLevelOrder(BTNode* root){Queue q;QueueInit(&q);if (root)QueuePush(&q, root);int levelSize = 1;while (!QueueEmpty(&q)){// 一层一层出while (levelSize--){BTNode* front = QueueFront(&q);QueuePop(&q);printf("%d ", front->data);if (front->left)Queu...
[Q->front]; // 将队头元素赋值给e Q->front = (Q->front + 1) % MAXSIZE; // front指针向后移一位置 若到最后则转到数组头部 return OK; } /* 从队头到队尾依次对队列Q中每个元素输出 返回值类型 Status 函数名 QueueTraverse 参数列表 SqQueue Q */ Status QueueTraverse(SqQueue Q) { int ...