經過討論和設計,對於多路電梯調度,我們確立了具體的數據結構模型,主要還是采用C-LOCK算法,另外加一個多線程調度。
數據結構:
1.考慮到電梯的變化是一個動態變化的過程,那么要在動態過程中實現正常跳轉,首先要確定各種跳轉的狀態, 因而這里我們使用枚舉類型來表示電梯的各種狀態:
enum {updownstophomeStatehome}
同時初始化最初狀態為電梯在樓層一。
2.對於乘客來說, 顯然要有一個進入電梯與走出電梯的隊列, 因而在這里我們是用的鏈表來實現這個過程的,同時用結構體來保存該乘客的信息:
typedef struct passage { int now//乘客當前所在的樓層 int dis//乘客的目的地樓層 struct passage *next } Passage;
3.雖然電梯中的狀態是由枚舉類型來實現的, 但是在整個程序的運行過程中,我們還是為電梯設置了一個結構體類型,以便保存更多的信息:
typedef struct lift { int count_C//計數電梯已到達的層數 int count_A//電梯人數計數器 記得必須初始化為 0 int flag_inHigh//二十個樓層有無請求的標志,哪個樓層如果有請求,該標志置 1 int weight//電梯重量,記得要進行初始化為 0 int flag_out[High]; }Lift
函數接口說明:
函數中的參數均是使用的全局變量的傳遞,下面就將設想的主要函數及他們之間的參數的關系列出如下:
int OutOrIn(Lift &L,Passage *Queue,Passage *LiftQ;//進和出電梯的總函數 int Update(Lift &L,Passage *Queue,Passage *LiftQ;//刷新的函數 int Run(Lift &L,Passage *Queue,Passage *LiftQ;//整個電梯各種狀態轉換的函數 int OpenTheDoor(Lift &L);//開門 int CloseTheDoor(Lift &L);//關門 int Test(Lift &L,Passage *QueuePassage *LiftQ);// 測試電梯關門還是開門的函數 int Request(Lift &L,Passage *Queue);//發出請求信號的函數 int ClosestLift((Lift &L);//調度最近的電梯的函數 int Weight(Lift &L);//計算電梯重量的函數
開發者:閆立新 蘇海岩