数据结构停车场问题.docx

上传人:b****2 文档编号:23304408 上传时间:2023-05-16 格式:DOCX 页数:26 大小:18.81KB
下载 相关 举报
数据结构停车场问题.docx_第1页
第1页 / 共26页
数据结构停车场问题.docx_第2页
第2页 / 共26页
数据结构停车场问题.docx_第3页
第3页 / 共26页
数据结构停车场问题.docx_第4页
第4页 / 共26页
数据结构停车场问题.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

数据结构停车场问题.docx

《数据结构停车场问题.docx》由会员分享,可在线阅读,更多相关《数据结构停车场问题.docx(26页珍藏版)》请在冰豆网上搜索。

数据结构停车场问题.docx

数据结构停车场问题

 设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车出进。

汽车在停车场内按车辆到达的时间先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在他之后开入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它的车辆在按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短缴纳费用。

试为停车场编制按上述要求进行管理的模拟程序

编译环境:

VC6.0

源代码:

Hparking.h

#include

#ifndefHparking_H

#defineHparking_H

//汽车信息结点

structCar            

{

charADinfor;    //车到达或离去的标志

stringCarnumber;   //车牌号码

intADtime;      //车到达或离去的时刻

};

//便道汽车数据

structBCar          

{

Carbcar;     //车的信息数据

BCar*next;   //指向本身数据的一个指针

};

//停车场大类

classParking

{

public:

Parking();

~Parking();

voidcararrive();   //车刚到,即将分配位置

voidSroad(CaraCar);       //南便道停车

voidNroad(CaraCar);       //北便道停车

voidSparkingin(CaraCar);//南门进车

voidSparkingout(CaraCar);//南门出车

voidNparkingin(CaraCar);//北门进车

voidNparkingout(CaraCar);//北门出车

voidAllshow();     //显示整个车场的状况

private:

CaraCar;        //接收刚到来的车

Car*park;       //停车场动态一维数组栈

Car*parkrec;    //临时转车场动态一维数组栈

BCar*Northroad;    //北门便道起始指针

BCar*Northtail;    //北门便道尾指针

BCar*Southroad;    //南门便道起始指针

BCar*Southtail;    //南门便道尾指针

intn;           //停车场车位数

intfee;         //单位时间的停车费用

intStop;        //停车场栈南头指针

intNtop;        //停车场栈北头指针

intTemptop;     //临时转车场栈头指针

intSum;         //出车时应缴的总费用

};

#endif

Mainparking.cpp

#include

usingnamespacestd;

#include"Hparking.h"

intmain()

{

charm='0';

Parkingparking;

while

(1)

{

     cout<<"操作选项:

"<

   cout<<"******************"<

   cout<<"1进出车场操作"<

   cout<<"2整个车场状况显示"<

   cout<<"3退出"<

     cout<<"******************"<

   cout<<"请输入操作选项:

";

   cin>>m;

   switch(m)

   {

   case'1':

    parking.cararrive();

    break;

   case'2':

    parking.Allshow();

    break;

   case'3':

    break;

   default:

    cout<<"没有此选项!

"<

    break;

   }

   if(m=='3')

   {

    break;

   }

}

return0;

}

North.cpp

#include

usingnamespacestd;

#include"Hparking.h"

//北门进车操作

voidParking:

:

Nparkingin(CaraCar)

{

   Ntop--;

   park[Ntop].ADinfor=aCar.ADinfor;

   park[Ntop].Carnumber=aCar.Carnumber;

   park[Ntop].ADtime=aCar.ADtime;

   cout<<"车进入北门第"<

   cout<<"进入停车场的时间是"<

}

//北门出车操作

voidParking:

:

Nparkingout(CaraCar)

{

inttime=0;

intj=0;

BCar*p;

p=newBCar;

while(Ntop

{

   if(park[Ntop].Carnumber==aCar.Carnumber)

   {

    time=aCar.ADtime-park[Ntop].ADtime;

    j=Ntop;

    Ntop++;

//    delete

    cout<<"应缴纳的停车费:

"<

   }

   else

   {

    Temptop++;

    parkrec[Temptop].ADinfor=park[Ntop].ADinfor;

    parkrec[Temptop].Carnumber=park[Ntop].Carnumber;

    parkrec[Temptop].ADtime=park[Ntop].ADtime;

    Ntop++;   

   }

}

while(Temptop>=0)

{

   Ntop--;

   park[Ntop].ADinfor=parkrec[Temptop].ADinfor;

   park[Ntop].Carnumber=parkrec[Temptop].Carnumber;

   park[Ntop].ADtime=parkrec[Temptop].ADtime;

   Temptop--;

}

if(Stop+2==Ntop)

{

   if(Northroad->next!

=NULL&&Southroad->next==NULL)

   {

    Ntop--;

    p=Northroad->next;

    park[Ntop].ADinfor=p->bcar.ADinfor;

    park[Ntop].Carnumber=p->bcar.Carnumber;

    park[Ntop].ADtime=aCar.ADtime;

    Northroad->next=p->next;

    deletep;

   }

   if(Southroad->next!

=NULL&&Northroad->next==NULL)

   {

    Stop++;

    p=Southroad->next;

    park[Stop].ADinfor=p->bcar.ADinfor;

    park[Stop].Carnumber=p->bcar.Carnumber;

    park[Stop].ADtime=aCar.ADtime;   

    Southroad->next=p->next;

    deletep;

   }

   if(Northroad->next!

=NULL&&Southroad->next!

=NULL)

        {

    if(Northroad->next->bcar.ADtime>Southroad->next->bcar.ADtime)

    {

     Stop++;

     p=Southroad->next;

     park[Stop].ADinfor=p->bcar.ADinfor;

     park[Stop].Carnumber=p->bcar.Carnumber;

     park[Stop].ADtime=aCar.ADtime;    

     Southroad->next=p->next;

     deletep;

    }

    else

    {

     Ntop--;

     p=Northroad->next;

     park[Ntop].ADinfor=p->bcar.ADinfor;

     park[Ntop].Carnumber=p->bcar.Carnumber;

     park[Ntop].ADtime=aCar.ADtime;

     Northroad->next=p->next;

        deletep;

    }

   }

}

}

//北门便道停车

voidParking:

:

Nroad(CaraCar)

{

inti=0;

BCar*temp;

BCar*p;

temp=newBCar;

p=Northroad;

while(p!

=NULL)

{

   i++;

   p=p->next;

}

cout<<"车将进入北门便道第"<

temp->bcar.ADinfor=aCar.ADinfor;

temp->bcar.ADtime=aCar.ADtime;

temp->bcar.Carnumber=aCar.Carnumber;

temp->next=NULL;

Northtail->next=temp;

Northtail=temp;

}

Parking.cpp

#include

usingnamespacestd;

#include"Hparking.h"

//构造函数

Parking:

:

Parking()      

{

inti=0;

Temptop=-1;

cout<<"请输入单位时间的停车费用:

";

cin>>fee;

cout<<"请输入停车场车位数:

";

cin>>n;

Stop=-1;

Ntop=n;

park=newCar[n];

parkrec=newCar[n];

Northroad=newBCar;

Northroad->next=NULL;

Northtail=Northroad;

Southroad=newBCar;

Southroad->next=NULL;

Southtail=Southroad;

}

//车刚到的选择处理

voidParking:

:

cararrive()

{

inti=0;

intj=0;

BCar*p;

p=newBCar;

charNS;

cout<<"车的信息,包括:

"<

cout<<"该车是到达(A)还是离去(D),车牌号码,车到达或离去的时间"<

cout<<"例如:

A12345612其中以空格间隔"<

cout<<"输入:

E00表示输入完毕!

"<

while

(1)

{

   cout<<"请输入车的信息:

"<

   cin>>aCar.ADinfor;

   cin>>aCar.Carnumber;

   cin>>aCar.ADtime;

   if(aCar.ADinfor=='E'||aCar.ADinfor=='e')

   {

    break;

   }

   elseif(aCar.ADinfor=='A'||aCar.ADinfor=='a')

   {

    //排除时间,车牌号码的逻辑错误

    if(Stop>-1)

    {

     if(park[Stop].ADtime>aCar.ADtime)

     {

      cout<<"车到达时间输入有误!

(时间要小于之前车辆到达的时间)"<

      cout<<"重新输入车的信息!

"<

      continue;

     }    

     for(i=0;i<=Stop;i++)

     {

      if(park[i].Carnumber==aCar.Carnumber)

      {

       cout<<"车牌号码已经存在!

重新输入车的信息!

"<

       j=1;

       break;

      }

     }

     if(1==j)

     {

      continue;

     }

    }

    j=0;

    if(Ntop

    {

     if(park[Ntop].ADtime>aCar.ADtime)

     {

      cout<<"车到达时间输入有误!

(时间要小于之前车辆到达的时间)"<

      cout<<"重新输入车的信息!

"<

      continue;

     }

     for(i=Ntop;i

     {

      if(park[i].Carnumber==aCar.Carnumber)

      {

       cout<<"车牌号码已经存在!

重新输入车的信息!

"<

       j=1;

       break;

      }

     }

     if(1==j)

     {

      continue;

     }

    }

    j=0;

    if(Southroad->next!

=NULL)

    {

     if(Southtail->bcar.ADtime>aCar.ADtime)

     {

      cout<<"车到达时间输入有误!

(时间要小于之前车辆到达的时间)"<

      cout<<"重新输入车的信息!

"<

      continue;

     }

     p=Southroad->next;

     while(p!

=NULL)

     {

      if(p->bcar.Carnumber==aCar.Carnumber)

      {

       cout<<"车牌号码已经存在!

重新输入车的信息!

"<

       j=1;

       break;

      }

      p=p->next;

     }

     if(1==j)

     {

      continue;

     }

    }

    j=0;

    if(Northroad->next!

=NULL)

    {

     if(Northtail->bcar.ADtime>aCar.ADtime)

     {

      cout<<"车到达时间输入有误!

(时间要小于之前车辆到达的时间)"<

      cout<<"重新输入车的信息!

"<

      cout<

      continue;

     }

     p=Northroad->next;

     while(p!

=NULL)

     {

      if(p->bcar.Carnumber==aCar.Carnumber)

      {

       cout<<"车牌号码已经存在!

重新输入车的信息!

"<

       j=1;

       break;

      }

      p=p->next;

     }

     if(1==j)

     {

      continue;

     }

    }

    //进出车场的操作(包括进,出车场,进便道)

    do

    {

     i=0;

     cout<<"请选择车到来的方向:

"<

     cout<<"北门(North)或南门(South)"<

     cout<<"****************"<

     cout<<"1北门(North)"<

     cout<<"2南门(South)"<

     cout<<"****************"<

     cout<<"请输入你选择的编号:

"<

     cin>>NS;

     if(NS!

='1'&&NS!

='2')

     {

      i=1;

      cout<<"没有此选项"<

     }

    }while(i==1);

    if(Stop+1==Ntop)

    {

     cout<<"车场已满,车将进入便道"<

     switch(NS)

     {

     case'1':

      Nroad(aCar);

      break;

     case'2':

      Sroad(aCar);

      break;

     }

    }

    else

    {

     switch(NS)

     {

     case'1':

      Nparkingin(aCar);

      break;

     case'2':

      Sparkingin(aCar);

      break;

     default:

      break;

     }

    }

   }

   elseif(aCar.ADinfor=='D'||aCar.ADinfor=='d')

   {

    intjudge=0;

    intjudge1=0;

    for(i=0;i<=Stop;i++)

    {

     if(park[i].Carnumber==aCar.Carnumber)

     {

      if(park[i].ADtime>aCar.ADtime)

      {

       cout<<"输入时间有误(可能是离开时间小于到来时间)"<

       cout<<"检查输入信息,重新输入车的信息"<

       cout<

       judge1=1;

       break;

      }

      else

      {

       Sparkingout(aCar);

       judge=1;

       break;

      }

     }

    }

    for(i=n-1;i>=Ntop;i--)

    {

     if(park[i].Carnumber==aCar.Carnumber)

     {

      if(park[i].ADtime>aCar.ADtime)

      {

       cout<<"输入时间有误(可能是离开时间小于到来时间)"<

       cout<<"检查输入信息,重新输入车的信息"<

       cout<

       judge1=1;

       break;

      }

      else

      {

       Nparkingout(aCar);

       judge=1;

       break;

      }

     }

    }

    if(judge1==1)

    {

     continue;

    }

    if(judge==0)

    {

     cout<<"此车场中没有牌号为"<

重新输入车的信息!

"<

    }

   }

   else

   {

    cout<<"车的到达或离去信息错误!

重新输入车的信息!

"<

   }

}

}

//整个车场状况

voidParking:

:

Allshow()

{

inti=0;

BCar*p;

p=newBCar;

if(Stop==-1)

{

   cout<<"南门入口未有车进入"<

}

else

{

   for(i=0;i<=Stop;i++)

   {

    cout<<"车位:

南门第"<

    cout<<"车牌号是"<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1