//思路:利用两个二位字符串数组pl,bd分别模拟停车场和便道,sum1
和sum2记录停车场和便道里车的数量,主要分类讨论便道和停车场里车
的数量(代码里有注释),另外注意数组下标的改变方式,我是以0表示
没有车,所以add命令对应的操作是++sum1||++sum2,注意++sum1和
sum1++的区别。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char pl[10005][20],bd[10005][20],num[20];
int main()
{
int n,m,i;
char order[5];//存入命令
while(~scanf("%d %d",&n,&m))//多组输入
{
int sum1=0,sum2=0,flag=0;//初始化,flag用于表示操作是否合法
while(m--)
{
scanf("%s",order);
if(strcmp(order,"Add")==0)
{
scanf("%s",num);
if(sum1<n)//停车场有空位
{
strcpy(pl[++sum1],num);
}
else strcpy(bd[++sum2],num);//停车场满,车入便道
}
else if(strcmp(order,"Del")==0)
{
if(sum1==0) flag=1;//停车场没车,此操作非法
else
{
if(sum2==0) sum1--;//便道没车,直接停车场减一
else if(sum2=1)//注意要分类出便道一辆车的情况(一辆车无法进行覆盖操作)
{
strcpy(pl[sum1],bd[1]);
sum2=0;
}
else
{
strcpy(pl[sum1],bd[1]);
for(i=1; i<sum2; i++)//便道内覆盖操作
{
strcpy(bd[i],bd[i+1]);
}
sum2--;
}
}
}
else if(strcmp(order,"Out")==0)//同理
{
if(sum2==0) flag=1;
else sum2--;
}
}
if(flag==1) printf("Error\n");//如果操作非法输出Error
else
for(i=sum1; i>=1; i--)
{
printf("%s\n",pl[i]);
}
}
return 0;
}
//Think:其实便道可以用队列表示,但感觉有点麻烦,所以都用栈了。
数据结构实验之栈与队列十一:refresh的停车场
最新推荐文章于 2022-07-07 22:36:33 发布