停车场管理


题目描述

[问题描述]

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

[基本要求]

以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。

[实现提示]

需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据按到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项:汽车的牌照号码和进入停车场的时刻。

解题步骤

首先

车子car信息有车牌号和到达停车场的时间

停车场park为栈,大小为N。

临时让路道tmp为栈,大小为M。

通道line为链队列。

//车子
typedef struct Car{int num;int time;
}Car;//栈
typedef struct stack{Car *base;Car *top;int curlen;
}Park,Tmp;Park park; //停车场(栈)
Tmp tmp; //临时让路道(栈)//链队列结点:数据域为车子
typedef struct qnode{Car car;struct qnode *next;
}qnode;//链队列
typedef struct queue{qnode *front;qnode *rear;int curlen;
}Line;Line line; //通道(链队列)

其次初始化停车场park、临时让路道tmp、通道line,就是分配空间等基本操作。

//初始化停车场park(栈)
void Initpark(){park.base=(Car *)malloc(sizeof(Car)*N);park.top=park.base;park.curlen=0;
}//初始化临时让路道tmp(栈)
void Inittmp(){tmp.base=(Car *)malloc(sizeof(Car)*M);tmp.top=tmp.base;tmp.curlen=0;
}//初始化通道line(链队列)
void Initline(){line.front=(qnode *)malloc(sizeof(qnode));line.front->next=NULL;line.rear=line.front;line.curlen=0;
}

其次

进停车场park、临时让路道tmp、通道line的操作算法,都是简单的入栈和入队操作,如下:

//车子进停车场park(栈)
void Inpark(Car e){*(park.top)=e;park.top++;park.curlen++;printf("车辆%d停放在停车场第%d个位置.\n",e.num,park.curlen);
}//车子进通道line(链队列)
void Inline(Car e){qnode *s=(qnode*)malloc(sizeof(qnode));s->car=e;s->next=NULL;line.rear->next=s;line.rear=s;line.curlen++;printf("车辆停放在通道第%d个位置.\n",line.curlen);
}//车子进去临时让路道tmp(栈)
void Intmp(Car e){*(tmp.top)=e;tmp.top++;tmp.curlen++;
}

然后

出栈函数和取队头元素,此处出栈函数是park栈和tmp栈所需的操作,取队头元素是为了得到通道上第一辆车。

//出栈操作
void Outstack(stack *s){s->top--;s->curlen--;
}//通道line(链队列)的第一辆车即队头元素
Car Outline(){qnode *firstqnode=line.front->next;Car firstcar=firstqnode->car;line.front->next=firstqnode->next;line.curlen--;return firstcar;
}

简单的遍历操作,显示栈里元素和队列元素如下:

void Dispark(){printf("停车场:\n");Car *p=park.base;while(p!=park.top){printf("车辆:%d\t到达时间:%d\n",p->num,p->time);p++;}
}
void Disline(){printf("通道:\n");qnode *p=line.front->next;while(p){printf("车辆:%d\t到达时间:%d\n",(p->car).num,(p->car).time);p=p->next;}

最后

也是较为复杂的操作,即出停车场的操作。

需要先在park栈里找到要出停车场的车子left_car,从park栈栈顶元素逐个弹出到tmp栈里,找到left_car后,从停车场弹出,然后将tmp栈的元素又逐个弹出到park栈,最后取line队列里队头元素,即通道里第一辆车,入park栈。

//车子出停车场park
void Outpark(Car e){int num=e.num;int outtime=e.time; //离开时间Car *c=park.top-1; //栈顶元素while(c->num!=num&&park.top>park.base){Intmp(*c); //栈顶元素(车子)进临时让路道Outstack(&park); //栈顶元素(车子)暂时弹出去c--;}if(park.top==park.base) {printf("停车场无此车.\n");}else{int spendtime=outtime-(c->time);printf("收费%d\n",spendtime);Outstack(&park); //车子出停车场}//将所有临时让路道里的车子出tmp栈,并入park栈while(tmp.curlen>0){Outstack(&tmp);Inpark(*(tmp.top));}//让通道line里的队头元素(车子)进停车场parkwhile(park.curlen<N&&line.curlen>0){Car linefirstcar=Outline();linefirstcar.time=e.time;Inpark(linefirstcar);}
}

源代码

#include<stdio.h>
#include<stdlib.h>
#define N 3 //停车场park总共位置
#define M 3 //通道line总共位置//车子
typedef struct Car{int num;int time;
}Car;//栈
typedef struct stack{Car *base;Car *top;int curlen;
}Park,Tmp;Park park; //停车场(栈)
Tmp tmp; //临时让路道(栈)//链队列结点:数据域为车子
typedef struct qnode{Car car;struct qnode *next;
}qnode;//链队列
typedef struct queue{qnode *front;qnode *rear;int curlen;
}Line;Line line; //通道(链队列)//初始化停车场park(栈)
void Initpark(){park.base=(Car *)malloc(sizeof(Car)*N);park.top=park.base;park.curlen=0;
}//初始化临时让路道tmp(栈)
void Inittmp(){tmp.base=(Car *)malloc(sizeof(Car)*M);tmp.top=tmp.base;tmp.curlen=0;
}//初始化通道line(链队列)
void Initline(){line.front=(qnode *)malloc(sizeof(qnode));line.front->next=NULL;line.rear=line.front;line.curlen=0;
}//车子进停车场park(栈)
void Inpark(Car e){*(park.top)=e;park.top++;park.curlen++;printf("车辆%d停放在停车场第%d个位置.\n",e.num,park.curlen);
}//车子进通道line(链队列)
void Inline(Car e){qnode *s=(qnode*)malloc(sizeof(qnode));s->car=e;s->next=NULL;line.rear->next=s;line.rear=s;line.curlen++;printf("车辆停放在通道第%d个位置.\n",line.curlen);
}//车子进去临时让路道tmp(栈)
void Intmp(Car e){*(tmp.top)=e;tmp.top++;tmp.curlen++;
}//出栈操作
void Outstack(stack *s){s->top--;s->curlen--;
}//通道line(链队列)的第一辆车即队头元素
Car Outline(){qnode *firstqnode=line.front->next;Car firstcar=firstqnode->car;line.front->next=firstqnode->next;line.curlen--;return firstcar;
}//车子出停车场park
void Outpark(Car e){int num=e.num;int outtime=e.time; //离开时间Car *c=park.top-1; //栈顶元素while(c->num!=num&&park.top>park.base){Intmp(*c); //栈顶元素(车子)进临时让路道Outstack(&park); //栈顶元素(车子)暂时弹出去c--;}if(park.top==park.base) {printf("停车场无此车.\n");}else{int spendtime=outtime-(c->time);printf("收费%d\n",spendtime);Outstack(&park); //车子出停车场}//将所有临时让路道里的车子出tmp栈,并入park栈while(tmp.curlen>0){Outstack(&tmp);Inpark(*(tmp.top));}//让通道line里的队头元素(车子)进停车场parkwhile(park.curlen<N&&line.curlen>0){Car linefirstcar=Outline();linefirstcar.time=e.time;Inpark(linefirstcar);}
}void Dispark(){printf("停车场:\n");Car *p=park.base;while(p!=park.top){printf("车辆:%d\t到达时间:%d\n",p->num,p->time);p++;}
}
void Disline(){printf("通道:\n");qnode *p=line.front->next;while(p){printf("车辆:%d\t到达时间:%d\n",(p->car).num,(p->car).time);p=p->next;}
}int main(){Initpark();Inittmp();Initline();int flag=0;while(flag!=99){printf("1.汽车停放\t");printf("2.汽车离开\t");printf("3.查看停车场\t");printf("4.查看通道\t");printf("99.退出\n");printf("请输入:");scanf("%d",&flag);switch(flag){case 1:{printf("输入车牌号和当前时间:");Car car;scanf("%d%d",&car.num,&car.time);if(park.curlen<N)Inpark(car);else if(line.curlen<M)Inline(car);elseprintf("不好意思,无空地!\n");break;}case 2:{printf("输入车牌号和当前时间:");Car car;scanf("%d%d",&car.num,&car.time);Outpark(car);break;}case 3:{Dispark();break;}case 4:{Disline();break;}case 99:{break;}default:printf("输入有误!\n");}}return 0;
}

数据结构C语言之停车场管理相关推荐

  1. 停车场自动计费系统 c语言,数据结构用c语言实现停车场管理完整系统.doc

    数据结构用c语言实现停车场管理完整系统 题目:用C语言实现停车场管理程序的设计 天津农学院 11计算机系计科 小组成员: 王亚洲 1108014219 王浩轩 1108014208 穆建良110801 ...

  2. 简单利用C语言 解决停车场管理问题

    简单利用C语言 解决停车场管理问题 设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的先后次序依次从停车场最里面向大门口处停放 (即最先到达的第一辆车停放在停车 ...

  3. 数据结构课设--2停车场管理(栈和队列的应用)

    2.停车场管理(栈和队列的应用) [问题描述] 设停车场是一个可以停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次有北向南排列(大门在最南端,最先到达的 ...

  4. C语言数据结构课程设计-停车场管理

    停车场管理 1.课程设计目的 2. 课程设计内容和要求 2.1问题描述: 2.2设计要求: 3.课程设计总体方案及分析 3.1问题分析 3.2 概要设计 3.3 测试结果 4. 课程设计总结 5. 附 ...

  5. 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一.设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程.通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择 ...

  6. c语言数据结构课程设计停车场管理系统,数据结构课程设计报告停车场管理系统...

    <数据结构课程设计报告停车场管理系统>由会员分享,可在线阅读,更多相关<数据结构课程设计报告停车场管理系统(8页珍藏版)>请在人人文库网上搜索. 1.数据结构课程设计报告系 别 ...

  7. 停车场c语言程序,C语言停车场管理标准系统源代码

    <C语言停车场管理标准系统源代码>由会员分享,可在线阅读,更多相关<C语言停车场管理标准系统源代码(10页珍藏版)>请在人人文库网上搜索. 1.include#include车 ...

  8. C语言课程设计之停车场管理问题

    C语言课程设计之停车场管理问题 1.问题描述:停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出.汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第 ...

  9. 数据结构 停车场管理

    目录 一.需求分析 功能需求: 界面需求: 二.概要设计 接口设计 数据结构设计 三.详细设计 四.调试分析 五.用户手册 六.测试结果 一.需求分析 功能需求: 停车场是一个可停放n辆汽车的狭长通道 ...

最新文章

  1. Java Web项目中解决中文乱码方法总结
  2. 24 GISer必备知识(一) 坐标系
  3. Java JVM总结
  4. java list stream avg_Java 8 Stream API中的多个聚合函数
  5. ThinkPHP/---合并数组后按时间排序
  6. 智能擦窗机器人的社会意义_告别传统清扫方式 AWE玻妞展示擦窗机器人
  7. 老鸟的Python新手教程
  8. 51nod 1428 活动安排问题 (贪心+优先队列)
  9. 天梯赛座位分布-一点都不垃圾的模拟题,代码长度超过100行的都是傻子
  10. Soui教程_v20201024
  11. 加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)
  12. Excel定义函数自动填充
  13. Centos7 搭建多用户SFTP服务,并开启日志记录
  14. 什么是前后端分离技术?
  15. 利用黎曼几何分析EEG信号(四):集论初步与拓扑空间初步
  16. 生日祝福卡片 html,暖心的卡片生日祝福语
  17. PADS-VX入门到精通实战项目讲解(下)—layout部分-覃小刚-专题视频课程
  18. 社区社群运营,如何打造火爆营销的方法?
  19. SQL 的一点简单的面试题求助
  20. 利用自带命令 手动杀毒

热门文章

  1. vite:配置ip访问
  2. UVa 220 黑白棋 算法竞赛入门经典 习题4-3
  3. Apache ECharts 官网布局排版错乱的解决办法
  4. 2019最新中级Android面试题目,有着几篇就够了,Android开发五年
  5. java计算机毕业设计网上花店源码+系统+mysql数据库+LW文档+部署文件
  6. C语言:各种数据类型转换函数
  7. java-斗地主无界面有序版
  8. python列表用来有序存放一组_python 列表 元组(自兴人工智能)
  9. .Net Micro Framework 嵌入式开发
  10. 萌生to绽放 ▏2个月打造2亿销量的爆款理财产品