離散事件模擬 資料結構演算法

2021-08-14 13:13:43 字數 2593 閱讀 8804

問題說明幾點:

①顧客逗留時間的計算,應該是離開事件發生的時刻減去這個顧客入隊的時間,因為顧客在中間還有等待排隊尚未辦理業務的時候

②設定離開事件有如下幾種情況:

ⅰ這個顧客是第乙個入隊的,那麼他離開的時間就是入隊的時間和辦理業務的時間

ⅱ這個顧客是在前乙個顧客離開後去辦理業務的,那麼他的離開時間就是前乙個顧客的離開時間(時刻)加上他辦理業務的時間

③本次演算法用了佇列和鍊錶,主函式有四個,其中兩個是核心的,除此之外包括一些基本操作函式

④隨機數的設定用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。每個資料結構只能巢狀和被巢狀一次。求可能出現的不同局面的數...