91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 7KB
    文件類型: .c
    金幣: 1
    下載: 0 次
    發布日期: 2024-01-24
  • 語言: C/C++
  • 標簽: C語言??

資源簡介

C語言電梯調度算法,數據結構課程設計

資源截圖

代碼片段和文件信息

#include?
#include?

#define?GoingUp?1
#define?GoingDown?2
#define?SpeedUp?3
#define?SpeedDown?4
#define?SlowUp?5
#define?SlowDown?6
#define?Idle?7
#define?Stop?8
#define?DoorOpen?9
#define?DoorOpening?10
#define?DoorCloseing?11

#define CloseTest?40
#define?OverTime??300
#define?Accelerate?15
#define?UpTime 51
#define?DownTime?61
#define?UpDecelerate?14
#define?DownDecelerate?23
#define?DoorTime 20
#define?InOutTime 25

#define?MaxTime?10000
#define?MaxFloor?5
#define?baseFloor?1

typedef?struct?Person{
int?Id;
int?OutFloor;
int?GiveupTime;
struct?Person*?next;
}Person;

typedef?struct?Activity{
int?time;
void(*fn)(void);
struct?Activity*?next;
}Activity;

typedef?struct?Person_Ele{
int?Id;
struct?Person_Ele*?next;
}Person_Ele;

int?AddQueue(int?floorstruct?Person*?p);?
void?AddAct(int?timevoid(*fn)(void));
void?TestPeople();
void?DoTime();
void?Input(void);

void?testinout(void);
void?doclosedoor(void);
void?doopendoor(void);
void?doout(void);
void?doin(void);
void?doup(void);
void?dodown(void);
void?domove(void);
void?doslow(void);
void?tofirst();
int?GetWhere(void);

int?Time=0;
int?CallUp[MaxFloor]={0};
int?CallDown[MaxFloor]={0};
int?CallCar[MaxFloor]={0};
int?Floor=baseFloor;
int?State=Idle;
int?PersonId=0;
Activity?activity={0NULLNULL};
Person_Ele?Stack[5]={0};
Person?Queue[5]={0};

int?main(){
int?i;
for(i=0;i Stack[i].next=NULL;
Queue[i].next=NULL;
}
activity.next=NULL;
Input();
DoTime();
return?0;
}

int?AddQueue(int?floorPerson*?p){
Person*?tmp=&Queue[floor];
while(tmp->next!=NULL){
tmp=tmp->next;
}
tmp->next=p;
return?0;
}

void?AddAct(int?timevoid(*fn)(void)){
time=Time+time;
struct?Activity*?act;
act=(struct?Activity*)malloc(sizeof(struct?Activity));
act->next=NULL;
act->fn=fn;
act->time=time;
struct?Activity*?p=&activity;
while(p->next!=NULL){
if(p->next->time>time)
break;
p=p->next;
}
act->next=p->next;
p->next=act;
}

void?TestPeople(){//這是檢測每層隊列是否有人放棄,有人放棄就將他踢出隊列?
int?i;//這個函數每個時間都會被調用,效率相對較低?
for(i=0;i Person*?p=Queue[i].next;
Person*?q=&Queue[i];
if(p==NULL)
continue;
while(p!=NULL){
if(p->GiveupTime<=Time){
if(Floor==i&&(State>=Idle))
break;
q->next=p->next;
printf(“用戶%d放棄了等待!\n“p->Id);
free(p);
p=q->next;
continue;
}
q=p;
p=p->next;
}
}
}



void?Input(void){//輸入人員信息,這個需要手動調用一次,之后就根據定時器調用了?
Person*?p?=?(Person*)malloc(sizeof(Person));
int?inflooroutfloorgiveuptimeintertime;
while(1){
printf(“請輸入用戶的起始樓層:“);
scanf(“%d“&infloor);
printf(“請輸入用戶的目標的樓層:“);
scanf(“%d“&outfloor);
printf(“請輸入用戶的最長容忍時間:“);
scanf(“%d“&giveuptime);
printf(“請輸入下一個用戶的到來時間:“);
scanf(“%d“&intertime);
if(!(infloor<0||infloor>MaxFloor-1||outfloor<0||outfloor>MaxFloor-1)&&(infloor!=outfloor))
break;
printf(“錯誤的用戶信息錄入

評論

共有 條評論