首页 范文大全 古典文学 职场知识 中国文学 公文书信 外国名著 寓言童话 百家讲坛 散文/诗歌 美文欣赏 礼仪知识 民俗风情
  • 范文大全
  • 古典文学
  • 职场知识
  • 中国文学
  • 公文书信
  • 外国名著
  • 寓言童话
  • 百家讲坛
  • 散文/诗歌
  • 美文欣赏
  • 礼仪知识
  • 民俗风情
  • 谜语大全
  • 名言警句
  • 数据结构课程设计实验报告-模拟停车场管理问题

    时间:2020-10-09 11:54:45 来源:蒲公英阅读网 本文已影响 蒲公英阅读网手机站

    相关热词搜索:数据结构 停车场 课程设计

     数据结构课程设计

     题目 :模拟停车场管理问题

      2020

     年 6 月 25 日·北京

     信息工程学院

      信息技术教学与实验中心

      1 二、

     目录 目录 二、

     目录 ............................................................... 1

     三、

     设计任务书 .................................................... 2

     四、

     小组成员及分工 ............................................. 3

     五、

     报告正文 ....................................................... 3

     1. 设计题目 ............................................................................... 3 2. 设计目的 ............................................................................... 3 3. 算法思想分析 ....................................................................... 3 4. 算法描述与实现 ................................................................... 4 5. 程序运行结果 ..................................................................... 10 6. 结论 ..................................................................................... 11

      2 三、

     设计任务书 课程设计名称:数据结构课程设计 课程设计编号:CST206 课程设计学分:2

     课程设计周(时)数:2 周 课程设计授课单位:信息工程学院计算机系 指导方式:集体辅导与个别辅导相结合 课程设计适用专业:计算机科学与技术 课程设计教材及主要参考资料:

     《数据结构课程设计》,滕国文编著,清华大学出版社,2010 年; 《数据结构课程设计》,陈越钦铭雁编著,浙江大学出版社,2009 年 《数据结构课程设计案例教程》, 马巧梅等编著, 人民邮电出版社,2012 年

     题目 1:模拟停车场管理问题 问题描述:

     设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到来的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

     基本要求:

     试为停车场编制按上述要求进行管理的模拟程序。在这里假设汽车不能从便道上开走。试设计一个停车场管理程序。

     实现提示:

     以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,例如:("A",1,5)表示一号牌照车在 5 这个时刻到达,而("D",5,20)表示 5 号牌照车在 20 这个时刻离去,整个程序可以在输入信息为("E",0,0)时结束。对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车离去;则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构实现,队列以链表实现。需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,

      3 四、

     小组成员及分工 查阅资料,算法分析 算法分析,调试运行 撰写设计报告,完善程序 算法描述与实现 五、

     报告正文 1. 设计题目

     停车场管理问题

     2. 设计目的 设停车场只有一个可停放几辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场按车辆到来的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该辆车开出大门后,为它让路的车辆再按原次序进入车场。每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用 3. 算法思想分析

     程序需要栈和队列这两个抽象数据类型。以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入数据的序列进行模拟管理。栈以顺序结构实现,队列以链表结构实现。同时另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车。

      4 4. 算法描述与实现 程序中设置好停车场(栈)的最大容量(3 个)和每小时的停车费用(1.5 元/小时)。程序执行,先确定车辆的到达与离去(A 到达 D 离去)选择到达则输入并记录车辆的车牌号与到达时间进入停车场,若停车场已满,车辆进入便道进行排队。期间停车场里的车选择离去,则通过离去时间减到达时间计算停车费用。同时便道上的第一辆车自动进入停车场,输入并记录相应的进入时间。最后输入 E 可退出程序。

      1) 数据结构类型定义 1. 栈元素结构体定义 typedef struct{

      int num;//定义号码

      int arr;//定义到达时间 }zanInode; 2. 模拟便道队列

     zanInode accessroad[100]; 3. 车辆到达

     printf("有车辆进入停车场(A)\n 有车辆出停车场(D)\n 程序停止(E)\n");

      while (scanf("%c",&order)) {

      //如果输入 E 程序停止

      if (order=="E") {

      break;

      }

      //如果输入 A 程序执行进入停车场

      switch (order) {

      case "A":

      printf("请输入车牌号及车辆到达时间(按小时):\n");

      scanf("%d %d",&carNumber,&arriveTime);

      car.num=carNumber;

      car.arr=arriveTime;

      //当有车想要进入停车场时,首先试图将该车进入停车场

     result=push(park, &parktop, car);

      //如果返回值为 -1 ,证明停车场已满,需要停在便道中

      if (result==-1) {//停在便道上

      accessroad[tail]=car;

      printf("该车在便道的第 %d 的位置上\n",tail+1-head);

      tail++;

      }

      break; 4. 车辆离开

     case "D":

      5

      printf("出停车场的车的车牌号以及离开的时间:\n");

      scanf("%d %d",&carNumber,&leaveTime);

      //当有车需要出停车场时,调用出栈函数

      car=pop(park, &parktop, carNumber, location, &locationtop);

      //如果返回的车的车牌号为-1 ,表明在停车场中没有查找到要查找的车

      if (car.num!=-1) {

      //停留时间,等于进停车场的时间-

      time=leaveTime-car.arr;

      printf("该车停留的时间为:%d 小时,应缴费用为:%f 元\n",time,time*1.5);

      //一旦有车离开停车场,则在便道中先等待的车就可以进入,进入时需设定车进入的时间

      if (head!=tail) {

      car=accessroad[head];

      printf("在便道上第 1 的位置上,车牌号为:%d 的车进停车场的时间为:\n",car.num);

      scanf("%d",&car.arr);

      park[parktop]=car;

      head++;

      parktop++;

      }else{

      printf("便道上没有等待车辆,停车场不满\n");

      }

      }

      break;

      default:

      break;

      } 2) 主要算法的流程图

      6

      3) 程序代码 #include "stdafx.h" #include <stdio.h> #define MAX 3//模拟停车场最多可停的车辆数 //车的必要信息的结构体 typedef struct{

      int num;//定义号码

      int arr;//定义到达时间 }zanInode; //进入停车场的处理函数 int push(zanInode * park,int *parktop,zanInode car){

      7

      //如果停车场已满,该车需进入便道等待(先返回 -1 ,在主程序中处理)

      if ((*parktop)>=MAX) {

      printf("停车场已停满!需停到便道上.\n");

      return -1;

      }else{//否则将该车入栈,同时进行输出

      park[(*parktop)]=car;

      printf("该车在停车场的第 %d 的位置上\n",(*parktop)+1);

      (*parktop)++;

      return 1;

      } } //车从停车场中退出的处理函数 zanInode pop(zanInode *park,int *parktop,int carnumber,zanInode * location,int *locationtop){

      int i;

      //由于函数本身的返回值需要返回一辆车,所以需要先初始化一个

      zanInode thecar;

      thecar.num=-1;

      thecar.arr=-1;

      //在停车场中找到要出去的车

      for (i=-1; i<(*parktop); i++) {

      if (park[i].num==carnumber) {

      break;

      }

      }

      //如果遍历至最后一辆车,还没有找到,证明停车场中没有这辆车

      if (i==(*parktop)) {

      printf("停车场中没有该车\n");

      }else{//就将该车移出停车场

      //首先将在该车后进入停车场的车全部挪至另一个栈中

      while ((*parktop)>i+1) {

      (*parktop)--;

      location[*locationtop]=park[*parktop];

      (*locationtop)++;

      }

      //通过以上的循环,可以上该车后的左右车辆全部移开,但是由于该车也要出栈,所以栈顶指针需要下移一个位置,当车进栈时,就直接覆盖掉了

      (*parktop)--;

      thecar=park[*parktop];

      //该车出栈后,还要将之前出栈的所有车,在全部进栈

      while ((*locationtop)>0) {

      (*locationtop)--;

      park[*parktop]=location[*locationtop];

      (*parktop)++;

      8

      }

      }

      return thecar; } int main(int argc, const char * argv[]) {

      //停车场的栈

      zanInode park[MAX];

      int parktop=0;//栈顶指针

      //辅助停车场进行挪车的栈

      zanInode location[MAX];

      int locationtop=0;//栈顶指针

      //模拟便道的队列

      zanInode accessroad[100];

      int head,tail;//队头和队尾指针

      head=tail=0;//初始值

      char order;//进出停车场的输入命令

      int carNumber;//车牌号

      int arriveTime;//到停车场的时间

      int leaveTime;//离开停车场的时间

      int time;//车在停车场中逗留的时间

      int result;

      zanInode car;

      printf("停车场系统\n");

      printf("有车辆进入停车场(A)\n 有车辆出停车场(D)\n 程序停止(E)\n");

      while (scanf("%c",&order)) {

      //如果输入 E 程序停止

      if (order=="E") {

      break;

      }

      //如果输入 A 程序执行进入停车场

      switch (order) {

      case "A":

      printf("请输入车牌号及车辆到达时间(按小时):\n");

      scanf("%d %d",&carNumber,&arriveTime);

      car.num=carNumber;

      car.arr=arriveTime;

      //当有车想要进入停车场时,首先试图将该车进入停车场

     result=push(park, &parktop, car);

      //如果返回值为 -1 ,证明停车场已满,需要停在便道中

      if (result==-1) {//停在便道上

      accessroad[tail]=car;

      9

      printf("该车在便道的第 %d 的位置上\n",tail+1-head);

      tail++;

      }

      break;

      //如果输入 D 程序执行出停车场

      case "D":

      printf("出停车场的车的车牌号以及离开的时间:\n");

      scanf("%d %d",&carNumber,&leaveTime);

      //当有车需要出停车场时,调用出栈函数

      car=pop(park, &parktop, carNumber, location, &locationtop);

      //如果返回的车的车牌号为-1 ,表明在停车场中没有查找到要查找的车

      if (car.num!=-1) {

      //停留时间,等于进停车场的时间-

      time=leaveTime-car.arr;

      printf("该车停留的时间为:%d 小时,应缴费用为:%f 元\n",time,time*1.5);

      //设置停车费为 1.5 元一小时

      //一旦有车离开停车场,则在便道中先等待的车就可以进入,进入时需设定车进入的时间

      if (head!=tail) {

      car=accessroad[head];

      printf("在便道上第 1 的位置上,车牌号为:%d 的车进停车场的时间为:\n",car.num);

      scanf("%d",&car.arr);

      park[parktop]=car;

      head++;

      parktop++;

      }else{

      printf("便道上没有等待车辆,停车场不满\n");

      }

      }

      break;

      default:

      break;

      }

      printf("\n 有车辆进入停车场(A)\n 有车辆出停车场(D)\n 程序停止(E)\n");

      scanf("%*[^\n]"); scanf("%*c");//清空缓冲区

      }

      return 0; }

      10 5. 程序运行结果

      11

      6. 结论

     首先此次模拟停车场实验,主要依靠栈和队列的相关操作,因此通过此次实验对相关的操作也有了深入的认识例如:入栈、出栈、判断是否栈满等。其次认识到流程设计的重要性,提前画出流程图,根据流程图判断需要的函数,尽量把一个大问题化为几个不同的小问题,这样更利于我们去编写程序。例如在车辆进入停车场时先判断栈是否已满,如果已满编写判断栈满的子程序,然后编写车辆进入便车道的子程序,若栈未满,这个时候编写入栈的子程序。最后也有查阅相关的文献资料,使我们将理论和实际操作结合起来,完成了此次实验。

     希望在以后的实验中,我们可以做程序设计的时候更加有耐心,不急躁,有问题一点一点的解决。写程序的过程中也要考虑的更严谨周到。

    • 范文大全
    • 职场知识
    • 精美散文
    • 名著
    • 讲坛
    • 诗歌
    • 礼仪知识