资源简介
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(“错误的用户信息录入
相关资源
- 数据结构 C语言版 第2版 严蔚敏 李冬
- c语言实现Paillier算法原理与实现
- C语言考研真题汇编(3)
- C语言c++游戏源代码大全
- plo编译器 c语言 含测试 以及实验报告
- 单像空间后方交会用C语言实现的
- C语言数据结构课程设计之统计C程序单
- 职工信息管理系统C 链表
- C语言实现凯撒和维吉尼亚加解密
- 基于C语言绘制学校校徽
- C语言标准库函数大全
- DES/3DES算法C语言实现
- C语言内存分配详解
- 学生成绩管理系统 (C语言版)课程设
- 设计并实现TINYC语言的扫描程序TINYC
- DES和3DES加密算法,C语言,适用于单片
- 51单片机DS18B20温度计C语言程序附详解
- Linux下C语言操作静态ARP表,包括增加
- 各种加密算法C语言版
- 《C语言最新C11标准》PDF
- 郭天祥51单片机C语言教程配套光盘
- 新概念51单片机C语言教程第2版郭天祥
- SM4(ECB、CBC、CTR、CFB、OFB)加密算法
- 1628驱动程序
- C程序设计语言(第2版·新版)
- C语言实现LZW编码
- 模拟进程管理c语言至少要有:创建新
- 《测试驱动的嵌入式C语言开发》源码
- C语言考研真题汇编
- C语言实现51单片机和ADC0809芯片的AD模
评论
共有 条评论