資源簡介
VC6.0編譯!
利用的算法類似于買票排隊,你總會到隊列最短的窗口去排隊,但往往會有其他隊列辦事速度快,隊列長度很快變得比你所在隊列的還短,但你改變自己的隊列去當前較短的隊列時,可能沒過多久剛剛你在的隊列又比你現在所處的隊列短了,因為隊短不代表等待時間短,你無法預測每個隊列你需要等待的時間。所以在該種制度下,不同于買票排隊的這種可以隨便更換隊列的隨意性,我們在第一種算法中設定:每到達一個客戶將其排在隊列最短的隊尾,且不管其它隊列是否變的更短,甚至已經空閑,該客戶也只能在已隊列中等待前面的客戶辦理完業務自己才能辦理業務,很明顯這種算法效率不是最好的。一是時間利用率不高,而是無法保證先到達的客戶的辦理業務時間一定比后到達的客戶早。

代碼片段和文件信息
#include
#include?
#include“linklist.h“
#include“linkqueue.h“
Event ?en;??????????//事件
QElemType ?customer;???//客戶記錄
int TotalTime;??//累計客戶逗留時間
int WaitTime;??//累計客戶等待時間
int CustomerNum?;?//累計客戶數
int?CloseTime;
int?StartTime;
linkList ?*ev;??????????//事件表
linkQueue ?*q[5];??????//4個客戶隊列,q[i]指向第i號窗口的隊列
int?leave_num?=?0;???//第leave_num個離開銀行的客戶
void?Random(?int?*duration?int?*intertime?);??//產生隨機數,第一個參數代表當前客戶的辦理業務所需的時間,第二個參數代表下一個客戶與當前客戶的到達時間差
void?OrderInsert(?linkList?*eventlist?Event?cur_en?);??//將產生的事件按事件發生時間順序排列
void?OpenForDay();???//初始化
void?CustomerArrived(??);??//對客戶到達事件進行處理
void?CustomerDepature(??);??//對客戶離開事件進行處理
void?Bank_Simulation(?int?CloseTime?);??//排隊系統模擬函數
int?Minium(?int?num1?int?num2?int?num3?int?num4?);//比較四個數中的最小值,若第i個參數最小,則返回i,參數相等的情況下返回序號較小的參數的序號
void?main()
{
printf(?“輸入銀行的24小時制營業時間:如營業時間為9:00--17:00,則應輸入:917\n“?);
scanf(?“%d%d“?&StartTime?&CloseTime?);
CloseTime?=?(?CloseTime?-?StartTime?)?*?60;
printf(“離開客戶序列??業務窗口??到達時間??辦理業務時長??離開時間??停留時長??等待時長\n“);
Bank_Simulation(?CloseTime?);
}
//產生客戶辦理業務所需時間時間和兩個客戶到達時間的時間間隔的隨機數
void?Random(?int?*duration?int?*intertime?)
{
srand(?(unsigned)time(?NULL?)?);??//用時間作為種子對隨機數進行操作
*duration?=?rand()%30?+?1;??//任何一個客戶的辦理業務時間在1-30之間
*intertime?=?rand()%5+1;???//任何兩個客戶到達的時間間隔不超過5分鐘,1-5
Sleep(1000);??//由于隨機函數的產生機制導致在一秒以內產生的隨機數都是相同的,因此在一次使用Random時需要進行延時
}
//將事件cur_en按照發生時間的先后順序有序的插入事件鏈表eventlist中
void?OrderInsert(?linkList?*eventlist?Event?cur_en?)??
{
if(?ListEmpty(?eventlist)?){???????//當事件鏈表為空時,將第一個事件直接插入到第一個位置
ListInsert_L(?eventlist?1?cur_en?);
}
else{ //當事件鏈表不為空時,先將事件插入到事件表的第一個位置然后將事件表按非遞減的順序排序
ListInsert_L(?eventlist?1?cur_en?);??//將事件cur_en插入到eventlist的第1項
Increse(?eventlist?);??
}
}
//初始化操作
void?OpenForDay()
{
int?i;
TotalTime?=?0;?????//初始化累計時間為0
CustomerNum?=?0;???//初始化客戶總數為0
WaitTime?=?0;
ev?=?InitList_L(?);??//初始化事件鏈表為空
en.OccurTime?=?0;????//設定第一個客戶到達事件
en.NType??=?0;
OrderInsert(?ev?en?);?//將第一個客戶到達事件插入事件表
for(?i?=?1;?i?<=?4;?i++?)????//初始化窗口隊列
q[?i?]?=?InitQueue();
}
void?CustomerArrived(??)
{
int?duration;??//當前到達的客戶辦理事務所需的時間
int?intertime;?//下一個客戶與當前客戶到達時間的時間間隔
Event?next;????//下一個客戶項
Event?first_leave;????//當前客戶的離開事件
int?i;
++CustomerNum;
Random(?&duration?&intertime?);??//對duration和intertime取隨機數
next.OccurTime?=?en.OccurTime?+?intertime;????//下一個客戶的到達時間
next.NType?=?0;????????????????????????????????//下一個客戶的事件類型,0表示到達
if(?next.OccurTime? OrderInsert(?ev?next?);????????????//按順序將下一個客戶的到達時間插入到事件隊列中???
customer.ArriveTime?=?en.OccurTime;?????//計算當前客戶的隊列項并為其分配隊列
customer.Duration?=?duration;
i?=?Minium(?QueueLength(?q[1]?)?QueueLength(?q[2]?)?QueueLength(?q[3]?)?QueueLength(?q[4]?)?);??//獲得最短隊列的隊列號
InsertQueue(?q[i]?customer?);?//將當前客戶對應的隊列項插入到最短隊列中
//若隊列長度不為1,說明有其他用戶在排隊,則后續客戶的離開事件均與它之前的所有客戶的離開事件相關,
//在此無法
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????36235??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\main.obj
?????文件??????50176??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\vc60.idb
?????文件??????69632??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\vc60.pdb
?????文件?????221314??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\離散時間模擬銀行排隊問題.exe
?????文件?????630540??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\離散時間模擬銀行排隊問題.ilk
?????文件??????43520??2014-06-02?09:40??3離散時間模擬銀行排隊問題\Debug\離散時間模擬銀行排隊問題.opt
?????文件????2804956??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\離散時間模擬銀行排隊問題.pch
?????文件?????558080??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug\離散時間模擬銀行排隊問題.pdb
?????文件???????5459??2014-06-02?09:44??3離散時間模擬銀行排隊問題\li
?????文件???????3782??2014-06-02?11:52??3離散時間模擬銀行排隊問題\li
?????文件???????7999??2014-06-02?12:56??3離散時間模擬銀行排隊問題\main.c
?????文件???????4605??2014-05-31?20:01??3離散時間模擬銀行排隊問題\離散時間模擬銀行排隊問題.dsp
?????文件????????573??2014-05-31?15:03??3離散時間模擬銀行排隊問題\離散時間模擬銀行排隊問題.dsw
?????文件??????66560??2014-06-02?12:56??3離散時間模擬銀行排隊問題\離散時間模擬銀行排隊問題.ncb
?????文件??????49664??2014-06-02?12:56??3離散時間模擬銀行排隊問題\離散時間模擬銀行排隊問題.opt
?????文件????????955??2014-06-02?11:52??3離散時間模擬銀行排隊問題\離散時間模擬銀行排隊問題.plg
?????文件?????444339??2014-06-02?14:33??3離散時間模擬銀行排隊問題\銀行排隊問題總結.docx
?????目錄??????????0??2014-06-02?11:52??3離散時間模擬銀行排隊問題\Debug
?????目錄??????????0??2014-06-03?15:32??3離散時間模擬銀行排隊問題
-----------?---------??----------?-----??----
??????????????4998389????????????????????19
- 上一篇:C語言核心技術英文版
- 下一篇:ti官方DSP2812例程
評論
共有 條評論