小天才电话手表官网:紧急:数据结构(C++):停车场管理程序

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/19 03:48:14
[问题描述]设停车场是一个可停放n辆汽车的狭长通道,只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在停车场的最北端),若车场已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开是,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其他车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理模拟的程序。
[要求]以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列一链表结构实现。

/*use the TIME*/
#define N 2
#define dollar 2
#define Null 0
#define TRUE 1
#define FALSE 0
#include<dos.h>
#include<time.h>
typedef struct Node1
{
int n;
int carnumember;
int leavetime,arrivetime;
char atime[20];
struct Node1 *next;
}car;
typedef struct Node2
{
car *front;
car *rear;
}carnode;
typedef struct Node3
{
car *a[N];
car *b[N-1];
int topA,topB;
}carstack;
Initcar(carnode *Q)
{
Q->front=(car *)malloc(sizeof(car));
if(Q->front!=Null)
{
Q->rear=Q->front;
Q->rear->n=0;
Q->front->next=Null;
return(TRUE);
}
else return(FALSE);
}
Initstack(carstack *t)
{
t->topA=-1;
t->topB=-1;
}
outqueue(carnode *Q,carstack *t,time_t z)
{
car *p;
t->topA++;
strcpy(t->a[t->topA]->atime,(char*)ctime(&z));
t->a[t->topA]->carnumember=Q->front->next->carnumember;
t->a[t->topA]->arrivetime=z;
p=Q->front->next;
Q->front->next=p->next;
(Q->front->n)--;
free(p);
if(Q->front->next==Null)
Q->rear=Q->front;
printf("The car %d in station' place is:",t->a[t->topA]->carnumember);
printf("%d\n",t->topA);
printf("The car's arrivetime is:%s\n",t->a[t->topA]->atime);
}
outstack(carstack *t,int y,time_t z)
{
int m,money,n,k;
k=0;
if(t->topA==-1)
{
printf("The carstack is empty.\n");
return(FALSE);
}
while(t->a[k]->carnumember!=y)
{k++;
if(k==N)
return(FALSE);
}
n=(t->topA)-k;
for(m=0;m<n;m++)
{
(t->topB)++;
t->b[t->topB]->carnumember=a[t->topA]->carnumember;
t->b[t->topB]->arrivetime=a[t->topA]->arrivetime;
(t->topA)--;
}
m=z-t->a[t->topA]->arrivetime;
money=m*dollar;
printf("The stop time is:%d\nThe require money is %d\n",m,money);
(t->topA)--;
while(t->topB!=-1)
{
(t->topA)++;
t->a[t->topA]->carnumember=t->b[t->topB]->carnumember;
t->a[t->topA]->arrivetime=t->b[t->topB]->arrivetime;
(t->topB)--;
}
}
instack(carstack *t,int y,time_t z)
{
t->topA++;
t->a[t->topA]->carnumember=y;
t->a[t->topA]->arrivetime=z;
printf("The car in station' place is:%d\n",t->topA);
}
input(carnode *Q,int y,time_t z)
{
car *newnode;
newnode=(car *)malloc(sizeof(car));
if(newnode!=Null)
{
newnode->carnumember=y;
newnode->arrivetime=z;
newnode->n=Q->rear->n+1;
newnode->next=Q->rear->next;
Q->rear->next=newnode;
Q->rear=newnode;
printf("The queue situation is %d.\n",newnode->n);
}
else return(FALSE);
}
main()
{
int x=1,y,f;
time_t z;
time_t e;
int input(carnode *Q,int y,time_t z);
int instack(carstack *t,int y,time_t z);
int outstack(carstack *t,int k,time_t z);
int outqueue(caenode *Q,carstacl *t,time_t z);
int Initcar(caenode *Q);
carnode *Q;
carstack *t;
clrscr();
Q=Null;
Q=(carnode *)malloc(sizeof(carnode));
t=(carstack *)malloc(sizeof(carstack));
Initcar(Q);
Initstack(t);
L1:printf("Please input the car information:\n");
printf("The first numember \"1\"point \"arrive\"\n");
printf("\0\"point \"leave\".\n");
printf("The second numember is carnumember.\n");
printf("If input \"3,3\",the program ends.\n");
while(x!=3)
{
scanf("%d,%d",&x,&y);
time(&z);
e=z;
strcpy(t->a[t->topA+1]->atime,(char*)ctime(&e));
printf("*************%s\n",t->a[t->topA+1]->atime);
if(x==1)
{
if(Q->front->next==Null&&t->topA!=N-1)
instack(t,y,z);
else input(Q,y,z);
}
if(x==0)
{
if(outstack(t,y,z)==0)
goto L1;
if(Q->front->next!=Null)
outqueue(Q,t,z);
}
}
}



#define OK 1
#define ERROR 0
#define GARAGE 2
#define TAX 5
#define TAX2 0
#include<stdio.h>

typedef struct SNode{
int cartag,time;
}SNode;
typedef struct QNode{
int cartag,time;
struct QNode *next;
}QNode;
typedef struct{
struct SNode home[GARAGE];
int stacktop;
}CarStack;
typedef struct{
QNode *front,*rear;
}CarQueue;

CarStack CarS;
CarQueue CarQ;

void CarArrive(int cartag,int cartime){
if(CarS.stacktop<GARAGE){
CarS.home[CarS.stacktop].cartag=cartag;
CarS.home[CarS.stacktop].time=cartime;
printf("Car %d is in garage now(time: %d)!\n",CarS.home[CarS.stacktop].cartag,CarS.home[CarS.stacktop].time);
CarS.stacktop++;
}else{
CarQ.front->cartag=cartag;
CarQ.front->time=cartime;
printf("Car %d is in small road now(time:%d)!\n",CarQ.front->cartag=cartag,CarQ.front->time=cartime);
CarQ.front->next=(QNode *)malloc(sizeof(QNode));
CarQ.front=CarQ.front->next;
}
}
void CarLeave(int cartag,int cartime){
CarStack CarS2;
int i,findcar=-1;
QNode *p,*f;
CarS2.stacktop=0;
for(i=0;i<CarS.stacktop;i++){
if(cartag==CarS.home.cartag){
findcar=i;
break;
}
}
if(-1!=findcar){
for(;--CarS.stacktop>findcar;CarS2.stacktop++){
CarS2.home[CarS2.stacktop].cartag=CarS.home[CarS.stacktop].cartag;
CarS2.home[CarS2.stacktop].time=CarS.home[CarS.stacktop].time;
}
printf("Car %d is leave garage now(time: %d,stay(%d))!\n",CarS.home[CarS.stacktop].cartag,cartime,cartime-CarS.home[CarS.stacktop].time);
printf("this car should pay %d\n",(cartime-CarS.home[CarS.stacktop].time)*TAX);
for(i=CarS2.stacktop-1;i>=0;i--){
CarS.home[CarS.stacktop].cartag=CarS2.home.cartag;
CarS.home[CarS.stacktop].time=CarS2.home.time;
CarS.stacktop++;
CarS2.stacktop--;
}
if(CarQ.front!=CarQ.rear){
CarS.home[CarS.stacktop].cartag=CarQ.rear->cartag;
CarS.home[CarS.stacktop].time=CarQ.rear->time;
CarS.stacktop++;
p=CarQ.rear;
CarQ.rear=CarQ.rear->next;
free(p);
}
}else{
p=CarQ.rear;
if(p!=CarQ.front&&p->cartag!=cartag){
f=p->next;
while(f!=CarQ.front&&f->cartag!=cartag){
p=f;
f=f->next;
}
if(f->cartag==cartag){
findcar=1;
p->next=f->next;
printf("Car %d is leave small road now(time: %d,stay(%d))!\n",f->cartag,cartime,cartime-f->time);
printf("This car should pay %d\n",(cartime-f->time)*TAX2);
free(f);
}
}
if(p->cartag==cartag){
findcar=1;
CarQ.rear=CarQ.rear->next;
printf("Car %d is leave small road now(time: %d,stay(%d))!\n",p->cartag,cartime,cartime-p->time);
printf("This car should pay %d\n",(cartime-p->time)*TAX2);
free(p);
}
}
if(-1==findcar)printf("Num %d car is not found!\n",cartag);
}
int Move(char carmove,int cartag,int cartime){
switch(carmove){
case 'A':CarArrive(cartag,cartime);break;
case 'D':CarLeave(cartag,cartime);break;
case 'E':printf("EXIT!\n");return ERROR;
default :printf("Input ERROR!\n");break;
}
return OK;
}

main(){
int go=1,cartag,cartime;
char carmove;
CarS.stacktop=0;
CarQ.rear=CarQ.front=(QNode *)malloc(sizeof(QNode));
while(go){
printf("\nPlease enter the information!\n");
printf("move:\t\t");carmove=getch();
printf("%c\ncar number:\t",carmove);scanf("%d",&cartag);
printf("time:\t\t");scanf("%d",&cartime);
if(!Move(carmove,cartag,cartime))go=0;
}
getch();
}