青灯392 2021-07-02 08:47 采纳率: 100%
浏览 39
已采纳

有几个数据结构模拟停车场管理的问题想请教各位,请各位看看这篇吧

这是本人答辩的问题,由于自己的原因基础蛮差的,所以对答辩问题无从下手,请各位大佬帮忙解决一下。
1.停车场和便道是用什么存储结构实现的
2.停车场出车如何实现
3.停车场计费如何实现
#include "stdio.h"
#include "stdlib.h"
#define A 5 /* 停车单价 /
#define TRUE 1
#define FALSE 0
#define NULL 0
#define Stack_Size 2 /
车库容量 /
typedef struct
{
int elem1[Stack_Size];
int elem2[Stack_Size];
int elem3[Stack_Size];
int elem4[Stack_Size];
int top;
}SeqStack; /
定义栈的结构体 */
typedef struct Node
{
int date;
int num;
int hour;
int minute;
struct Node next;
}LinkQueueNode; /
定义链队列结点的结构体 */
typedef struct
{
LinkQueueNode front;
LinkQueueNode rear;
}LinkQueue; /
定义链队列的结构体
/
InitQueue(LinkQueue Q) / 初始化链队列函数 */
{
Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(Q->front!=NULL)
{
Q->rear=Q->front;
Q->front->next=NULL;
return(TRUE);
}
else return(FALSE);
}
EnterQueue(LinkQueue Q,int x,int y,int z,int w) / 入链队列函数 */
{
LinkQueueNode *NewNode;
NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
if(NewNode!=NULL)
{
NewNode->num=x;
NewNode->date=y;
NewNode->hour=z;
NewNode->minute=w;
NewNode->next=NULL;
Q->rear->next=NewNode;
Q->rear=NewNode;
return(TRUE);
}
else return(FALSE);
}
DeleteQueue(LinkQueue *Q,int *x,int *y,int *z,int w) / 删除链队列结点函数 */
{
LinkQueueNode *p;
if(Q->front==Q->rear)
{
return(FALSE);
}
p=Q->front->next;
Q->front->next=p->next;
if(Q->rear==p)
{
Q->rear=Q->front;
}
*x=p->num;
*y=p->date;
*z=p->hour;
*w=p->minute;
free(p);
return(TRUE);
}
void InitStack(SeqStack S) / 初始化栈 */
{
S->top=-1;
}
int Push(SeqStack S,int x,int y,int z,int w) / 栈插入函数 */
{

S->elem1[S->top]=x;
S->elem2[S->top]=y;
S->elem3[S->top]=z;
S->elem4[S->top]=w;
S->top++;
return(TRUE);

}
int Pop(SeqStack *S,int *x,int *y,int *z,int w) / 栈删除函数 */
{
if(S->top==-1)
{
return(FALSE);
}
else {
S->top--;
*x=S->elem1[S->top];
*y=S->elem2[S->top];
*z=S->elem3[S->top];
*w=S->elem4[S->top];

    return(TRUE);
}

}
int IsFull(SeqStack S) / 判断栈满函数 */
{
return(S->top==Stack_Size-1?TRUE:FALSE);
}
int IsEmpty(SeqStack S) / 判断栈满函数 /
{
return(S->top==-1?TRUE:FALSE);
}
int choose() /
选择函数 /
{
int m;
printf(" 请选择:1. 停车; 2. 停车场出车; 3. 便道出车;4.退出 ");
scanf("%d",&m);
if(m==1||m==2||m==3)
{
return(m);
}
if(m==4)
{
exit(0); /
整个程序由此结束 /
}
else
{
printf("选择错误!");
exit(1);
}
}
void main()
{
int m,num,pp=1,k=0,p=0,x,y,z,w,t ,date,hour,minute;
LinkQueue Q=(LinkQueue)malloc(sizeof(LinkQueue));
SeqStack S=(SeqStack)malloc(sizeof(SeqStack)),R=(SeqStack)malloc(sizeof(SeqStack));
InitQueue(Q);
InitStack(R);
InitStack(S);
while(pp!=0) /
控制程序一直循环 /
{
m=choose(); /
整个程序由此进 /
printf("请输入汽车号码: ");
scanf("%d",&num);
printf("请输入时间:例:20,7:35表示某月20日7:35停车或出车 ");
scanf("%d,%d:%d",&date,&hour,&minute);
if(m==1)
{
printf("No.%d 号汽车停在 ",num);
if(IsFull(S)) /
先判断车库是否满了 /
{
EnterQueue(Q,num,date,hour,minute); /
如果满了,则放入便道里(链队列) /
k++; /
便道里的位置计数器 /
printf("便道中的第 %d 号位置. ",k);
}
else
{
Push(S,num,date,hour,minute); /
如果不满,则放入车库里(顺序栈) /
p++; /
车库里的位置计数器 /
printf("停车场的第 %d 号位置! ",p);
}
}
if(m==2)
{
if(IsEmpty(S)) /
判断车库还有车吗,其作用为防止非法输入 /
{
printf("车库为空,No.%d 不在!",num);
exit(2);
}
while(num!=S->elem1[S->top]) /
寻找所要出的车 /
{
Pop(S,&x,&y,&z,&w); /
车库最外辆车出库 /
while(p>0)
{
p--; /
出车则减一个数 /
}
Push(R,x,y,z,w); /
将刚出的车入临时车库(顺序栈) /
}
Pop(S,&x,&y,&z,&w); /
找到车后将其弹出 /
p--; /
出车则减一个数 */
t=(date-y)1440+(hour-z)60+minute-w; / 计算其停车时间 /
printf("No.%d 的车在车库停了 %d 分钟.$:%d ",num,t,t
A);
while(!IsEmpty(R))
{
Pop(R,&x,&y,&z,&w);
Push(S,x,y,z,w);
p++;
} /
将临时车库的车全部转到车库 /
if(Q->front!=Q->rear) /
判断便道是否有车 /
{ DeleteQueue(Q,&x,&y,&z,&w); /
如果有则出便道 /
Push(S,x,y,z,w); /
进车库 /
p++; /
车库计数器加1 /
k--; /
便道计数器减1 */
}
}
if(m==3)
{

         DeleteQueue(Q,&x,&y,&z,&w);
          k--;
          t=(date-y)*1440+(hour-z)*60+minute-w;
          printf("No.%d 的车在便道停了 %d 分钟.",num,t);
        
    }
}   

}

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-07-02 08:57
    关注

    是用结构体作为存储结构的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办
  • ¥15 vue2登录调用后端接口如何实现