//打印队列元素 void print_queue(queue *q){ node *n = init_node(); n=q->front; if(empty(q)){ return ; //此时队列为空,直接返回函数结束 } while (n!=NULL){ printf("%d\t",n->data); n=n->next; } printf("\n"); //记得换行 } 遍历操作还有很多变形,比如说进行计算队列中含有多...
}//获取队列中元素的个数printf("队列中元素的个数:%d\n", getQueueSize(&queue));//遍历队列中的元素traverseQueue(&queue);//判断队列是否为空printf("队列是否为空?%s\n", isQueueEmpty(&queue) == TRUE ?"是":"否");//清空队列if(clearQueue(&queue) ==SUCCESS) { printf("清空队列成功!\n"...
BitTree p=root ;if(p!=NULL){//根结点入队(是整个结点入队)queue[rear] =p; rear=(rear+1)%MAXSIZE ;while(rear !=front){//每次进来首尾指针不同的时候p指向队列中第一个元素,然后p出队,front指针+1p =queue[front]; visit(queue[front]); front=(front+1)%MAXSIZE;if(p->Lchild!=NULL){//...
依次遍历cur,不为空,size就++。这种遍历的思想不复杂,但时间复杂度达到O(N),不是太好,想要O(1)的话可以直接在当初定义结构体时多定义一个size变量,专门用来记录有效元素个数,每次入队列size++,出队列size--。这样实现是比较好的,不过为了封装成一个独立模块,还是采用遍历的方式。如下:Queue.h 文件: ...
*/StatusDeQueue(SqQueue*Q,QElemType*e){if(Q->front==Q->rear){returnERROR;}*e=Q->base[Q->front];Q->front=(Q->front+1)%MAX_QUEUE_SIZE;//队头指针加 1returnOK;}/** * 初始条件:队列 Q 存在且非空 * 操作结果:从队头到队尾,依次对遍历队列中每个元素 ...
boolQueueEmpty(Queue* pq) { assert(pq); returnpq->head == NULL; } 获取队列元素个数 思路: 求元素个数其实不难,只需要定义一个cur指针为第一个数据pq->head,定义变量size来记录个数。依次遍历cur,不为空,size就++。这种遍历的思想不复杂,但时间复杂度达到...
队列(Queue) :是一种先进先出 (First In First Out ,简称 FIFO) 的线性表,也是运算受限的线性表。只允许在表的一端进行插入,而在另一端进行删除。 队首(front) :允许进行删除的一端称为队首。 队尾(rear) :允许进行插入的一端称为队尾。
struct queueNode { // 数据元素 int elem; // 指向下一个元素 struct queueNode *next; }; struct queue { // 尾部 struct queueNode *rear; // 头部 struct queueNode *front; // 长度 int lenth; }; ``` 代码实现: ```c /*** 含头结点 ***/ // 队列初始化 struct queue*queueInit() {...
//出队操作pop void pop(cir_queue *q){ if(q->rear==q->front){ printf("队列为空,无法出队\n"); return; }else{ q->data[q->front]=0; q->front=(q->front+1)%maxsize; } } 4. 循环队列遍历操作 遍历操作需要借助一个临时变量储存位置front的位置信息,利用i逐步向后移动,直到i到达了rea...
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) { ...