北郵資料結構實驗報告線性表
實驗報告;課程名稱:資料結構班級:軟體工程實驗成績:;1206;實驗名稱:印表機佇列模擬學號:20124848批;程式的設計;實驗編號:實驗一姓名:實驗日期:2014年5月2;一、實驗目的;對佇列的理解;對STL中的queue的使用;實驗模擬一個網路列印過程;二、實驗內容與實驗步驟流程圖;這個任務佇列的測試使用STL佇列介面卡;具體地說,每一行中包含的資訊是
實 驗 報 告
課程名稱:資料結構 班級:軟體工程實驗成績:
1206
實驗名稱:印表機佇列模擬學號:20124848 批閱教師簽字:
程式的設計
實驗編號:實驗一 姓名: 實驗日期:2014年5 月 24 日
一、實驗目的
對佇列的理解
對STL中的queue的使用
實驗模擬一個網路列印過程
二、實驗內容與實驗步驟流程圖
這個任務佇列的測試使用STL佇列介面卡。程式要求完成模擬的實現共享印表機。這個印表機使用先進先出佇列。模擬是透過讀取和處理事件資料檔案的`列表。一個有效的資料檔案中的每一行包含資訊列印作業和提交這份工作的時間。
具體地說,每一行中包含的資訊是提交工作的時間(以秒為單位),和在頁面的工作長及工作的計算機的名稱。在模擬的開始,每個這些事件的每一個應該被程式所讀,儲存在繼承工作負載佇列。程式應該透過迴圈遞增計數器或while-loop模擬時間的流逝。程式應該將計數器初始化為零,然後依次增加1秒。當模擬等於當前時間的列印作業的提交時間在工作佇列的前面,一個列印作業完成。當這一切發生的時候,從工作佇列取出這個事件,然後把它放在另一個佇列物件。這個佇列物件儲存已完成的列印作業。當程式模擬其他的列印工作的時候,這些工作在佇列等待。
Win8,Visual C++ 6.0
四、實驗過程與分析
(1)實驗主要函式及儲存結構
main.cpp 包括主函式和主要的功能
simulator.h 模擬類的宣告
simulator.cpp 模擬類的定義
event.h 事件類的宣告
event.cpp - 事件類的定義
job.h 作業類的宣告
job.cpp 作業類的定義
arbitrary.run 包括任意列印作業數的資料檔案
arbitrary.out 輸出 arbitrary.run
bigfirst.run 包括列印較大作業的資料檔案
bigfirst.out 輸出 bigfirst.run
(2)實驗程式碼
#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();
}
五、實驗結果總結
經測試,功能較為完整。程式碼流程簡圖如下:
透過這次實驗,我瞭解了有關佇列方面的知識。掌握了佇列的邏輯結構,抽象資料型別,佇列的儲存方式等。運用先進先出表,模擬了網路列印佇列。這都使我對資料結構的學習有了新的認識與幫助。在實驗過程中,我也遇到了許多困難,從開始時對佇列運算的不熟悉,到逐漸查詢資料,從而完成了實驗;六、附錄;-《資料結構與演算法分析》以及網上資料;
逐漸查詢資料,從而完成了實驗。在今後的學習中,我將繼續努力,加強對堆疊,佇列等知識的學習,以達到精益求精。
六、附錄
-《資料結構與演算法分析》以及網上資料
相關文章:
1.北郵資料結構實驗報告線性表
2.北郵資料結構實驗報告 圖
【北郵資料結構實驗報告線性表】相關文章: