东北大学数据结构实验一_第1页
东北大学数据结构实验一_第2页
东北大学数据结构实验一_第3页
东北大学数据结构实验一_第4页
东北大学数据结构实验一_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告

课程名称:数据结构班级:软件赴日实验成绩:

实验名称:打印机队列模拟学号:201247批阅教师签字:

程序的设计

实验编号:实验一姓名:袁实验日期:2014年5月24日

指导教师:组号:实验时间:时分一时分

一、实验目的

对队列的理解

对STL中的queue的使用

实验仿真一个网络打印过程

二、实验内容与实验步骤流程图

这个任务队列的测试使用STL队列适配器。程序要求完成模拟的实现

共享打印机。这个打印机使用先进先出队列。仿真是通过读取和处理

事件数据文件的列表。一个有效的数据文件中的每一行包含信息打印

作业和提交这份工作的时间。

具体地说,每一行中包含的信息是提交工作的时间(以秒为单位),和

在页面的工作长及工作的计算机的名称。在模拟的开始,每个这些事

件的每一个应该被程序所读,存储在继承工作负载队列。程序应该通

过循环递增计数器或whiIe-loop模拟时间的流逝。程序应该将计数

器初始化为零,然后依次增加1秒。当模拟等于当前时间的打印作业

的提交时间在工作队列的前面,一个打印作业完成。当这一切发生的

时候,从工作队列取出这个事件,然后把它放在另一个队列<event》对

象。这个队列<6丫69>对象存储已完成的打印作业。当程序仿真其他

的打印工作的时候,这些工作在队列等待。

流程图:

Win8,VisualC++6.0

四、实验过程与分析

(1)实验主要函数及存储结构

main,cpp-包括主函数和主要的功能

simuIator.h-仿真类的声明

simuIator.cpp-仿真类的定义

event,h-事件类的声明

event,cpp-事件类的定义

job.h-作业类的声明

job.cpp-作业类的定义

arbitrary,run-包括任意打印作业数的数据文件

arbitrary.out-输出arbitrary,run

bigfirst.run-包括打印较大作业的数据文件

bigfirst.out-输出bigfirst.run

(2)实验代码

#ifndefFIFO_H//fifo.h

#defineFIFO_H

#include"simulator.h"

classfifo:publicsimulator{

protected:

queue<event>waiting;

priority_queue<event>priority_waiting;

public:

fifo(intseconds_per_page);

voidsimulate(stringfile);

);

booloperator<(eventevtleft,eventevtright);

#endif

#include"fifo.h"//fifo.cpp

#include<FSTREAM>

usingnamespacestd;

fifo::fifo(intseconds_per_pace):simulator(seconds_per_page]{

}

voidfifo::simulate(stringfile){

intfinish_time=0;

floataggjatency=0;

inttotaljob=0;

eventevt;

if(file.find("arbitrary")!=string::npos){

stringoutfile="arbitrary.out";

ofstreamosf(outfile.c_str());

loadworkload(file);

osf<<"FIFOSimulation\n"<<endl;

for(inttime=l;!waiting.empty()||!workload.empty();time++){

while(!workload.empty()&&time==workload.front().arri\zal_time()){

evt=workload.front();

osf<<"\tArriving:"<<evt.getjob()<<"at"<<time<<"seconds'^<endl;

waiting.push(workload.front());

workload.pop();

)

if(!waiting.empty()&&time>=finish_time){

totaljob++;

evt=waiting.front();

aggjatency+=time-ext.arrivaLtimeO;

osf<<"\tServicing:"<<evt.getjob()<<"at"<<time<<"seconds"<<endl;

waiting.pop();

finish_time=time+evt.getjob().getnumpages()*seconds_per_page;

)

osf<<"\n\ttotaljob"<<totaljob<<endl;

osf<<"\taggregatelatency:"<<agg_latency<<"seconds'^<endl;

osf<<"\tmeanlatency:"«agg_latency/totaljob<<"seconds"<<endl;

osf.close();

cout<<"Thelogfilenameisarbitrary.out"<<endl;

return;

)

if(file.find("bigfirst")!=string::npos){

stringoutfile="bigfirst.out";

ofstreamosf(outfile.c_str());

loadworkload(file);

osf<<"FIFOSimulation\n"<<endl;

for(inttime=1;!priority_waiting.empty()11!workload.empty;);time++){

while(!workload.empty()&&time==workload.front().arri^al_time()){

evt=workload.front();

osf<<"\tArriving:"<<evt.getjob()<<"at"<<time<<nseconds'^<endl;

priority_waiting.push(workload.front());

workload.pop();

)

if(!priority_waiting.empty()&&time>=finish_time){

totaljob++;

evt=priority_waiting.top();

aggjatency+=time-evt.drrival_time();

osf<<"\tServicing:"<<evt.getjob()<<"at"<<time<<"seconds'^<endl;

priority_waiting.pop();

finish_time=time+evt.getjob().getnumpages()*seconds_per_page;

)

)

osf<<"\n\ttotaljob"<<totaljob<<endl;

osf<<"\taggregatelatency:"<<agg_latency<<"seconds"<<endl;

osf<<"\tmeanlatency:"<<agg_latency/totaljob<<"seconds"<<endl;

osf.close();

cout<<"Thelogfilenameisbigfirst.out"<<endl;

return;

}

cerr<<"lheprogramdon'tknowwhatalgorithmtouse"<<erdl;

cerr<<"Youshouldspecifythefilenamewitharbitraryorbigfirst"<<endl;

)

booloperator<(eventevtleft,eventevtright){

returnevtleft.getjob().getnumpages()<evtright.getjob().getnumpages();

)

五、实验结果总结

经测试,功能较为完整。代码流程简图如下:

通过这次实验,我了解了有关队列方面的知识。掌握了队列的逻辑结

构,抽象数据

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论