使用数组来模拟队列
CPU模拟调度所有任务,总共n个任务,每个任务处理时间不同,最多处理t(时间片),如果t时间没有处理完毕
就把该任务移动到所有任务的后面
如果我们使用平时常用的队列,那么随着数据的不断进出,将出现溢出的现象
所以我们把数组形成一个环形的缓冲区,就是一维数组形成一个圆圈,另外我们为了区分队列的空和满,我们规定头和尾之间至少有一个空位

#include <iostream>#define LEN 1000using namespace std;//任务结构体:任务名称和需要处理的时间
typedef struct pp
{char name[50];int t;
} P;P Q[LEN];//定义一个任务队列
int head,tail,n;//当头,尾的索引超过最大值的时候就置零(取模)
//入队列
void enqueue(P x)
{Q[tail]=x;tail=(tail+1)%LEN;
}
//出队列(返回任务)
P dequeue()
{P x=Q[head];head=(head+1)%LEN;return x;
}int main()
{int elapse=0;//CPU总耗时int min_t;//CPU处理时间为两者最小时间P myQ;printf("请输入有多少个任务?\n");scanf("%d",&n);printf("请分别输入任务名称和需要运行的时间\n");//将所有任务添加至队列for(int i=0; i<n; i++){scanf("%s %d",Q[i].name,&Q[i].t);//scanf("%d",&Q[i].t);}head=0;tail=n;while(head!=tail){myQ=dequeue();min_t=min(100,myQ.t);//时间片设定为100ms,myQ.t-=min_t;//剩余时间elapse+=min_t;//总共已处理的时间//未处理完的重新添加到队列if(myQ.t>0){enqueue(myQ);}else{printf("%s 已用时间:%dms\n",myQ.name,elapse);}}cout << "任务完成!" << endl;return 0;
}

下面使用标准库里面的队列,来实现上述CPU对任务队列的处理

#include <iostream>
#include<queue>using namespace std;int main()
{string name;int n,t;queue<pair<string,int>> Q;//任务队列printf("请输入有多少个任务?\n");cin>>n;printf("请分别输入任务名称和需要运行的时间\n");for(int i=0; i<n; i++){cin>>name>>t;Q.push(make_pair(name,t));}//pair保存成对数据的结构体模板pair<string,int> myQ;//myQ.first是任务名称,myQ.second是任务运行时间int elapse=0;int min_t;while(!Q.empty()){myQ=Q.front();Q.pop();min_t=min(myQ.second,100);//运行时间myQ.second-=min_t;//剩余时间elapse+=min_t;//总耗时if(myQ.second>0){Q.push(myQ);}else{cout<<myQ.first<<" 运行时间"<<elapse<<endl;}}cout << "任务完成!" << endl;return 0;
}

数据结构:队列的了解与示例(CPU处理任务的时间)相关推荐

  1. java 数据队列_Java 数据结构 - 队列

    Java 数据结构 - 队列 我们今天要讲的数据结构是队列,比如 Java 线程池任务就是队列实现的. 1. 什么是队列 和栈一样,队列也是一种操作受限的线性结构.使用队列时,在一端插入元素,而在另一 ...

  2. 数据结构——队列的C语言代码实现

    系列文章目录 数据结构--顺序表的C语言代码实现 数据结构--八种链表的C语言代码实现 数据结构--栈的C语言代码实现 数据结构--队列的C语言代码实现 数据结构--堆的C语言代码实现 文章目录 系列 ...

  3. java 数据结构_Java版-数据结构-队列(数组队列)

    前言 看过笔者前两篇介绍的 Java版数据结构 数组和 栈的盆友,都给予了笔者一致的好评,在这里笔者感谢大家的认可!!! 由于本章介绍的数据结构是 队列,在队列的实现上会基于前面写的 动态数组来实现, ...

  4. 数据结构——队列的C++实现

    数据结构--队列的C++实现 \qquad队列的创建.判断是否为空或者满.入队和出队操作的C++实现. #include<iostream> using namespace std;//1 ...

  5. 数据结构队列代码_代码简介:队列数据结构如何工作

    数据结构队列代码 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的故事 ...

  6. java循环队列_Java版-数据结构-队列(循环队列)

    前情回顾 在上一篇,笔者给大家介绍了数组队列,并且在文末提出了数组队列实现上的劣势,以及带来的性能问题(因为数组队列,在出队的时候,我们往往要将数组中的元素往前挪动一个位置,这个动作的时间复杂度O(n ...

  7. 第七周--数据结构--队列数组

     /*    *第七周--数据结构--队列数组     *Copyright (c) 2015 烟台大学计算机与控制工程学院    *All right reserved.    *文件名称:li ...

  8. 美洽消息推送 php,GitHub - Meiqia/MeiqiaSDK-Push-Signature-Example: 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例。...

    MeiqiaSDK-Push-Signature-Example 美洽 SDK 3.0 推送的数据结构签名算法,多语言示例. 该项目是 美洽 SDK 3.0 推送的数据结构签名的算法,具体推送的数据结 ...

  9. 数据结构-红黑树插入结点示例

    数据结构-红黑树插入结点示例 1.红黑树简介 2.在线可视化生成红黑树工具 3.红黑树插入结点性质和规则 3.1.红黑树插入结点性质 3.2.红黑树插入结点规则 4.红黑树插入结点示例 4.1.红黑树 ...

最新文章

  1. mac redies install
  2. linux运维基础篇 unit14
  3. golang连接postgresql too many client_MySQL和PostgreSQL压测性能对比
  4. python详细教程-Python入门教程:超详细1小时学会Python
  5. 【Android 组件化】路由组件 ( 使用 JavaPoet 生成路由表类 )
  6. UA MATH564 概率论 计算至少有一个发生的概率:容斥原理与庞加莱公式
  7. mysql附加服务器失败_今天,启动MySQL服务器失败,
  8. 二叉树的基本理论知识
  9. python样本不均衡_使用Python中的smote处理正负样本之间的不平衡,python,实现,失衡,问题...
  10. mysqldump备份原理6
  11. PostgreSQL 9.6 IO Hang问题浅析与优化
  12. 使用python制作ArcGIS插件(3)ArcPy的使用说明
  13. 如何改变“只收藏不阅读”的习惯
  14. 联想摄像头无法一直运行
  15. keil+stm32cubemx创建STM32F767芯片的RT-Thread工程
  16. Twitter 没有在美国总统竞选期间宕机
  17. 小知识·typec耳机原理
  18. python血脉贲张的cosplay小姐姐图片
  19. 电大计算机基础光盘电脑安装,电大《计算机应用技术基础》第一章 计算机的硬件安装...
  20. python用三重引号_python三引号

热门文章

  1. struts2基础----自定义拦截器
  2. JOSN的stringify()和parse()方法
  3. 支付宝ios SDK官方下载页面
  4. Extjs 4 MVC中全局配置文件
  5. 利用反射动态实例化类执行方法并传值
  6. Google Go 初识
  7. smartphone 创建快捷方式 shorcut(1)
  8. 微服务升级_SpringCloud Alibaba工作笔记0010---Gateway配置动态路由
  9. RabbitMq学习笔记005---登录rabbitmq报错User can only log in via localhost
  10. Android零碎要点---eclipse两个小技巧