资源简介

设停车场是一个可停放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


评论

共有 条评论