ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:23.08KB ,
资源ID:7364997      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-7364997.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(机软二次作业.docx)为本站会员(b****5)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

机软二次作业.docx

1、机软二次作业 计算机软件基础实验报告/* 停车场管理的简单模拟 */#define N 4 /* 停车场容量 */#define M 5 /* 收费单价/单位时间 */#define True 1#define False 0#define Null 0#include #include #include typedef struct element int num; int arrtime;|*定义整形变量车的数目和到达时间*| ElemType;typedef struct stacktag ElemType stackN; int top;|*建立链棧并定义头指针*| STACK;typ

2、edef struct nodetag int num; struct nodetag *next; QUEUE;typedef struct queuetag QUEUE *front,*rear;|*定义队头和队尾*|LinkedQueTp;void IniStack(STACK *s);int Push(STACK *s,ElemType x);ElemType Pop(STACK *s);void IniLinkedQue(LinkedQueTp *s);|*链棧的建立*|void EnLinkedQue(LinkedQueTp *s,int num1);|*车辆进入停车场*|int

3、DeLinkedQue(LinkedQueTp *s);|*车辆开出停车场*|void Arrive(STACK *s1,LinkedQueTp *p,ElemType x);|*车辆到达处理*|void Delive(STACK *s1,STACK *s2,LinkedQueTp *p,ElemType x);|*离开处理 void IniStack(STACK *s) s-top=-1;|*栈空*| return;int Push(STACK *s,ElemType x) |*判断是否栈满*| if(s-top=N-1) printf(nStack Overflow!n); return

4、(False); else s-top+; |*新节点指向栈顶并将其数据赋值*|s-stacks-top=x; return (True); /* Initialize Stack */ElemType Pop(STACK *s) ElemType x; int i; if(s-toptop-; |*后面的 车依次开出*| i=s-top+1; x=s-stacki;|*该走的车开出后其余的车依原来的次序进场*| return x; /* Pop */void IniLinkedQue(LinkedQueTp *s) QUEUE *p1; s-front=(QUEUE *)malloc(siz

5、eof(QUEUE);|*申请新节点*| s-rear=s-front;|*队空*| p1=s-front; p1-next=Null; /* 头结点指针域初始化 */ p1-num=0; /* 头结点数据域初始化 */* IniLinkedQue */void EnLinkedQue(LinkedQueTp *s,int num1) /* 数据入队列(链接式循环队列) */ QUEUE *p,*p1; p=(QUEUE *)malloc(sizeof(QUEUE); /* 产生一个新节点 */ p-num=num1; p-next=Null; p1=s-rear; /* 加入队尾 */ p1

6、-next=p; s-rear=p; p1=s-front; p1-num+; /* 修改保存在头结点数据域中的车辆数 */* EnLinkedQue */int DeLinkedQue(LinkedQueTp *s) /* 数据节点出队列 */ QUEUE *p; int n; if(s-front=s-rear) return (Null);|*判断是否队空*| else p=s-front-next;|*令p指向头指针的前一个*| s-front-next=p-next;|*删除节点p*| if(p-next=Null) s-rear=s-front;|*判断是否为空*| n=p-num

7、; free(p);|*释放节点p*| s-front-num-;|*s指向队头数量递减*| return (n); /* DeLinkedQue */void Arrive(STACK *s1,LinkedQueTp *p,ElemType x) /* 车辆到达处理 */ int f,no1,no2; /* 可以删去 */ f=Push(s1,x); /* 新到车辆进入停车场栈 */ if(f=False) /* 如停车场满, 就进入便道队列等待 */ EnLinkedQue(p,x.num);no1=p-front-num; /* 可以删去 */printf(第%d号车停在便道的第%d号车

8、位上n,x.num,no1); /* 改为:printf(第%d号车停在便道的第%d号车位上n,x.num,p-front-num); */ else /* 新到车辆进入停车场 */no1=s1-top+1; /* 可以删去 */no2=x.num; /* 可以删去 */printf(第%d号车停在停车场的第%d号车位上n,no2,no1); /* 改为:printf(第%d号车停在停车场的第%d号车位上n,x.num,s1-top+1); */ /* Arrive */void Delive(STACK *s1,STACK *s2,LinkedQueTp *p,ElemType x) /*

9、离开处理 */ int n,f=False; ElemType y,z; /* 增加z */ QUEUE *q; while(s1-top-1) & (f!=True) /* 在停车场中寻找要离开的车辆 */ y=Pop(s1); if(y.num!=x.num) /* 如果栈顶元素不是要离开的车辆,就将其放如车辆规闭所*/ n=Push(s2,y); else f=True; /*/ if(y.num=x.num) /*在停车场中找到要离开的车辆*/ printf(第%d号车应收费%d元,y.num,(x.arrtime-y.arrtime)*M); while(s2-top-1) whil

10、e(s2-top-1) /* 调整到*处,将y改为z */ y=Pop(s2); f=Push(s1,y); n=DeLinkedQue(p); if(n!=Null) /* 有车在队列中等待 */ y.num=n; y.arrtime=x.arrtime; f=Push(s1,y); printf(第%d号车停在停车场第%d号车位上n,y.num,s1-top+1); else /*在停车场中没有找到要离开的车辆*/ while(s2-top-1) /* 删除 */y=Pop(s2);f=Push(s1,y); q=p-front; /* 指向队头 */ f=False; while(f=F

11、alse & q-next !=Null) /*在便道上寻找要离开的车辆*/ if(q-next-num!=x.num) q=q-next; else q-next=q-next-next; /*在便道上找到该车辆*/ p-front-num-; if(q-next=Null) p-rear=q; /* =p-front是错误的 */ printf(第%d号车离开便道n,x.num);/*该车离开便道,但不收费*/ f=True; if(f=False) printf(输入数据错误,停车场和便道上均无第%d号车n,x.num); void main() /* 停车场模拟管理程序 */ char

12、 ch1,ch2; STACK *s1,*s2; LinkedQueTp *p; ElemType x; int flag,t1,t2; s1=(STACK *)malloc(sizeof(STACK); s2=(STACK *)malloc(sizeof(STACK); p=(LinkedQueTp *)malloc(sizeof(LinkedQueTp); IniStack(s1); /* 初始化停车场栈 */ IniStack(s2); /* 初始化车辆规避所栈 */ IniLinkedQue(p);/* 初始化便道队列 */ flag=True; for(;) clrscr(); pr

13、intf(n输入数据:A/D,车牌号,到达时间/离开时间n); printf(E-退出。n); scanf(%c,%d,%d,&ch1,&t1,&t2); x.num=t1; x.arrtime=t2; /* 只记录小时值,没有考虑分钟 */ ch2=getchar(); /* 清空输入缓冲区 */ switch(ch1) case a: case A: Arrive(s1,p,x); printf(nPress any key to continue.n); getch(); break; case d: case D: Delive(s1,s2,p,x); printf(nPress an

14、y key to continue.n); getch(); break; case e: case E: flag=False; printf(n程序正常结束n); break; default: printf(n输入数据错误,重新输入n); printf(nPress any key to continue.n); getch(); break; if(flag=False) break; /* 退出循环 */ return; /*迷宫问题*/#define M2 12#define N2 11#define MAXLEN M2#define True 1#define False 0#d

15、efine Null 0#include #include #include #include int M=M2-2,N=N2-2;typedef struct elem int x,y,dir; ElemType;typedef struct stktag ElemType stackMAXLEN;|*存放站的数据元素*| int top;|*棧顶指针用来存放棧顶元素在数组中的下标*| STACK;typedef struct moved int dx,dy;MOVE;void IniMaze(int mazeN2); /*初始化迷宫*/void IniMove(MOVE move); |*

16、移动位置*|void IniStack(STACK *s); |*初始化棧s*|int Push(STACK *s,ElemType x);|*进栈*|ElemType Pop(STACK *s);void path(int mazeN2,MOVE move,STACK *s);|*初始化路径*|void draw(int mazeN2,STACK *s);|*初始化迷宫数组*|void main() /* 寻找迷宫通路程序*/ STACK *s; int mazeM2N2; MOVE move8; IniMaze(maze); /* 初始化迷宫数组 */ getch(); s=(STACK

17、*)malloc(sizeof(STACK);|*申请新节点*| IniStack(s);|*初始化棧s为空栈*| IniMove(move);|*移动位置*| path(maze,move,s);|迷宫路径*| draw(maze,s);/* main */void IniMaze(int mazeN2) /*初始化迷宫*/ int i,j,num; for(i=0,j=0;i=M+1;i+) mazeij=1; for(i=0,j=N+1;i=M+1;i+) mazeij=1;|*沿数组横向移动*| for(i=0,j=0;j=N+1;j+) mazeij=1; for(i=M+1,j=0

18、;j=N+1;j+) mazeij=1;|*沿数组纵向移动*| for(i=1;i=M;i+) for(j=1;j=N;j+) num=(800*(i+j)+1500) % 327;|*将0和1散乱分布*| if (num150)&(i!=M|j!=N) mazeij=1; else mazeij=0; printf(n); for(i=0;i=M+1;i+) printf(n); for(j=0;jtop=-1;|*顺序棧的棧顶指针*|/* IniStack */int Push(STACK *s,ElemType x) if(s-top=MAXLEN-1) return (False);|

19、*判断是否棧满*| else s-stack+s-top=x;|*s进棧并将其赋值为x*| return (True); /* Push */ElemType Pop(STACK *s) |*出棧*| ElemType elem; if(s-toptop-;|*从棧顶出棧*| return (s-stacks-top+1); /* pop */void path(int mazeN2,MOVE move,STACK *s) |*移动路径*| int i,j,dir,x,y,f; ElemType elem; i=1; j=1; dir=0; maze11=-1; /* 设11为入口处 */ d

20、o x=i+movedir.dx; /* 求下一步可行的到达点的坐标 */ y=j+movedir.dy; if(mazexy=0) elem.x=i; elem.y=j; elem.dir=dir; f=Push(s,elem); if(f=False) printf(栈长度太短n); i=x; j=y; dir=0; mazexy=-1; else if(dirtop=-1) & (dir=7) | (x=M)&(y=N)&(mazexy=-1); if(s-top=-1) printf(此迷宫无路n); else elem.x=x;elem.y=y;elem.dir=dir; f=Pus

21、h(s,elem);|*进棧函数*| printf(n迷宫的通路是:n); i=0; while(itop) printf(%d,%d),s-stacki.x,s-stacki.y); /* 显示迷宫通路 */ if(i!=s-top) printf(-);|*非空*| if(i+1)%4=0) printf(n); i+; printf(n); /* path */void draw(int mazeN2,STACK *s) |*初始化路径数组*| int i,j; ElemType elem; for(i=1;i=M;i+) /* 将迷宫中全部的-1值恢复为0值 */ for(j=1;jt

22、op-1) /* 根据栈中元素的坐标,将通路的各个点的值改为8 */ elem=Pop(s); i=elem.x; j=elem.y; mazeij=8; for(i=0;i=M+1;i+) for(j=0;j=N+1;j+) if(i=0)&(j=0)|(i=M+1)&(j=N+1) printf(%3d,0); else if(mazeij=8) printf( %c,*);|*再通路标记*| else printf(%3d,mazeij); /* 显示已标记通路的迷宫 */ printf(n); printf(n);/* draw */ /* 迷宫2-最短路线 */#define M2

23、12#define N2 11#define MAXLEN M2*N2#define True 1#define False 0#define Null 0#include #include #include #include int M=M2-2,N=N2-2;typedef struct elem /* 定义栈元素的数据类型 */ int x,y; int dir; ElemType;typedef struct stktag /* 定义顺序栈结构 */ ElemType stackMAXLEN;|*存放棧的数据元素*| int top;|*棧顶指针用来存放棧顶元素在数组中的下标*| ST

24、ACK;typedef struct QueEle /* 定义队列元素的数据类型 */ int x,y; int pre; QueElem;typedef struct QueTag QueElem queueMAXLEN; int front,rear;|*定义队头队尾*| QUEUE;typedef struct moved /* 定义方向位移数组元素的类型 */ int dx,dy; MOVE;void IniMaze(int mazeN2); /*初始化迷宫*/void IniMove(MOVE move);|8初始化移动方位*|void IniStack(STACK *s);|*初始

25、化s为空棧*|int Push(STACK *s,ElemType x);|*x进棧*|ElemType Pop(STACK *s);|*出栈函数*|int shortpath(int mazeN2,MOVE move,QUEUE *p);void draw(int mazeN2,STACK *s);void IniQueue(QUEUE *s); /* 初始化队列 */void printpath(QUEUE *p,STACK *s); /* 显示迷宫通路 */void main() /* 寻找迷宫通路程序*/ STACK *s; QUEUE *p; int mazeM2N2,f; MOVE move8; IniMaze(maze);

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2