【408考点之数据结构】队列在操作系统中的任务调度和树的层次遍历

队列在操作系统中的任务调度

在操作系统中,任务调度是一个关键功能,队列常用于管理和调度任务,确保任务按照一定顺序执行。常见的调度算法包括先来先服务(FCFS)、短作业优先(SJF)、轮转调度(RR)等。队列在这些调度算法中的应用主要体现在任务的组织和调度上。

任务调度示例题目

题目1:假设有以下任务到达时间和执行时间,使用FCFS调度算法计算各任务的等待时间和周转时间。

  • 任务A:到达时间0,执行时间4
  • 任务B:到达时间1,执行时间3
  • 任务C:到达时间2,执行时间2
  • 任务D:到达时间3,执行时间1

解答

  1. 按照到达时间顺序排队:A -> B -> C -> D
  2. 计算等待时间和周转时间:
    • 任务A:等待时间0,周转时间4
    • 任务B:等待时间3,周转时间6
    • 任务C:等待时间5,周转时间7
    • 任务D:等待时间6,周转时间7

题目2:使用RR调度算法(时间片为2)计算各任务的等待时间和周转时间。

  • 任务A:到达时间0,执行时间4
  • 任务B:到达时间1,执行时间3
  • 任务C:到达时间2,执行时间2
  • 任务D:到达时间3,执行时间1

解答

  1. 按到达时间顺序排队并按照时间片调度:
    • 时间0-2:任务A执行,剩余2
    • 时间2-4:任务B执行,剩余1
    • 时间4-6:任务C执行,完成
    • 时间6-7:任务D执行,完成
    • 时间7-8:任务A执行,完成
    • 时间8-9:任务B执行,完成
  2. 计算等待时间和周转时间:
    • 任务A:等待时间5,周转时间9
    • 任务B:等待时间5,周转时间8
    • 任务C:等待时间2,周转时间4
    • 任务D:等待时间3,周转时间4

树的层次遍历

树的层次遍历(广度优先遍历)是一种按层次顺序遍历树中节点的算法,通常使用队列实现。遍历过程中,从根节点开始,依次访问每层的所有节点。

层次遍历示例题目

题目1:给定一棵二叉树,按层次遍历输出各节点的值。

      1/ \2   3/ \ / \4  5 6  7

解答

  1. 初始化队列并将根节点入队。
  2. 重复以下步骤直到队列为空:
    • 从队列中取出一个节点,访问其值并将其子节点入队。
  3. 遍历顺序:1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7

代码示例

#include <stdio.h>
#include <stdlib.h>typedef struct TreeNode {int val;struct TreeNode *left, *right;
} TreeNode;typedef struct QueueNode {TreeNode *treeNode;struct QueueNode *next;
} QueueNode;typedef struct {QueueNode *front, *rear;
} Queue;void initQueue(Queue *q) {q->front = q->rear = NULL;
}int isEmpty(Queue *q) {return q->front == NULL;
}void enqueue(Queue *q, TreeNode *node) {QueueNode *newNode = (QueueNode *)malloc(sizeof(QueueNode));newNode->treeNode = node;newNode->next = NULL;if (isEmpty(q)) {q->front = q->rear = newNode;} else {q->rear->next = newNode;q->rear = newNode;}
}TreeNode *dequeue(Queue *q) {if (isEmpty(q)) return NULL;QueueNode *temp = q->front;q->front = q->front->next;if (q->front == NULL) {q->rear = NULL;}TreeNode *treeNode = temp->treeNode;free(temp);return treeNode;
}void levelOrderTraversal(TreeNode *root) {if (root == NULL) return;Queue q;initQueue(&q);enqueue(&q, root);while (!isEmpty(&q)) {TreeNode *current = dequeue(&q);printf("%d ", current->val);if (current->left != NULL) enqueue(&q, current->left);if (current->right != NULL) enqueue(&q, current->right);}
}int main() {TreeNode n1 = {1, NULL, NULL};TreeNode n2 = {2, NULL, NULL};TreeNode n3 = {3, NULL, NULL};TreeNode n4 = {4, NULL, NULL};TreeNode n5 = {5, NULL, NULL};TreeNode n6 = {6, NULL, NULL};TreeNode n7 = {7, NULL, NULL};n1.left = &n2;n1.right = &n3;n2.left = &n4;n2.right = &n5;n3.left = &n6;n3.right = &n7;levelOrderTraversal(&n1);return 0;
}

题目2:给定一棵二叉树,按层次遍历输出每层的节点值。

      1/ \2   3/ \   \4   5   6

解答

  1. 初始化队列并将根节点入队。
  2. 重复以下步骤直到队列为空:
    • 获取当前队列的长度(表示当前层的节点数)。
    • 遍历当前层的所有节点,依次出队并访问其值,同时将其子节点入队。
  3. 遍历顺序:
    • 第一层:1
    • 第二层:2 3
    • 第三层:4 5 6
      队列在操作系统中的任务调度和树的层次遍历中都有重要应用。通过示例题目和解答,我们可以更好地理解队列在这些场景中的具体应用和实现方法。希望这些内容对你理解和应用队列有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/31986.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Elastic字段映射(_source,doc_value,fileddata,index,store)

Elastic字段映射&#xff08;_source,doc_value,filed_data,index,store&#xff09; _source&#xff1a; source 字段用于存储 post 到 ES 的原始 json 文档。为什么要存储原始文档呢&#xff1f;因为 ES 采用倒排索引对文本进行搜索&#xff0c;而倒排索引无法存储原始输入…

程序员进阶书单

个人博客传送门 - 程序员进阶书单 翻遍知乎讨论贴、hackernews 吹水区、amazon best seller、豆瓣书单、大佬博客&#xff0c;经过一番不懈努力&#xff0c;汇总了一份质量过硬的程序员进阶书单&#xff0c;各位老铁先码住&#xff0c;慢慢看。 殿堂级 The Art of Computer …

什么概率密度函数?

首先我们来理解一下什么是连续的随机变量&#xff0c;在此之前&#xff0c;我们要先理解什么是随机变量。所谓随机变量就是在一次随机实验中一组可能的值。比如说抛硬币&#xff0c;我们设正面100&#xff0c;反面200&#xff0c;设随机变量为X&#xff0c;那么X{100,200}。 X是…

Vant:构建现代化移动端应用的理想选择

Vant&#xff1a;构建现代化移动端应用的理想选择 引言&#xff1a; 在当今移动互联网时代&#xff0c;移动应用的开发已经成为了许多企业和开发者的重要任务。为了提高开发效率和用户体验&#xff0c;选择一款优秀的UI组件库是至关重要的。而Vant作为一款流行的移动端UI组件…

STM32学习笔记(十)--I2C、IIC总线协议详解

概述&#xff1a;Inter Integrated Circuit&#xff0c;一组多从 多组多从 有应答 是一种同步&#xff08;具有时钟线需要同步时钟SCL&#xff09;、串行&#xff08;一位一位的往一个方向发送&#xff09;、半双工&#xff08;发送接收存在一种&#xff09;通信总线。 &…

【调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法】

调试笔记-系列文章目录 调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 文章目录 调试笔记-系列文章目录调试笔记-20240618-Windows-pnpm 更新出现 Cannot find module 问题的解决方法 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调…

qmt量化交易策略小白学习笔记第46期【qmt编程之期货行情数据--如何获取5档盘口行情、期货结算价与持仓量】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取5档盘口行情 …

【杂记-浅谈ICMP互联网控制消息协议】

ICMP互联网控制消息协议 一、ICMP协议概述1、定义2、工作原理3、报文格式 二、ICMP协议的应用场景1、Ping命令2、Traceroute命令3、错误报告4、MTU发现 三、ICMP协议的安全问题及防护措施1、安全威胁2、防护措施 一、ICMP协议概述 1、定义 ICMP&#xff0c;Internet Control …

GeoJson 地图地理信息数据获取

效果图&#xff1a; 获取渠道&#xff1a; 通过阿里数据可视化平台获取通过Vector Maps获取通过geojson来获取 1、通过阿里数据可视化平台获取 2、通过Vector Maps获取 3、通过geojson获取

lru_cache装饰器

LRU算法原理 LRU(Least Recently Used)算法是一种缓存淘汰策略。 用于在有限的缓存空间中管理数据对象。 lru_cache用法 Python的缓存&#xff08;lru_cache&#xff09;是一种装饰在被执行的函数上&#xff0c;将其执行的结果缓存起来&#xff0c;当下次请求的时候&#xf…

数据通信与网络(五)

交换机功能&#xff1a; 地址学习&#xff08;端口/MAC地址映射表&#xff09; 通信过滤&#xff08;基于端口/MAC地址映射表&#xff09; 生成树协议&#xff08;断开环路&#xff09; 隔离冲突域 生成树协议 隔离冲突域 交换机配置模式(用不同级别的命令对交换机进行配置) 普…

如何一步一步将Python中的应用打包成安卓的APK安装包文件

一、首先&#xff0c;按照如下链接操作 Python 应用打包成 APK【全流程】_python打包成apk-CSDN博客 二、运行 buildozer init会报错buildozer命令找不到&#xff0c;明明已经安装 解决方法&#xff1a; 这里重新创建一个conda环境 Installation — Buildozer 0.11 docum…

Oracle基本语法(SQLPlus)

目录&#xff1a; 前言&#xff1a; 准备工作&#xff1a; 登录&#xff1a; 1.打开SQL Plus命令行工具 第一种方式&#xff1a; 第二种方式&#xff1a; 2.以不同用户登录 SYSTEM&#xff08;普通管理员&#xff09;&#xff1a; SYS(超级管理员)&#xff1a; 不显示…

408计算机组成原理

todo:有逻辑的分门别类的整理笔记&#xff0c;方便复习 总 理解不了就直接背下来&#xff0c;学越多就越能理解 计算机系统概述 简要目录 基本概念 字长 MAR MDR PC IR CU ALU 通用寄存器、标志寄存器、标志控制器 ACC 地址译码器 通用寄存器 PU C语言编译过程 数据通路带…

DAY10-力扣刷题

1.最后一个单词的长度(简单) 58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子…

【顺序表】05 删除有序顺序表中值在s与t之间的数

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux算法题上机准备 &#x1f618;欢迎 ❤️关注 &#x1f44d;点赞 &#x1f64c;收藏 ✍️留言 题目 从有序顺序表中删除其值在给定值s与t之间(要求s<t)的所有元素&#xff0c;若s或t不合…

deepspeed win11 安装

目录 git地址: aio报错: 编译 报错 ops已存在: 修改拷贝代码: git地址: Bug Report: Issues Building DeepSpeed on Windows Issue #5679 microsoft/DeepSpeed GitHub aio报错: setup.py 配置变量 os.environ[DISTUTILS_USE_SDK]=1 os.environ[DS_BUILD_AIO]=…

Unity3d自定义TCP消息替代UNet实现网络连接

以前使用UNet实现网络连接,Unity2018以后被弃用了。要将以前的老程序升到高版本,最开始打算使用Mirro,结果发现并不好用。那就只能自己写连接了。 1.TCP消息结构 (1). TCP消息是按流传输的,会发生粘包。那么在发射和接收消息时就需要对消息进行打包和解包。如果接收的消息…

日期工具类:获取 当前周 | 上一周 | 下一周 的第一天(周一)和最后一天(周天)

问题背景 获取 当前周 | 上一周 | 下一周 的第一天&#xff08;周一&#xff09;和最后一天&#xff08;周天&#xff09;。 例如&#xff1a; 输入&#xff1a;2024-6-21, current 输出&#xff1a;{"firstDay": "2024-6-17","lastDay": &qu…

springboot代理配置,本地访问测试环境数据库、测试环境elasticsearch

springboot代理配置&#xff0c;本地访问测试环境数据库、测试环境elasticsearch 背景 本地项目启动需要直接连接测试环境的数据库、ES以及其他资源 配置 ES和其他一些资源的访问通过springboot配置走代理访问。比如我这里 EnableAsync EnableScheduling SpringBootApplic…