停车场管理(下)

简介: 设停车场是一个可以停放n辆汽车的南北方向的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆车,那么后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。试为停车场编制按上述要求进行管理的模拟程序。要求程序输出每辆车到达后的停车位置(停车场或便道上)

详细设计

1.车辆到达

if (Enter->top<MAX) /*车场 未满,车进车场*/
{ Enter->top++;
printf ("\n\t\t\t该车辆在停车场的位置是: %\n",Enter->top);
printf(" \n\t\t\t请输入该车辆到达的时间: ") ;
scanf ("%d", & (p->reachtime));
Enter->stack[Enter->top]=p;
return(1) ;
}
else

2.车辆离开

if (Enter->top>0) /*有车*/
{ while(1) /*输入离开车辆的信息*/
{ printf(" \t\t\t停车场里停放的车辆总数: %d", Enter->top) ;
printf(" \n\n\t\t\t请输入要离开车辆的位置: ") ;
scanf ("%d" , &room) ;
if (room>=1&&room<=Enter->top)
break;}
while (Enter->top>room) /*车辆离开*/

3.主函数

while(1)
{ scanf("%d" , &ch) ;
printf("\n") ;
if (ch>= 1&&ch<=4) break;
else
printf("\n\t\t\t错误!请再次做出选择! \n\n\t\t\t");}
switch (ch)
{ case 1:Arrival (&Enter, &Wait) ; break; /*车辆到达*/case 2: Leave (&Enter, &Temp, &Wait) ; break; /*车辆离开
*/
case 3:List (Enter, Wait); break; /*列表打印信息*/
case 4:exit(0) ;
/*退出主程序*/
default: break; }

带注释的源程序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 2 /*车库容量*/
#define price 3 /*每车每时刻费用*/
typedef struct node
{ int num;
int reachtime;
int leavetime;
}CarNode; /*车辆信息结点*/
typedef struct NODE
{ CarNode *stack [MAX+1];
int top;
} SeqStackCar; /* 模拟车站*/
typedef struct car
{CarNode *data;
struct car *next ;
} QueueNode;
typedef struct Node
{ QueueNode *head;
QueueNode *rear ;
}LinkQueueCar; /*模拟通道*/
/*函数声明部分*/
void InitStack (SeqStackCar *); /*初始化栈*/
int InitQueue (LinkQueueCar *) ; /*初始化便道*/
int Arrival (SeqStackCar *, LinkQueueCar *); /*车辆到达*/
void Leave (SeqStackCar *, SeqStackCar *, LinkQueueCar *); /*车辆离开*/
void List (SeqStackCar, LinkQueueCar); /*显示存车信息*/
void PRINT (CarNode*p) ;
int main()
{ SeqStackCar Enter, Temp;
LinkQueueCar Wait;
int ch;
InitStack (&Enter); /*初始化车站*/
InitStack (&Temp); /*初始化让路的临时栈*/
InitQueue (&Wait); /*初始化通道*/
while(1)
{
printf(" \n\n\t\t\t1.车辆到达请选择1");
printf("\n\n\t\t\t2.车辆离开请选择2");
printf(" \n\n\t\t\t3.车辆信息请选择3");
printf("\n\n\t\t\t4.退出程序请选择4");
printf("\n\n\t\t\t现在请选择以上信息: ");
while(1)
{ scanf("%d" , &ch) ;
printf("\n") ;
if (ch>= 1&&ch<=4) break;
else
printf("\n\t\t\t错误!请再次做出选择! \n\n\t\t\t");}
switch (ch)
{ case 1:Arrival (&Enter, &Wait) ; break; /*车辆到达*/case 2: Leave (&Enter, &Temp, &Wait) ; break; /*车辆离开
*/
case 3:List (Enter, Wait); break; /*列表打印信息*/
case 4:exit(0) ;
/*退出主程序*/
default: break; }
}
}
void InitStack (SeqStackCar *s) /*初始化栈*/
{
int i;
s->top=0;
for(i=0;i<=MAX;i++)
s->stack[s->top]=NULL;
}
int InitQueue (LinkQueueCar *Q) /*初始化便道*/
{Q->head= (QueueNode *) malloc (sizeof (QueueNode)) ;
if (Q->head!=NULL)
{Q->head->next=NULL;
Q->rear=Q->head;
return(1) ;
}
else
return(-1) ;
}
void PRINT (CarNode *p) /*打 印出站车的信息*/
{int A1, A2;
printf ("\n\t\t\t请输入离开时间: ") ;
scanf(" %d" , &(p->leavetime)) ;
printf("\n\t\t\t离开车辆的车牌号: %d",p->num) ;
printf ("\n\n\t\t\t离开车辆到达时间: %d", p->reachtime) ;
printf("\n\n\t\t\t离开车辆离开时间: %d" , p->leavetime) ;
A1=p->reachtime;
A2=p->leavetime;
printf(" \n\n\t\t\t停车场管理费用: %d", (A2- -A1) *price) ;free(p);
}
int Arrival (SeqStackCar *Enter, LinkQueueCar *W) /* 车辆到达*/
{ CarNode *p;
QueueNode *t ;
p= (CarNode *) malloc (sizeof (CarNode)) ;
printf("\t\t\t请输入到达车辆车牌号: ");
scanf ("%d", & (p->num));
if (Enter->top<MAX) /*车场 未满,车进车场*/
{ Enter->top++;
printf ("\n\t\t\t该车辆在停车场的位置是: %\n",Enter->top);
printf(" \n\t\t\t请输入该车辆到达的时间: ") ;
scanf ("%d", & (p->reachtime));
Enter->stack[Enter->top]=p;
return(1) ;
}
else
/*车场已满,车进便道*/
{ printf(" \n\t\t\t停车场已满 该车辆需在便道上等待! ");getchar() ;
t= (QueueNode *) malloc (sizeof (QueueNode)) ;
t->data-p;
t->next-NULL;
W->rear->next=t;W->rear=t;
return(1) ;
}
}
void Leave (SeqStackCar *Enter, SeqStackCar *Temp, LinkQueueCar*W) /*车 辆离开*/
{ int room;
CarNode *p, *t;
QueueNode *q;
/*判断车场内是否有车*/
if (Enter->top>0) /*有车*/
{ while(1) /*输入离开车辆的信息*/
{ printf(" \t\t\t停车场里停放的车辆总数: %d", Enter->top) ;
printf(" \n\n\t\t\t请输入要离开车辆的位置: ") ;
scanf ("%d" , &room) ;
if (room>=1&&room<=Enter->top)
break;}
while (Enter->top>room) /*车辆离开*/
{Temp->top++;
Temp->stack [Temp->top] =Enter->stack [Enter->top];
Enter->stack [Enter->top]=NULL;
Enter->top-- ;
}
p=Enter->stack [Enter->top];
Enter->stack [Enter->top]=NULL;
Enter->top-- ;
while (Temp->top>=1)
{Enter->top++;
Enter->stack[Enter->top]=Temp->stack[Temp->top];
Temp->stack [Temp->top]=NULL;
Temp->top-- ;
}
PRINT(p) ;
/*判断通道上是否有车及车站是否已满*/
if((W->head!=W->rear)&Enter->top<MAX) /*便道的车辆进入车场*/
{ q=W->head->next;
t=q->data;
Enter-> top++;
printf("\n\n\t\t\t便道的%d号车进入车场第%d位置", t->num, Enter->top) ;
printf(" \n\n\t\t\t靖輸入現在的吋同:");
scanf ("%d", & (t->reachtime)) ;
W->head->next=q->next;
if(q==W->rear)
W->rear-W->head;
Enter->stack [Enter->top]=t;
free (q) ;
}
else
printf(" \n\n\t\t\t便道里没有车. \n");
}
else
printf(" \n\n\t\t\t车场里没有车."); /*没车*/
}
void List1 (SeqStackCar *S) /*列表 显示车场信息*/
{ int i;
if(S->top>0) /*判断车站内是否有车*/
{ printf(" \n\t\t\t车场:") ;
printf("\n\n\t\t\t位置到达时间车牌号\n");
for(i=1;i<=S->top;i++)
{printf("%26d", i);
printf("%6d", S->stack[i]->reachtime) ;
printf("%10d", S->stack[i]->num) ;
printf("(n");
}
}
else
printf(" \n\t\t\t车场里没有车");
}
void List2 (LinkQueueCar *W) /*列表显示便道信息*/
{QueueNode *p;
p=W->head->next;
if (W->head!=W->rear) /*判断通道.上是否有车*/
{ printf("\n\t\t\t等待车辆的号码为: ");
while (p!=NULL)
{ printf("%- 10d", p->data->num) ;
p=p->next;
}
printf("\n") ;
}
else
printf("\n\t\t\t便道里没有车.");
}
void List (SeqStackCar S, LinkQueueCar W)
{ int flag, tag;
flag=1;
while(flag)
{ printf("\n\t\t\t请选择 1|2|3:");
printf("\n\n\t\t\t1. 车场\n\n\t\t\t2. 便道\n\n\t\t\t3. 返回\n\n\t\t\t");
while(1)
{scanf("%d" , &tag) ;
if (tag>=1||tag<=3) break;
else printf("\n\t\t\t请选择1|2|3:") ;
}
switch (tag)
{ case 1:List1(&S) ;break; /*列表显示车场信息*/
case 2:List2 (&W) ; break;
 /*列表显示便道信息*/
case 3:flag=0; break;
default: break;
}
}
}
相关文章
|
9天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
|
9天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
15天前
|
网络协议 Linux iOS开发
【2026实测】Wireshark下载+安装+汉化+使用教程(图文版,巨详细)
Wireshark 是一款免费开源的网络协议分析工具,可实时捕获、解析并可视化数据包,助你诊断网络故障、分析通信协议(如HTTP、DNS、TCP等)。支持Windows/macOS/Linux,含中文界面,新手入门便捷。(239字)
|
10天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
1906 15
|
8天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1017 1
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
14天前
|
人工智能 运维 BI
阿里云千问办公QwenWork深度解析:基于Qwen3.8,六大核心能力重构企业全自动化工作流与计费选型指南
传统AI办公工具大多停留在对话问答、文档摘要、简单文案生成层面,只能完成单点碎片化任务,无法自主拆解复杂业务流程,很难串联多工具、多文档、外部业务系统完成端到端完整工作交付。很多企业在落地AI办公的时候,需要组合多款不同工具,来回切换界面,手动复制粘贴中间结果,智能化改造落地门槛居高不下。千问办公QwenWork是整合多款智能体产品能力打造的一体化企业办公智能体平台,底层基座依托Qwen3.8大模型,打通桌面端Agent、云端Agent、企业协同Agent三种运行形态,不再局限简单问答,接收业务目标之后自主拆解任务步骤,调用各类工具,处理文档、表格、浏览器自动化、数据查询,直接输出可交付的办公
1669 4
|
10天前
|
缓存 人工智能 自然语言处理
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
本文是阿里云百炼平台Qwen3.8-Flash大模型的选型接入指南,作为兼顾性能与响应速度的高性价比多模态模型,它支持百万级上下文窗口、全场景多模态输入与完整智能体能力矩阵,适配编程辅助、智能体协作等核心场景。文中同步梳理了最新下调的阶梯定价、夜间4折等优惠活动,搭配OpenAI兼容流式调用示例,帮助开发者低成本快速落地高并发AI应用。
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
|
16天前
|
缓存 数据可视化 开发工具
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
DeepSeek Harness 的更新分两层:本体更新(npx 自动最新、npm update -g、源码 git pull)与插件更新(插件市场点更新、命令行覆盖安装)。本文按「准备 → 更新本体 → 更新插件 → 更新后检查」四步走,覆盖新手常见疑问。
1816 1
DeepSeek Harness 怎么更新?dsh 更新完整指南:更新本体(npx、npm、源码)与更新插件两种方式
|
11天前
|
SQL 人工智能 前端开发
QoderWake 1.0 正式发布:从桌面里的 Agent,到工作现场的数字员工
QoderWake v1.0正式发布:企业级数字员工团队平台。支持“一句话建岗”,预置10类特训岗位;Waker常驻钉钉/飞书群,@即响应、自动协作、跨任务记忆;具备定时/事件/API多触发方式与统一任务看板;已沉淀27.6万条记忆、12.3万项技能,助力组织实现人机协同增效。
821 2
|
9天前
|
缓存 测试技术 API
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)
DeepSeek V4.1 Flash 内测不用申请,base_url 不变、改个模型名就能调,9/10 到期。本文讲清接入、计费限流与多模态注意点。
830 0
DeepSeek V4.1 Flash 内测接入:改个模型名即可调用(附代码)

热门文章

最新文章