- 相關(guān)推薦
北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告線性表
實(shí)驗(yàn)報(bào)告;課程名稱:數(shù)據(jù)結(jié)構(gòu)班級(jí):軟件工程實(shí)驗(yàn)成績(jī):;1206;實(shí)驗(yàn)名稱:打印機(jī)隊(duì)列模擬學(xué)號(hào):20124848批;程序的設(shè)計(jì);實(shí)驗(yàn)編號(hào):實(shí)驗(yàn)一姓名:實(shí)驗(yàn)日期:2014年5月2;一、實(shí)驗(yàn)?zāi)康?對(duì)隊(duì)列的理解;對(duì)STL中的queue的使用;實(shí)驗(yàn)仿真一個(gè)網(wǎng)絡(luò)打印過(guò)程;二、實(shí)驗(yàn)內(nèi)容與實(shí)驗(yàn)步驟流程圖;這個(gè)任務(wù)隊(duì)列的測(cè)試使用STL隊(duì)列適配器;具體地說(shuō),每一行中包含的信息是
實(shí) 驗(yàn) 報(bào) 告
課程名稱:數(shù)據(jù)結(jié)構(gòu) 班級(jí):軟件工程實(shí)驗(yàn)成績(jī):
1206
實(shí)驗(yàn)名稱:打印機(jī)隊(duì)列模擬學(xué)號(hào):20124848 批閱教師簽字:
程序的設(shè)計(jì)
實(shí)驗(yàn)編號(hào):實(shí)驗(yàn)一 姓名: 實(shí)驗(yàn)日期:2014年5 月 24 日
一、實(shí)驗(yàn)?zāi)康?/strong>
對(duì)隊(duì)列的理解
對(duì)STL中的queue的使用
實(shí)驗(yàn)仿真一個(gè)網(wǎng)絡(luò)打印過(guò)程
二、實(shí)驗(yàn)內(nèi)容與實(shí)驗(yàn)步驟流程圖
這個(gè)任務(wù)隊(duì)列的測(cè)試使用STL隊(duì)列適配器。程序要求完成模擬的實(shí)現(xiàn)共享打印機(jī)。這個(gè)打印機(jī)使用先進(jìn)先出隊(duì)列。仿真是通過(guò)讀取和處理事件數(shù)據(jù)文件的列表。一個(gè)有效的數(shù)據(jù)文件中的每一行包含信息打印作業(yè)和提交這份工作的時(shí)間。
具體地說(shuō),每一行中包含的信息是提交工作的時(shí)間(以秒為單位),和在頁(yè)面的工作長(zhǎng)及工作的計(jì)算機(jī)的名稱。在模擬的開始,每個(gè)這些事件的每一個(gè)應(yīng)該被程序所讀,存儲(chǔ)在繼承工作負(fù)載隊(duì)列。程序應(yīng)該通過(guò)循環(huán)遞增計(jì)數(shù)器或while-loop模擬時(shí)間的流逝。程序應(yīng)該將計(jì)數(shù)器初始化為零,然后依次增加1秒。當(dāng)模擬等于當(dāng)前時(shí)間的打印作業(yè)的提交時(shí)間在工作隊(duì)列的前面,一個(gè)打印作業(yè)完成。當(dāng)這一切發(fā)生的時(shí)候,從工作隊(duì)列取出這個(gè)事件,然后把它放在另一個(gè)隊(duì)列對(duì)象。這個(gè)隊(duì)列對(duì)象存儲(chǔ)已完成的打印作業(yè)。當(dāng)程序仿真其他的打印工作的時(shí)候,這些工作在隊(duì)列等待。
Win8,Visual C++ 6.0
四、實(shí)驗(yàn)過(guò)程與分析
(1)實(shí)驗(yàn)主要函數(shù)及存儲(chǔ)結(jié)構(gòu)
main.cpp 包括主函數(shù)和主要的功能
simulator.h 仿真類的聲明
simulator.cpp 仿真類的定義
event.h 事件類的聲明
event.cpp - 事件類的定義
job.h 作業(yè)類的聲明
job.cpp 作業(yè)類的定義
arbitrary.run 包括任意打印作業(yè)數(shù)的數(shù)據(jù)文件
arbitrary.out 輸出 arbitrary.run
bigfirst.run 包括打印較大作業(yè)的數(shù)據(jù)文件
bigfirst.out 輸出 bigfirst.run
(2)實(shí)驗(yàn)代碼
#ifndef FIFO_H //fifo.h
#define FIFO_H
#include "simulator.h"
class fifo:public simulator{
protected:
queue waiting;
priority_queue priority_waiting;
public:
fifo(int seconds_per_page);
void simulate(string file);
};
bool operator < (event evtleft,event evtright);
#endif
#include "fifo.h" //fifo.cpp
#include
using namespace std;
fifo::fifo(int seconds_per_page):simulator(seconds_per_page){ }
void fifo::simulate(string file){
int finish_time = 0;
float agg_latency = 0;
int totaljob =0;
event evt;
if(file.find("arbitrary")!= string::npos){
string outfile ="arbitrary.out";
ofstream osf(outfile.c_str());
loadworkload(file);
osf<<"FIFO Simulation "<
for(int time =1;!waiting.empty()||!workload.empty();time++){ while(!workload.empty() && time ==
workload.front().arrival_time()){
evt= workload.front();
osf<<" Arriving: "<
workload.pop();
}
if(!waiting.empty() && time >= finish_time){
totaljob ++;
evt = waiting.front();
agg_latency += time - evt.arrival_time();
osf<<" Servicing: "<
finish_time = time + evt.getjob().getnumpages() * seconds_per_page;
}
}
osf<<" total job "<
osf<<" aggregate latency: "<
osf<<" mean latency : "<
return;
}
if(file.find("bigfirst") != string::npos){
string outfile = "bigfirst.out";
ofstream osf(outfile.c_str());
loadworkload(file);
osf<<"FIFO Simulation "<
for(int time
=1;!priority_waiting.empty()||!workload.empty();time++){
while(!workload.empty() && time ==
workload.front().arrival_time()){
evt= workload.front();
osf<<" Arriving: "<
workload.pop();
}
if(!priority_waiting.empty() && time >= finish_time){
totaljob ++;
evt = priority_waiting.top();
agg_latency += time - evt.arrival_time();
osf<<" Servicing: "<
finish_time = time + evt.getjob().getnumpages() * seconds_per_page; }
}
osf<<" total job "<
osf<<" aggregate latency: "<
osf<<" mean latency : "<
return;
}
cerr<<"The program don't know what algorithm to use"<
cerr<<"You should specify the file name with arbitrary or bigfirst"<
bool operator < (event evtleft,event evtright){
return evtleft.getjob().getnumpages() <
evtright.getjob().getnumpages();
}
五、實(shí)驗(yàn)結(jié)果總結(jié)
經(jīng)測(cè)試,功能較為完整。代碼流程簡(jiǎn)圖如下:
通過(guò)這次實(shí)驗(yàn),我了解了有關(guān)隊(duì)列方面的知識(shí)。掌握了隊(duì)列的邏輯結(jié)構(gòu),抽象數(shù)據(jù)類型,隊(duì)列的存儲(chǔ)方式等。運(yùn)用先進(jìn)先出表,仿真了網(wǎng)絡(luò)打印隊(duì)列。這都使我對(duì)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)有了新的認(rèn)識(shí)與幫助。在實(shí)驗(yàn)過(guò)程中,我也遇到了許多困難,從開始時(shí)對(duì)隊(duì)列運(yùn)算的不熟悉,到逐漸查找資料,從而完成了實(shí)驗(yàn);六、附錄;-《數(shù)據(jù)結(jié)構(gòu)與算法分析》以及網(wǎng)上資料;
逐漸查找資料,從而完成了實(shí)驗(yàn)。在今后的學(xué)習(xí)中,我將繼續(xù)努力,加強(qiáng)對(duì)堆棧,隊(duì)列等知識(shí)的學(xué)習(xí),以達(dá)到精益求精。
六、附錄
-《數(shù)據(jù)結(jié)構(gòu)與算法分析》以及網(wǎng)上資料
相關(guān)文章:
1.北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告線性表
2.北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 圖
【北郵數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告線性表】相關(guān)文章:
北郵研究生在京就業(yè)前景如何07-14
北郵的通信工程就業(yè)前景怎么樣07-14
北郵的工程管理專業(yè)好嗎?以后就業(yè)前景咋樣?07-11
北郵網(wǎng)絡(luò)工程專業(yè)和通信工程就業(yè)前景誰(shuí)更好?07-14
北郵考研考哪個(gè)院的研究生就業(yè)前景好一些07-14
北郵通信,華科電氣工程及其自動(dòng)哪個(gè)好?哪個(gè)就業(yè)前景好?07-11
同濟(jì)大學(xué)的土木工程和北郵的通信工程哪個(gè)就業(yè)前景更好07-14
調(diào)劑到北郵軟院讀通信工程專業(yè)怎么樣?就業(yè)前景好嗎?07-14
京東包郵嗎?07-11