下面的循环遍历条件是首尾指针不等(rear!=front) 标记一下此时的父结点p就是队列的首结点p=queue[rear],首节点出队front+1,如果当前父节点的左子树不是null,那么左结点入队,rear+1 如果当前父节点的右子树不是null,那么 右节点入队,rear+1.。这样一层遍历就完成了此时队列里面是2和3,p为2结点。接着第二轮...
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...
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...
打印队列的全部元素是在队列不为空的情况下,通过结点的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 ; //此时队列为空,直接返回函数结束 }...
* 遍历函数 * @param e */voidvi(QElemType e){printf("%d ",e);}/** * 主函数,测试程序 * @return */intmain(){SqQueue q;QElemType e;InitQueue(&q);printf("队列的长度:%d\n",QueueLength(q));printf("队列是否为空:%d\n",QueueEmpty(q));EnQueue(&q,3);EnQueue(&q,4);EnQueue(&q...
//遍历队列voidvTraverseQueue(pQUEUE queue){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)%QUE...
queue是一种先进先出的结构(FIFO),他只有一个出口 queue除了最顶端元素,没有任何其他方法可以存取元素,换言之,queue不允许遍历行为,没有迭代器 deque是双向开口的结构,若以deque为底层结构并粉笔其头端开口,便轻而易举形成了一个queue。看源码 template <class T, class Sequence=deque<T>> ...
2.层次遍历中我们需要用到队列,定义队列头文件如下LinkQueue.h中代码: #ifndef LINKQUEUE_H #define LINKQUEUE_H #include "head.h" #include "BiTree.h" //队列中数据类型为树节点 typedef pBiNode Type; //队列节点 typedef struct Node{ Type data; ...
层序遍历 层序遍历需要用到队列的思想。 这里先给出要用的队列相关函数 代码语言:javascript 复制 //初始化voidQueueInit(Queue*pq){assert(pq);pq->phead=pq->ptail=NULL;pq->size=0;}//销毁voidQueueDestroy(Queue*pq){assert(pq);QNode*cur=pq->phead;while(cur){QNode*next=cur->next;free(cur)...