
浅谈队列(Queue)的实现
发布日期:2021-05-04 18:21:48
浏览次数:12
分类:技术文章
本文共 2219 字,大约阅读时间需要 7 分钟。
文章目录
Queue概念
队列是一种特殊的线性表,其中只允许在固定的一端进行插入数据,在另一端进行数据的删除。遵循FIFO(first in first out)原则。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。
Queue实现
Queue.h文件
#pragma once#include#include #include typedef int QDataType;//链式结构:表示队列typedef struct QueueNode{ QDataType data; struct QListNode* next;}QueueNode;//队列的结构typedef struct Queue{ QueueNode* front; QueueNode* rear;}Queue;//队列的初始化void QueueInit(Queue* pq);//入队操作void QueuePush(Queue* pq, QDataType data);//出队操作void QueuePop(Queue* pq);//获取队列头元素QDataType QueueFront(Queue* pq);//获取队列尾元素QDataType QueueBack(Queue* pq);//获取队列中有效元素个数int QueueSize(Queue* pq);//队列判空int QueueEmpty(Queue* pq);//队列销毁void QueueDestory(Queue* pq);
Queue.c文件
#include "Queue.h"//队列的初始化void QueueInit(Queue* pq){ assert(pq); pq->front = pq->rear = NULL;}//入队操作void QueuePush(Queue* pq, QDataType x){ assert(pq); QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode)); newnode->data = x; newnode->next = NULL; if (pq->rear == NULL) { pq->front = pq->rear = newnode; } else { pq->rear->next = newnode; pq->rear = newnode; }}//出队操作void QueuePop(Queue* pq){ assert(pq); assert(!QueueEmpty(pq)); //1.只有一个节点 //2.有多个节点 if (pq->front == pq->rear) { free(pq->front); pq->front = pq->rear = NULL; } else { QueueNode* next = pq->front->next; free(pq->front); pq->front = next; }}//获取队列头元素QDataType QueueFront(Queue* pq){ assert(pq); assert(!QueueEmpty(pq)); return pq->front->data;}//获取队列尾元素QDataType QueueBack(Queue* pq){ assert(pq); assert(!QueueEmpty(pq)); return pq->rear->data;}//获取队列中有效元素个数int QueueSize(Queue* pq){ assert(pq); int size = 0; QueueNode* cur = pq->front; while (cur) { size++; cur = cur->next; } return size;}//队列判空int QueueEmpty(Queue* pq){ assert(pq); return pq->front == NULL ? 1 : 0;}//队列销毁void QueueDestory(Queue* pq){ assert(pq); QueueNode* cur = pq->front; while (cur) { QueueNode* next = cur->next; free(cur); cur = next; } pq->front = pq->rear = NULL;}
Test.c文件
#include "Queue.h"int main(){ Queue q; QueueInit(&q); QueuePush(&q, 1); QueuePush(&q, 2); QueuePush(&q, 3); QueuePush(&q, 4); QueuePush(&q, 5); while (!QueueEmpty(&q)) { int front = QueueFront(&q); QueuePop(&q); printf("%d ", front); } printf("\n"); QueueDestory(&q); return 0;}
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年03月14日 15时36分58秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
花1亿扶持优质红人,如涵推动网红经济出圈之路有何深意?
2019-03-03
AMD、Intel、NVIDIA芯片三巨头内战
2019-03-03
颜值经济转向身材经济,医美的第二曲线来了
2019-03-03
开门红财报下,贝壳找房的春天依然有点冷
2019-03-03
B站财报:内容与商业的艰难抉择
2019-03-03
虾米逝去:透视在线音乐的下一场战争
2019-03-03
抢滩抖音、B站,快手港股IPO进程加速
2019-03-03
智能穿戴的结局依然充满悬念
2019-03-03
Linux中的虚拟内存机制和内存映射
2019-03-03
Android系统启动系列5 SystemServer进程下
2019-03-03
Android四大组件系列9 ContentProvider原理
2019-03-03
理解PendingIntent
2019-03-03
Android SurfaceFlinger4 提交Buffer
2019-03-03
深入理解 ClientLifecycleManager 机制
2019-03-03
android基础知识回顾--ContentProvider简单用法
2019-03-03
压缩解压
2019-03-03
js try{}catch(){}finally{}语句
2019-03-03
ES6 块级绑定(二)
2019-03-03
ES6 函数模块(四)
2019-03-03
基于遗传算法(deap)的配词问题与deap框架
2019-03-03