1//顺序队列的出队2boolQueueDelete(sQqueue *q,int*num){3if(q->front==q->rear){4printf("下溢,出队失败!");5returnfalse;6}7*num=q->data[q->front];8q->front++;9returntrue;10} (6)顺序队列的遍历: 1//遍历顺序队列2voidDispQueue(sQqueue *q){3inti;4i=q->front;5while(i!=q->r...
=null进入循环,让根节点1入队,rear指针+1, 下面的循环遍历条件是首尾指针不等(rear!=front) 标记一下此时的父结点p就是队列的首结点p=queue[rear],首节点出队front+1,如果当前父节点的左子树不是null,那么左结点入队,rear+1 如果当前父节点的右子树不是null,那么 右节点入队,rear+1.。这样一层遍历就完成了...
打印队列的全部元素是在队列不为空的情况下,通过结点的next指向依次遍历并输出元素既可以。 其代码可以表示为 1 2 3 4 5 6 7 8 9 10 11 12 13 //打印队列元素 void print_queue(queue *q){ node *n = init_node(); n=q->front; if(empty(q)){ return ; //此时队列为空,直接返回函数结束 }...
void QueuePush(Queue* pq, QDataType x); //出队列 void QueuePop(Queue* pq); //判空 bool QueueEmpty(Queue* pq); //获取有效元素个数 size_t QueueSize(Queue* pq); //获取队头元素 QDataType QueueFront(Queue* pq); //获取队尾元素 QDataType QueueBack(Queue* pq); Que...
*/voidQueueTraverse(SqQueue Q,void(*vi)(QElemType)){inti=Q.front;while(i!=Q.rear){vi(Q.base[i]);//遍历i=(i+1)%MAX_QUEUE_SIZE;}printf("\n");}/** * 遍历函数 * @param e */voidvi(QElemType e){printf("%d ",e);}/** ...
2.层次遍历中我们需要用到队列,定义队列头文件如下LinkQueue.h中代码: #ifndef LINKQUEUE_H #define LINKQUEUE_H #include "head.h" #include "BiTree.h" //队列中数据类型为树节点 typedef pBiNode Type; //队列节点 typedef struct Node{ Type data; ...
{intiBasic=0;if(bIsEmptyQueue(queue)){printf("队列为空!遍历失败...\r\n");return;}printf("队列数据: ");iBasic=queue->qFront;//队首while(iBasic!=queue->qRear)//直到队尾{printf("%d ",queue->pBasic[iBasic]);//队列值iBasic=(iBasic+1)%QUEUE_ZISE;//下个数据位置}printf("\r\n"...
queue是一种先进先出的结构(FIFO),他只有一个出口 queue除了最顶端元素,没有任何其他方法可以存取元素,换言之,queue不允许遍历行为,没有迭代器 deque是双向开口的结构,若以deque为底层结构并粉笔其头端开口,便轻而易举形成了一个queue。看源码 template <class T, class Sequence=deque<T>> ...
int QueueSize(Queue* pq) { //遍历 assert(pq); int size = 0; QNode* cur = pq->head; //这里其实就是一个数组的遍历 while (cur) { size++;//计数器 cur = cur->next;//迭代 } return size; } bool QueueEmpty(Queue* pq) { ...