エレベーター管理システムのデータ構造の実現
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人をセットすればいいです.