エレベーター管理システムのデータ構造の実現

1697 ワード


データ構造の定義
問題を分析すると、少なくともエレベーターと乗客のモデリングが必要で、エレベーターは5階しかありません.5階のエレベーターの中では、下に行くか上に行く乗客が待っている可能性があります.だから、待ち行列が必要です.各階には2つの待ち行列があります.また、エレベーターの中でより迫真的なモデリングを満たすために、つまり、乗客がエレベーターから出る順番をシミュレートするのが先進的で後出(i先進エレベーターの中の方が内側にあると思われるので、遅く出る)にはスタックというデータ構造が必要です.各階には客室があります.
話を多くしないで、直接コードを貼ります.
乗客の構造体定義:
//          
typedef struct ClientNode {
	int ClientID;			//   ID
	int InFloor;			//     
	int OutFloor;			//    
	int GiveupTime;			//    
}*Client;
キューの構造体定義を待つ
typedef Client ElemType;			

//    
typedef struct ClientQueueNode {
	Client data;
	ClientQueueNode * next;
}* ClientQueuePtr;

//       
typedef struct WaitQueueNode {
	ClientQueuePtr front;
	ClientQueuePtr rear;
	int WaitClientNum;
}WaitQueue;
typedef Client ElemType;
//   
typedef struct ClientStackNode {
	ElemType *base;				//    
	ElemType *top;				//    
	int			stacksize;	    //         ,      
}ClientStack;
エレベーターの構造体の定義:
 
//     
enum	ElevatorMove { Opening, Opened, Closing, Closed, Moving, SlowDown, Waiting, Accelerate };  //   8   
enum	ElevatorState{ GoingUp, GoingDown,Idle };	//     											  
//          
typedef struct ElevatorNode {
	int ClientNum;			//    
	ElevatorState State;	//     
	int StateCount;			//       
	int floor;				//       
	ElevatorMove move;		//       
	int CallCar[5];			//      
	ClientStack Stack[5];	//   
	int ClientID[8];		//               
}*Elevator;
その中で、CallCalはエレベーターが行く目的階を表しています.普通、ある階の乗客がエレベーターを押した後、エレベーターが応答すると、その階を自分の目的階に書いたり、乗客がエレベーターに入るということです.目的階はこのエレベーターの目的階です.
ClienntID配列は現在のエレベーターの乗客番号を記録し、出力表示用を使っています.一つのエレベーターを設置して最大8人までインテリジェントに入れるので、8人をセットすればいいです.