当前位置: 首页 > news >正文

数据结构入门——05队列

1.队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先
进先出FIFO(First In First Out)

  • 入队列:进行插入操作的一端称为队尾
  • 出队列:进行删除操作的一端称为队头

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,
出队列在数组头上出数据,效率会比较低。

2.链表实现队列

链表实现队列,需要用到链表进行连接,但队列只用链表的头和尾。

2.1队列的表示

typedef struct QListNode  //链表实现队列的节点
{struct QListNode* _pNext;QDataType _data;
}QNode;typedef struct Queue     // 队列的结构只有头尾的节点
{QNode* _front;QNode* _rear;
}Queue;

2.2 初始化队列

void QueueInit(Queue* pq)
{assert(pq);pq->head = pq->tail = NULL;
}

2.3 队尾入队列

void QueuePush(Queue* pq, QDataType x)
{assert(pq);QNode* newnode = (QNode*)malloc(sizeof(QNode));assert(newnode);newnode->data = x;newnode->next = NULL;if (pq->tail == NULL){assert(pq->head == NULL);pq->head = pq->tail = newnode;}else{pq->tail->next = newnode;pq->tail = newnode;}
}

2.4 队头出队列

void QueuePop(Queue* pq)
{assert(pq);assert(pq->head && pq->tail);if (pq->head->next == NULL){free(pq->head);pq->head = pq->tail = NULL;}else{QNode* next = pq->head->next;free(pq->head);pq->head = next;}
}

2.5 获取队列头部元素

QDataType QueueFront(Queue* pq)
{assert(pq);assert(pq->head);return pq->head->data;
}

2.6 获取队列队尾元素

QDataType QueueBack(Queue* pq)
{assert(pq);assert(pq->tail);return pq->tail->data;
}

2.7 获取队列中有效元素个数

size_t QueueSize(Queue* pq)
{assert(pq);QNode* cur = pq->head;size_t size = 0;while (cur){size++;cur = cur->next;}return size;
}

2.8 检测队列是否为空,如果为空返回非零结果,如果非空返回0

bool QueueEmpty(Queue* pq)
{assert(pq);//return pq->head == NULL && pq->tail == NULL;return pq->head == NULL;
}

2.9 销毁队列

void QueueDestory(Queue* pq)
{assert(pq);QNode* cur = pq->head;while (cur){QNode* next = cur->next;free(cur);cur = next;}pq->head = pq->tail = NULL;
}


 

http://www.lryc.cn/news/423210.html

相关文章:

  • 使用python MySQL 实现一个 key-value(string:json) 读写库
  • 实现:uniapp项目分享视频页面到微信,可以自定义分享的页面样式及内容
  • 【C++】—— 类与对象(五)
  • scp命令的使用
  • 定位和解决线上接口性能优化或者数据库性能优化的思路是什么?
  • 修改docker的/var/lib/docker/overlay2储存路径
  • 解决中国式报表难题,这款工具真的免费且好用
  • 图解Kafka | 彻底弄明白 Kafka 两个最重要的配置
  • 创建线程的三种方式
  • 官宣|Apache Flink 1.20 发布公告
  • HarmonyOS应用一之登录页面案例
  • KubeSphere 部署 Kafka 集群实战指南
  • 手把手教你安装音乐制作软件FL Studio 24.1.1.4285中文破解版
  • SDL 与 OpenGL 的关系
  • 考研数学 线性代数----行列式与矩阵
  • Golang实现简单的HTTP服务,响应RESTful请求判断形状大小
  • 使用C语言构建Lua库
  • 愤怒的江小白,这几年怎么了?
  • Unity教程(十)Tile Palette搭建平台关卡
  • 如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧
  • Linux应急响应检查工具
  • CP AUTOSAR标准之EEPROMAbstraction(AUTOSAR_SWS_EEPROMAbstraction)(更新中……)
  • 重启redis服务时报错:Failed to start redis.service: Unit not found
  • Hive3:识别内部表、外部表及相互转换
  • Android笔试面试题AI答之Kotlin(7)
  • 高辐照整车太阳辐照模拟系统试验舱
  • 如何制作优秀的年终总结PPT?
  • 架构师第六周作业
  • 解密Java中介者模式:代码实例带你深入理解
  • 19c做好这件事,大幅提升Data Pump工作效率