停车管理

本文介绍了一个使用栈和链队列实现的简单停车场管理系统。该系统能够处理车辆的到达与离开操作,并根据车辆停放时间计算费用。通过两个栈分别用于存放进场与临时调用的车辆信息,以及一个链队列作为待入场车辆的等待区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
#include "iostream.h"
#include "stdlib.h"
#include "conio.h"
#define stackinitsize 3
typedef struct stack1
{
int spos;
int snum;
int smin,ssec,shour;
}stack1;
typedef struct
{
stack1 *top;
stack1 *base;
int stacksize;
}stack;
typedef struct qnode
{
int qpos;
int qnum;
int qmin,qsec,qhour;
struct qnode *next;
}qnode,*queueptr;
typedef struct {
queueptr front;
queueptr rear;
}linkqueue;
int initstack(stack &s)
{
s.base=(stack1 *)malloc(stackinitsize*sizeof(stack1));
if(!s.base)
{
  cout<<"it's can't malloc!"<<endl;
  exit(1);
}
s.top=s.base;
s.stacksize=stackinitsize;
s.top->shour=s.top->smin=s.top->snum=s.top->spos=s.top->ssec=0;
return 1;
}
initqueue(linkqueue &q)
{
q.fr.rear=(queueptr)malloc(sizeof(qnode));
if(!q.front)
{
  cout<<"it's can't malloc!"<<endl;
  exit(1);
}
q.front->next=NULL;
return 1;
}
int gettop(stack s,int &pos,int &num,int &hour, int &min, int &sec)
{
int e;
stack1 *p;
if(s.top==s.base)
{
  cout<<"it's a null!"<<endl;
  return 0;
}
p=s.top-1;
pos=p->spos;
num=p->snum;
hour=p->shour;
min=p->smin;
sec=p->ssec;
e=p->spos;
return e;
  
}
int push(stack &s,int pos,int num,int hour, int min, int sec)
{
s.top->spos=pos;s.top->snum=num;
s.top->shour=hour;s.top->smin=min;
s.top->ssec=sec;
s.top++;
return 1;
}
int pop(stack &s,int &pos,int &num,int &hour, int &min, int &sec)
{
s.top--;
pos=s.top->spos;num=s.top->snum;hour=s.top->shour;min=s.top->smin;
sec=s.top->ssec;
return 1;
}
int pop1(stack &s,int pos,int num,int hour, int min, int sec)
{
char a,b;
int hour1,min1,sec1;
int hour2,min2,sec2;
float value;
cout<<"please input pos's time to out of the car:"<<endl;
cin>>hour1>>a>>min1>>b>>sec1;
s.top--;
hour2=hour1-hour;min2=min1-min;sec2=sec1-sec;
value=(float)hour2*2+min2/60*2+sec2/120*2;
cout<<"the fee is "<<value<<endl;
return 1;
}
int enqueue(linkqueue &q,int pos,int num,int hour, int min, int sec)
{
queueptr p;
p=(queueptr)malloc(sizeof(qnode));
if(!p)
{
  cout<<"can't malloc!"<<endl;
  exit(1);
}
p->qpos=pos;p->qnum=num;p->qhour=hour;
p->qmin=min;p->qsec=sec;
p->next=NULL;
q.rear->next=p;
q.rear=p;
return 1;
­
}
int dequeue(linkqueue &q,int &pos,int &num,int &hour, int &min, int &sec)
{
if(q.front==q.rear)
{
  return 0;
}
queueptr p;
p=q.front->next;
pos=p->qpos;num=p->qnum;hour=p->qhour;min=p->qmin;sec=p->qsec;
q.front->next=p->next;
if(q.rear==p)
  q.rear=q.front;
free(p);
return 1;
}
main()
{
char show='1';
char a,b;
int pos,num,sec,hour,min;
int pos1;
int i=0;
stack s1,s2;
linkqueue q;
initstack(s1);
initstack(s2);
initqueue(q);
while(show!='E')
{
  cout<<"please input the value to control the car:"<<endl;
  cout<<"'A':Arrival,'D':Departure,'E':End"<<endl;
  cin>>show;
  
switch(show)
{
  
case 'A' :
  cout<<"/nplease input the pos:"<<endl;
  cin>>pos;
  cout<<"/nit's car number:"<<endl;
  cin>>num;
  cout<<"please input it's arrival time:(10:20:30)"<<endl;
  cin>>hour>>a>>min>>b>>sec;
  
  enqueue(q,pos,num,hour,min,sec);
  if(s1.top-s1.base<s1.stacksize)
  {
   dequeue(q,pos,num,hour,min,sec);
   push(s1,pos,num,hour,min,sec);
  }
  break;
case 'D' :
  cout<<"/nplease input the pos:"<<endl;
  cin>>pos1;
  if(s1.top==s1.base)
   cout<<"the field is no car!"<<endl;
  else
  {
      if(pos1==gettop(s1,pos,num,hour,min,sec))
    pop1(s1,pos,num,hour,min,sec);
   else
   {
    do
    {
     pop(s1,pos,num,hour,min,sec);
     push(s2,pos,num,hour,min,sec);
     i++;
    }while(pos1!=gettop(s1,pos,num,hour,min,sec));
    pop1(s1,pos,num,hour,min,sec);
    while(i--)
    {
     pop(s2,pos,num,hour,min,sec);
     push(s1,pos,num,hour,min,sec);
    }
    if(q.front!=q.rear)
    {
        while(s1.top-s1.base<s1.stacksize)
     {
          dequeue(q,pos,num,hour,min,sec);
          push(s1,pos,num,hour,min,sec);
     }
    }
   }
  }
  break;
case 'E' :
  exit(1);
default:
  cout<<"your input is wrong!"<<endl;
}
}
return 1;
}
­
还不够健壮!
问题描述: 汽车在停车场内按车到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车放在车场的最北端),若车场内已停满车辆,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,在他之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在他离开时必须按他停留时间长短缴纳费用。以栈模拟停车场,以队列模拟车场外的便道,按照从中端读入的输入数据序列进行模拟管理。每一组输入数据进行包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号以及到达或离去的时刻。车离开时,输出汽车应缴纳的停车费。 狭长停车场只有一个门可容纳n辆车,当在有车进来时须停在外面的便道上,当停车场里的车开走时,它后面的车须首先退出为它让道,之后再按原来的次序进入停车场,此时停在便道上的第一两车可以进入停车场,从终端输入数据包括车是离去还是到达,车牌号码,到达或者离去的时间,输出相关信息并输出相关停车费用,停在便道上车在未进停车场就离去不收费。 实现提示:用栈和队列,停车场要以栈实现,还须另外设一栈用来为让道停放退出来的车,便道上的车以队列实现,栈以顺序存储,而队列以链式存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值