东北大学数据结构实验(副本).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
课程编号:B080101050 1. 实验目的 理解队列的概念以及用法 熟练运用队列先进先出模拟打印机的工作过程 实验二 理解图的概念 理解并掌握图的存储并利用邻接表来存储图的信息 理解并掌握Dijkstra算法运用 2. 实验内容 2.1打印机模拟程序的内容与步骤 简短明确地写出实验的内容 模拟打印机打印的过程,以先来先服务的策略来完成打印工作。先从一个文件中读取所有任务的大小与到达时间,并将其存储在workload队列中。使用一个计数器来模拟时间的流逝,当当前时间与workload队列中的一个任务的到达时间相等的时候,该任务被弹出,并被压入到另一个等待执行的队列中。该等待执行的队列以先入先出的准则依次弹出任务并执行。最后计算出任务总数与,总等待时间,平均等待时间。 简短描述抽象数据类型或设计的函数描述,说明为什么要使用这种抽象数据类 型,并说明你的解决设想 ①一个simulator的抽闲类和它的实现类fifo类②两个队列一个workload队列一个是等待执行队列Workload队列中存放的是所有的打印任务,通过文件读取并保存。而等待执行队列则是为了实现FIFO功能的队列,即时间小的就先被压入等待执行队列,自然也就先被pop并执行。 解决设想: 利用一个int型变量模拟时间的流逝,然后当等待执行队列为空的时候,就不断循环检查workload队列中是否有任务到达,若有则将其弹出并push进等待执行队列。而当等待执行队列中有任务时则执行它,并且同时判断workload队列中是否有任务到达。若workload和等待执行队列同时为空了,则程序结束。 简短明确地写出你实验所采用的存储结构及其用途,详细说明其中的属性的含 义。 ①job类封装了一个任务的所有属性。包括任务的大小和该任务的用户:任务的大小即为该打印任务一共需要打印的页数,而该任务来自哪个计算机。 ②event类封装了一个打印事件的所有属性 而一个打印事件则需要包含一个待执行的任务和该任务到达的时间。打印的时候 就是根据这些信息来执行它。而待执行的任务属性即是一个任务对象,而该任务到达的时间即是该任务在某个时间到达打印机,并等待被执行。 ③simulator类封装了所有打印机的操作包括加载任务文件执行打印任务 等 时间到时,将该任务pop并push到等待执行队列中。在该队列中自然就按FIFO 的策略来执行。 2.2欧洲旅行实验的内容与步骤 (1) 简短明确地写出实验的内容 邻接表来存储整个图的信息,并用一个map对象来存储各个城市的信息,包括它上一个城市,从起点到该城市的费用和距离。最后利用 (2) 简短描述你在实验中使用的数据结构及算法的基本原理。 _city属性来找到 (3)描述你采用中的什么容器或者类实现图的存储,在算法应用过程中使用什么 数据结构或算法提高算法的效率。 我们使用我们使用了邻接表的数据结构并使用了优先级队列来实现下一个最短路径的点的快速查找极大地提高了算法的效率实验 8.1 调试软件名称 12.11 4. 实验 而空间复杂度为n+2。也就是任务的个数+队列个数。 此算法的巧妙之处就在于,并没有以计数器逐渐递增的方式来模拟时间的流逝,而是消耗多少时间,计数器直接加上该值,并不是等待计数器累加到该值才执行任务。 你在调试过程中发现了怎样的问题?又做了怎样的改进(要求写出具体的事例) 在算平均等待时间的时候把该总时间的类型设置成了整型导致平均等待时间算错 你的实现是否具有可扩展性,如针对多个打印队列的仿真程序? 本实现具有可扩展性即只要在原来判断单个打印队列是否为空的基础上加上语句即同时判断是否所有打印队列同时为空如果都为空则循环判断所有workload队列中任务是否已到达时间,若到达了时间则弹出并push到相应的打印队列中这就是由原来的单个workload判断变成了循环判断多个workload 主要函数为calc_route函数该函数运用的算法为 该算法从起点开始遍历,然后重新计算与该点相连的所有点到起始点的距离,然后把这些点都push到优先级队列中,利用优先级队列的排序功能,我们只需要取出优先级队列中顶部的点,并将其标记为已访问过,然后在访问与该点相连的所有点,再次重复上述过程。即不断寻找下一个离起点最近的点,并将其标记为true。 该算法的时间复杂度为O(n) = 2n(n为边数)。即每次都要循环遍历与该点相连的所有点所以对于两个点之间的那条边需要被遍历两次虽然只有其中一次才会执行其中的语句而2倍边数 此算法的巧妙之处在于利用了优先级队列这可以很方便地选取出下一个离起点最短的点 (2) 你在调试过程中发现了怎样的问题?又做了怎样的改进? 问题 解决之道:将其标记为true。

您可能关注的文档

文档评论(0)

0520 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档