资源简介
设停车场是一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,一次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车厂内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入,当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。
代码片段和文件信息
#include
using namespace std;
struct car{
int id;
int arrive;
int leave;
int time;
car *next;
};
struct park{
car *base;
int top;
int size;
};
struct queue{
car *first;
car *rear;
int size;
};
int iniqueue(queue &q)
{
q.first=NULL;
q.rear =NULL;
q.size=0;
return 1;
}
int insert_queue(queue &qcar c)
{
if(q.first==NULL)
{
q.first=new car;
*q.first=c;
q.first->next=0;
q.rear=q.first;
q.size++;
return 1;
}
else
{
q.rear->next=new car;
q.rear=q.rear->next;
*q.rear=c;
q.rear->next=0;
q.size++;
return 1;
}
}
int push(park &park1car w)
{
park1.base[park1.top++]=w;
return 1;//进栈
}
car pop(park &park1)
{
if(park1.top)
return park1.base[--park1.top];//出栈
}
car delete_queue(queue &q)
{
car w;
w.arrive=w.id=w.leave=w.time=0; w.next=0;
if(!q.first)
{
cout<<“便道上无车“< return w;
}
else
{
car *p=q.first;
q.first=q.first->next;
w=*p;
delete p;
q.size--;
return w;
}
}
int inistack(park &sint n)
{
s.base=NULL;
s.base=new car[n];
if(!s.base)
{
cout<<“申请内存失败“< return 0;
}
s.size=n;
s.top=0;
return 1;
}
int stack_full(park &park1)
{
if(park1.top return 0;
else return 1;
}
int queue_empty(queue &q)
{
return !q.size;
}
int assign(queue &qpark &park1park &park2char ordercar c)
{
if(order==‘A‘)
{
c.arrive=c.time;
insert_queue(qc);
if(!queue_empty(q))//队列不空
{
if(stack_full(park1))
{cout<<“车牌为“< else
{
push(park1 delete_queue(q) );
// cout< cout<<“车牌为“< }
}
}
else if(order==‘D‘)
{
for(;park1.top && park1.base[park1.top-1].id!=c.id;)
push(park2pop(park1));//让车道
if(!park1.top)//无找到
{
cout<<“no this car“< for(;park2.top;)
push(park1pop(park2));
return 0;
}
else
{
car toleave=pop(park1);
toleave.leave=c.time;
c.leave=c.time;
cout<<“车牌为“< cout<<“总的停留时间为:“< for(;park2.top;)
push(park1pop(park2));//停车场进车,park2退车
if(!queue_empty(q))//队列不空
{
push(park1delete_queue(q));//进车场,删除队列头
park1.base[park1.top-1].arrive=c.leave;//
}
}
}
else if(order==‘E‘)
{
exit(0);
}
else
{
cout<<“非法输入“< return 0;
}
return 1;
}
int main()
{
park park1park2;
queue q;
int n=0;
cout<<“停车场容量“< cin>>n;
inistack(park1n);
inistack(park2n);
iniqueue(q);
char order=‘ ‘;
int id;
int time;
car w;
for(;;)
{
cout<<“请输入车信息“ < cin>>order>>id>>time;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3475 2009-06-10 20:33 停车场管理\1.cpp
文件 3341 2009-06-10 20:33 停车场管理\1.dsp
文件 510 2009-06-10 20:43 停车场管理\1.dsw
文件 41984 2009-06-10 20:43 停车场管理\1.ncb
文件 48640 2009-06-10 20:43 停车场管理\1.opt
文件 1316 2009-06-10 20:33 停车场管理\1.plg
文件 548973 2009-06-10 20:33 停车场管理\Debug\1.exe
文件 789404 2009-06-10 20:33 停车场管理\Debug\1.ilk
文件 261005 2009-06-10 20:33 停车场管理\Debug\1.obj
文件 1996300 2009-06-06 18:59 停车场管理\Debug\1.pch
文件 1098752 2009-06-10 20:33 停车场管理\Debug\1.pdb
文件 82944 2009-06-10 20:33 停车场管理\Debug\vc60.idb
文件 110592 2009-06-10 20:33 停车场管理\Debug\vc60.pdb
目录 0 2009-06-13 00:41 停车场管理\Debug
目录 0 2009-06-13 00:41 停车场管理
----------- --------- ---------- ----- ----
4987236 15
- 上一篇:银行家算法C实现
- 下一篇:多机调度问题C++语言解决的源代码
相关资源
- 多机调度问题C++语言解决的源代码
- 书店管理系统 C++
- 八数码游戏程序人工智能,c++
- 一个简单的vs c++ socket通讯程序
- 程序流程图生成器支持C/C++
- C++代码转换成C#工具
- 飞行棋c++源码初学者学习用
- MFC小学生速算练习系统VS2017
- xcs 基于遗传算法的自动学习分类器系
- 基于VS2008和IVF11的C/C++和Fortran混合编程
- 使用标准C++库实现的WAV音频文件读写
- C++ 带接口类动态链接库开发
- C++控制播放/插入PPT等操作
- BCH(168)编解码,c++实现
- 数据结构:B-树源代码
- C++版本的FFT傅立叶变换程序源代码
- 随机产生大素数的C++程序
- Lua源码和Lua在C++的使用
- Dijkstra algorithm c++ 实现版 最短路径算
- C++实现的JPEG压缩算法
- c++ socket类封装(udp/tcp)
- 分数计算器课程设计
- 职工管理系统数据结构)
- c/c++采用编码转换表实现gbk与unicode互
- VC使用CStringArray类创建和使用字符串数
- 哲学家用餐问题仿真(C++版)
- C++围棋游戏
- 二叉树的C语言实现,实现二叉树基本
-
c++实现的简单xm
l解析器 - VC++使用Webbrowser开发浏览器
评论
共有 条评论