C语言-手写任务队列

文章目录

  • C语言-手写任务队列
    • 基本概念
    • 头文件
    • 队列实现

基本概念

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

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

队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低需要挪动数据O(N)。而链表结构头删只需要O(1)。尾插定义一个尾指针,也只需要O(1)。

头文件


#ifndef STUDY_TASK_QUEUE_H
#define STUDY_TASK_QUEUE_H//任务结构体
typedef struct Task
{void (*function)(void* arg);void* arg;
}Task;typedef struct QueueNode
{struct QueueNode* next;Task *task; //任务
}QNode;
typedef struct Queue//
{QNode* head;//头指针QNode* tail;//尾指针int size;//队列大小
}Queue;Queue* createQueue();
void enqueue(Queue* queue, Task* task);
Task* dequeue(Queue* queue);
int getQueueSize(Queue* queue);
int isQueueEmpty(Queue* queue);
Task* getQueueHead(Queue* queue);
Task* getQueueTail(Queue* queue);
void clearQueue(Queue* queue);
void destroyQueue(Queue* queue);#endif //STUDY_TASK_QUEUE_H

队列实现

//
// Created by Administrator on 2022/9/11.
//#include "task_queue.h"
#include <malloc.h>
#include <stdio.h>
//其操作特性为先进先出,并且只允许在队尾进,队头出。//创建任务队列
Queue* createQueue(){Queue* queue = (Queue*)malloc(sizeof(Queue));queue->head = NULL;queue->tail = NULL;queue->size= 0;return queue;
}//任务入队列
void enqueue(Queue* queue, Task* task){QNode* node = (QNode*)malloc(sizeof(QNode));node->task = task;node->next = NULL;if(queue->head == NULL){queue->head = node;queue->tail = node;}else{queue->tail->next = node;queue->tail = node;}queue->size++;
}//任务出队列
Task* dequeue(Queue* queue){if(queue->head == NULL){return NULL;}QNode* node = queue->head;Task* task = node->task;queue->head = node->next;if(queue->head == NULL){queue->tail = NULL;}free(node);queue->size--;return task;
}//获取队列大小
int getQueueSize(Queue* queue){return queue->size;
}//判断队列是否为空
int isQueueEmpty(Queue* queue){return queue->size == 0;
}
//获取队列头
Task* getQueueHead(Queue* queue){if(queue->head == NULL){return NULL;}return queue->head->task;
}
//获取队列尾
Task* getQueueTail(Queue* queue){if(queue->tail == NULL){return NULL;}return queue->tail->task;
}
//清空队列
void clearQueue(Queue* queue){while(queue->head != NULL){QNode* node = queue->head;queue->head = node->next;free(node);}queue->tail = NULL;queue->size = 0;
}//销毁队列
void destroyQueue(Queue* queue){QNode* node = queue->head;while(node != NULL){QNode* temp = node;node = node->next;free(temp);}free(queue);
}

点赞 -收藏-关注-便于以后复习和收到最新内容 有其他问题在评论区讨论-或者私信我-收到会在第一时间回复 在本博客学习的技术不得以任何方式直接或者间接的从事违反中华人民共和国法律,内容仅供学习、交流与参考 免责声明:本文部分素材来源于网络,版权归原创者所有,如存在文章/图片/音视频等使用不当的情况,请随时私信联系我、以迅速采取适当措施,避免给双方造成不必要的经济损失。 感谢,配合,希望我的努力对你有帮助^_^

C语言-手写任务队列相关推荐

  1. C语言手写二叉树(链式存储结构)

    C语言手写二叉树(链式存储结构) 二叉树结构 二叉树基本运算 代码 图例(main函数执行过程如下:) 阶段I 阶段II 阶段III 阶段IV 阶段V 先序遍历输出过程 二叉树结构 二叉树可以用顺序存 ...

  2. C语言手写自定义三维数组

    C语言手写三维数组 本文目的是通过C语言的结构体和动态数组,实现自定义类型的三维数组TripleArray及其基本运算 本文目的是通过C语言的结构体和动态数组,实现自定义类型的三维数组TripleAr ...

  3. C语言手写SDS字符串的实现思路

    C语言手写SDS字符串的实现思路 Simple Dynamic Strings (简称 SDS) 是一个 C 语言封装的的字符串,它增强了 C 语言字符串处理的能力. SDS 的 C 语言实现通常包括 ...

  4. C语言手写栈、手写计算器

    C语言实现表达式求值 文章结构 C语言手写栈Struct Stack 后缀表达式求值 中缀表达式转后缀表达式 文章结构 本文尝试通过纯C语言写一个计算器,在Visual Studio和VScode运行 ...

  5. C语言手写魂斗罗(一)

    目录 1. 项目介绍 配套视频教程 2. 游戏效果演示 3. 项目准备 4. 创建项目 5. 实现游戏的启动界面 1. 项目介绍 使用C语言,手写魂斗罗经典游戏场景. 配套视频教程 视频讲解整个开发过 ...

  6. 柔宇发布“手写神器”柔记樱雪白特别版,支持7国语言手写识别

    深圳2018年9月26日电 /美通社/ -- 9月23日,柔宇科技在2018北京国际设计周期间首次对外发布柔宇科技的"柔性+"办公教育类升级新品 -- 柔记 RoWrite S 智 ...

  7. c语言手写指针和乘号,C-学会使用指针(示例代码)

    先说:唯手熟尔 指针 指针存储着一个内存空间的地址 定义一个指针 int a: int * p: 定义一个指针,只需在变量前面加一个 * 号.这里的指针只能存储一个存放整数的内存空间的地址 指针如何存 ...

  8. C语言手写快排算法,两个值时也可以使用哦!

    最近刷leetcode经常碰到排序问题,大家都知道排序算法中快速排序是效率很高的算法,因此快排写法是必须要掌握的哦! 解题思路 利用快排对数组进行排序. 快排:冒泡排序的改良. 快排目标:将数组从大到 ...

  9. C语言手写爱心-还原最新热剧撩妹代码

    目录 需求分析 代码效果 原理分析 爱心轨迹分析 轨迹测试 心形实现 动态心形分析 需求分析 最近这个爱心桥段火了!一个帅气高冷的学霸小哥,写了一个爱心代码,直接碾压了所有同学,并获得班花的迷之爱恋! ...

最新文章

  1. linux 系统崩溃完全没有操作空间的系统修复
  2. EasyStruct.js轻松创建可填入式html模板结构
  3. webpack里的module选项配置
  4. Py之keras-resnet:keras-resnet的简介、安装、使用方法之详细攻略
  5. 20121108团队博客(苏若)
  6. 前端学习(2732):重读vue电商网站42之添加富文本编辑器
  7. pb mysql 中文乱码_解决springmvc+mybatis+mysql中文乱码问题
  8. NOIP2015普及组第1题 45 金币 方法三(python3实现)
  9. 信息学奥赛一本通 2034:【例5.1】反序输出
  10. creat是什么意思中文翻译_英语create的中文是什么意思
  11. Extjs6(六)——增删查改之查询
  12. 根据on,获取选中的元素
  13. 基于TCP的网络编程
  14. CodeProject 精彩系列
  15. pci串口驱动安装失败_PCI并口卡驱动安装不上
  16. love2d 乒乓球游戏
  17. 关于魔兽的电脑优化配置方法
  18. CVPR2021 视频目标检测论文推荐
  19. c语言windows.h头文件详解
  20. Struts1.x 登录实验-无数据库版

热门文章

  1. centos7防火墙命令汇总
  2. IPVS调度算法之DH
  3. HTML学习笔记3:HTML基本骨架详解
  4. ubuntu16.04离线安装与卸载docker和nvidia-docker
  5. 全国公司评论之2006年度全国排行榜
  6. 目前最流行的Web 数据接口 API 设计规范:RESTful
  7. 如何用计算机做排列函数,25个电脑办公技巧 办公族必懂的电脑小技巧 (全文)
  8. java sortby_使用sortBy对JavaRDD进行排序
  9. 学习weka(7):weka数据预处理方法
  10. 《我编程,我快乐》摘抄和感想