問題說明幾點:
①顧客逗留時間的計算,應該是離開事件發生的時刻減去這個顧客入隊的時間,因為顧客在中間還有等待排隊尚未辦理業務的時候
②設定離開事件有如下幾種情況:
ⅰ這個顧客是第乙個入隊的,那麼他離開的時間就是入隊的時間和辦理業務的時間
ⅱ這個顧客是在前乙個顧客離開後去辦理業務的,那麼他的離開時間就是前乙個顧客的離開時間(時刻)加上他辦理業務的時間
③本次演算法用了佇列和鍊錶,主函式有四個,其中兩個是核心的,除此之外包括一些基本操作函式
④隨機數的設定用rand函式,但是要取模,rand函式丟給durtime和interval(書上是intertime,我覺得interval好理解)的值往往很大,如果不取模那麼銀行估計只能來極少數顧客了
⑤寫這個演算法之前,應該思路清晰,建議畫流程圖,寫偽碼,取好變數名(演算法變數很多)以及準備好資料結構,最後再寫**
**如下,希望能幫到你:
#include "stdafx.h"
#include#include#include#include#define status int
#define ok 1
#define overflow -1
#define error 0
typedef struct linklist
*evenlist,even;//事件鍊錶和單個事件
typedef struct linkqueue
qelemtype;//佇列元素
typedef struct manageforqueue
mngfq;//佇列的管理結構
int totaltime = 0;
int customernum = 0;//全域性
int closetime = 200;
const int size = 4;
void banksimulation();
void bankopen(evenlist *evlist, mngfq q[size]);
void deforcuarrival(even en, evenlist evlist, mngfq q[size]);
void deforcudepart(even en, evenlist evlist, mngfq q[size]);
void bankclose();
status initlinklist(evenlist *evlist);
status orderinsert(evenlist evlist, even *en);
status pop(evenlist evlist);
status getlhead(evenlist evlist, even *en);
bool islempty(evenlist evlist);
int minqlength(mngfq q[size]);
int qlength(mngfq *q);
status enqueue(mngfq *q, qelemtype *customer);
status dequeue(mngfq *q);
status getqhead(mngfq *q, qelemtype *customer);
status initq(mngfq q[size]);
bool isqempty(mngfq *q);
int main()
void banksimulation()
bankclose();
}void bankopen(evenlist *evlist, mngfq q[size])
void deforcuarrival(even en, evenlist evlist, mngfq q[size])
//將離開事件插入到事件表中
if (en.occurtime + interval < closetime)//下乙個顧客來的時候銀行還未結業 }
void deforcudepart(even en, evenlist evlist, mngfq q[size])
//準備下乙個顧客的離開事件
}void bankclose()
bool islempty(evenlist evlist)
status initq(mngfq q[size])
return ok;
}status initlinklist(evenlist *evlist)
status orderinsert(evenlist evlist, even *en)
int minqlength(mngfq q[size])
status enqueue(mngfq *q, qelemtype *customer)
int qlength(mngfq *q)
status getqhead(mngfq *q, qelemtype *customer)
status dequeue(mngfq *q)
bool isqempty(mngfq *q)
status pop(evenlist evlist)
status getlhead(evenlist evlist, even *en)
演算法 模擬資料結構一
普通佇列 int q 10000 h 0,tt 1 新增乙個元素a q tt a 刪除末尾元素tt 刪除隊頭元素h 輸出while tt h 普通棧 int stock 100005 t 1 新增乙個元素a stock t a 刪除t 單鏈表 優點方便,缺點訪問前乙個元素需要重新訪問一遍 這種方法本...
LRU management(模擬資料結構)
lru,作業系統中的最近最常使用演算法 include define maxn 1000005 define ll long long using namespace std struct nodecash maxn 1 模擬鍊錶 表示儲存單元 unordered mapft 雜湊表對映 把位址規模...
2020 7 4模擬 資料結構 ds
wobmaj 有 n 個資料結構,第 i 個資料結構具有工業指數 a i 和包容指數 b i b i le a i 他會不斷執行下面這個操作,直到無法再執行為止 選擇二元組 i,j 將第 i 個資料結構套進第 j 個資料結構裡,其中 a i。每個資料結構只能巢狀和被巢狀一次。求可能出現的不同局面的數...