关于“停车场问题”所做的总结

数据结构第二次上机作业。“停车场问题”

 主要考察问题:

      栈:

        初始化栈

        判断栈满

        入栈

        出栈

      队列:

        初始化链队列

        判断链队列是否为空

        链队列入队

        链队列出队

总结细节问题:

   string函数只能在C++函数中使用;

   使用时要包含头文件#include<iostream>  

            #include<string>

   要使用栈或者队列,用之前必须初始化栈或者队列;

   在定义一个指针时,必须给他一个空间;

以下是源代码:

  1 #include <stdio.h>
  2 #include <malloc.h>
  3 #include <string>
  4 #include <iostream>
  5
  6 using namespace std;
  7
  8 #define MAX 2
  9 #define TRUE 1
 10 #define FALSE 0
 11
 12 /******************************************/
 13 /************** 结构体定义 ****************/
 14 /******************************************/
 15
 16 typedef struct          //车辆信息结构体
 17 {
 18     string number;         //车牌号码
 19     int time;            //到达时刻
 20 }Car;
 21
 22 typedef struct                   //顺序栈定义
 23 {
 24     Car elem[MAX];      //车辆信息结构体指针       //////////////
 25     int top;
 26 }SeqStack;
 27
 28 typedef struct Node        //链队列定义
 29 {
 30     Car data;             //车辆信息域
 31     struct Node *Next;       //指针域
 32 }LinkQueueNode;
 33
 34 typedef struct
 35 {
 36     LinkQueueNode *front;
 37     LinkQueueNode *rear;
 38 }LinkQueue;
 39
 40 SeqStack garage;//车库
 41 SeqStack quit;//暂退车道
 42 LinkQueue thendrive;//便车道
 43
 44 /**********************************************/
 45 /***************** 函数声明 *******************/
 46 /**********************************************/
 47
 48 void InitStack(SeqStack *s);//初始化顺序栈
 49 int IsEmpty(SeqStack *s);//判断栈满函数
 50 int Push(SeqStack *s,int e);//入栈
 51 int Pop(SeqStack *s,int *e);//出栈
 52
 53
 54 void InitStack(SeqStack *s)
 55 {
 56     s->top=-1;
 57 }
 58
 59 int IsEmpty(SeqStack *s)
 60 {
 61     if(s->top==-1)
 62         return TRUE;
 63     else
 64         return FALSE;
 65 }
 66
 67 int Push(SeqStack *s,string number,int time)
 68 {
 69     if(s->top>=2)
 70         return FALSE;
 71     else
 72     {
 73         s->top++;
 74         s->elem[s->top].number=number;
 75         s->elem[s->top].time=time;
 76     }
 77     return TRUE;
 78 }
 79
 80 int Pop(SeqStack *s,Car *e)
 81 {
 82     if(s->top==-1)
 83         return FALSE;
 84     else
 85     {
 86         e->number=s->elem[s->top].number;
 87         e->time=s->elem[s->top].time;
 88         s->top--;
 89         return TRUE;
 90     }
 91 }
 92
 93
 94 int InitQueue(LinkQueue *Q);
 95 int EmptyQueue(LinkQueue Q);
 96 int EnterQueue(LinkQueue *Q,string number,int time);
 97 int DeleteQueue(LinkQueue *Q,Car *x);
 98
 99 int InitQueue(LinkQueue *Q)        //链队列初始化
100 {
101     Q->front=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
102     if(Q->front!=NULL)
103     {
104         Q->rear=Q->front;
105         Q->front->Next=NULL;
106         return TRUE;
107     }
108     else
109         return FALSE;
110 }
111
112 int EmptyQueue(LinkQueue *Q)     //判断链队列是否为空
113 {
114     if(Q->front==Q->rear)
115         return TRUE;
116     else
117         return FALSE;
118 }
119
120 int EnterQueue(LinkQueue *Q,string number,int time)        //链队列入队操作
121 {
122     LinkQueueNode *NewNode;
123     NewNode=(LinkQueueNode *)malloc(sizeof(LinkQueueNode));
124     if(NewNode!=NULL)
125     {
126         NewNode->data.number=number;
127         NewNode->data.time=time;
128         NewNode->Next=NULL;
129         Q->rear->Next=NewNode;
130         Q->rear=NewNode;
131         return TRUE;
132     }
133     else
134         return FALSE;        //溢出
135 }
136
137 int DeleteQueue(LinkQueue *Q,Car *x)        //链队列出队操作
138 {
139     LinkQueueNode *p;
140     if(Q->front==Q->rear)
141         return FALSE;
142     p=Q->front->Next;
143     Q->front->Next=p->Next;
144     if(Q->rear==p)
145         Q->rear=Q->front;
146     (*x)=p->data;
147     free(p);
148     return TRUE;
149 }
150
151 /**********************************************/
152 void Come(string Number,int Time);//车辆到达函数
153 void Leave(string Number,int Time);//车辆离开函数
154
155 void Come(string Number,int ComeTime)
156 {
157     if(garage.top<2)
158     {
159         Push(&garage,Number,ComeTime);
160     }
161     else
162     {
163         EnterQueue(&thendrive,Number,ComeTime);
164     }
165     cout<<Number<<"当前停放在车库"<<garage.top+1<<endl;
166 }
167
168 void Leave(string Number,int LeaveTime)
169 {
170     Car *e=new(Car);
171     int cost;//停车费用
172     while((!IsEmpty(&garage))&&((garage.elem[garage.top].number)!=Number))//当"车库"栈不空,并且栈顶车辆不是要离开的车
173     {
174         Pop(&garage,e);//将"车库"栈的栈顶车辆退出
175         Push(&quit,e->number,e->time);//让退出的车辆进入"暂时退车道"栈
176     }
177     Pop(&garage,e);
178     cost=(LeaveTime-e->time)*5;
179     //将"暂时退车道"栈中的车辆倒回"车库"栈
180     while(!IsEmpty(&quit))
181     {
182         Pop(&quit,e);
183         Push(&garage,e->number,e->time);
184     }
185     if(!EmptyQueue(&thendrive))
186     {
187         DeleteQueue(&thendrive,e);//队头车辆出队
188         e->number=LeaveTime;
189         Push(&garage,e->number,e->time);
190     }
191     cout<<Number<<"停放时间为"<<LeaveTime-e->time<<"停车费用为"<<cost<<"元"<<endl;
192 }
193
194 void main ()
195 {
196     int A;
197     string Number;
198     int Time;
199     InitStack(&garage);
200     InitStack(&quit);
201     InitQueue(&thendrive);
202     printf("请输入车辆信息(到达/离开,牌照号码,当前时刻):");
203     cin>>A;
204     while(A!=-1)
205     {
206
207         cin>>Number>>Time;
208         if(A==1)
209         {
210             Come(Number,Time);
211         }
212         else
213             Leave(Number,Time);
214         cin>>A;
215     }
216
217
218 }

        

时间: 2024-08-02 15:13:46

关于“停车场问题”所做的总结的相关文章

停车场地坪做环氧还是超耐磨密封固化剂好

现在市场上很多的停车场地坪都采用最传统的环氧地坪而很少采用超耐磨密封固化剂地坪,环氧地坪在停车场的使用中会出现各种问题,一直得不到良好的改善, 比如:脱皮.裂缝.空鼓起泡等,这些问题严重影响停车场地面环境及因此而垒高的地面维护成本.使得越来越多的客户在做停车场地坪时对环氧的选择越来越慎重. 但是地坪在使用中常因各种原因导致脱层.脱皮.鼓泡.裂缝.露底等问题的出现,特别是对于停车场使用环氧地坪的问题十分之多, 这些问题不仅会影响停车场的环境,也影响着环氧地坪的市场发展,使得越来越多的客户不再选择做

如何做一名合格的产品经理?

社会的竞争其实是人的竞争,人的思维和能力很大程度上决定了公司的服务和高度. 作为一个中小企业的产品经理应该具备哪些能力呢? 1)产品经理最重要的就是独立思考的能力. 有句话说兼听则明,偏听则暗,所以要走出去多观察,多调研,多交流.我是觉得产品经理不能光听,要自己想,而且能有讲道理.摆事实说服别人的能力(不是靠耍嘴皮子抖机灵说服别人).注意不能迷信权威,而是立足当下,走适合自己的路线. 2)锻炼对自己产品的理解 初学者可能刚入门就会被琳琅满目的原型工具和一堆堆的案例绑架,满脑子想的是别人花哨的功能

数据结构之停车场

程序设计思想: 1.首先定义一个数据类型包含车牌号和进去的时间,这两个车的信息. 2.定义栈一用来模仿停车场的入栈函数(其中包含入队函数,栈满则入队),栈二用来储存栈一出来元素的入栈函数. 3.两个栈的有共同的出栈函数. 4.定义队列(模仿便道)的入队与出队函数 5.在主函数中调用时间函数用来记录时间 6.定义两个栈和一个队列,同时初始化. 7.提示用户输入车牌号,利用while不停的输入(输入的同时记下输入时间),直到输入end为止. 8.在while循环中给用户提供进车,出车,结束的三个选择

SDOTOJ2088 refresh的停车场(栈和队列)

refresh的停车场 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Description refresh近期发了一笔横財,开了一家停车场.因为土地有限.停车场内停车数量有限,可是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,并且停车场的结构要求仅仅出去的车辆必须是停车场中最后进去的车辆. 现告诉你停车场容

SDOTOJ2088 refresh的停车场

refresh的停车场 Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Description refresh最近发了一笔横财,开了一家停车场.由于土地有限,停车场内停车数量有限,但是要求进停车场的车辆过多.当停车场满时,要进入的车辆会进入便道等待,最先进入便道的车辆会优先 进入停车场,而且停车场的结构要求只出去的车辆必须是停车场中最后进去的车辆.现告诉你停车场容量N

室内地图商场停车场室内定位导航拓展方案应用

近几年来.室内位置信息在人们的日常生活中扮演着越来越关键的数据,定位服务市场发展迅速.定位服务需求量迅速增长.比如,医疗行业中重症病人跟踪监护,产房婴儿防盗,贵重医疗设备监控;商场人员定位,顾客消费习惯收集;监狱重点犯人跟踪;展馆.机场导航,实时位置查询服务等.基于互联网的应用要想放到线下.提高线下购物和客户体验度,室内地图行业必将是2015互联网行业必争之地. 上海为卓信息科技自主研发的(SiteMap IMS)室内GIS平台底层架构基于传统GIS平台,依据室内地图和室内定位的特点,在坐标体系

[GRYZ2015]阿Q的停车场

题目描述 刚拿到驾照的KJ 总喜欢开着车到处兜风,玩完了再把车停到阿Q的停车场里,虽然她对自己停车的水平很有信心,但她还是不放心其他人的停车水平,尤其是Kelukin.于是,她每次都把自己的爱车停在距离其它车最远的一个车位.KJ 觉得自己这样的策略非常科学,于是她开始想:在一个停车场中有一排车位,从左到右编号为 1 到 n,初始时全部是空的.有若干汽车,进出停车场共 m 次.对于每辆进入停车场的汽车,会选择与其它车距离最小值最大的一个车位,若有多个符合条件,选择最左边一个.KJ 想着想着就睡着了

[CareerCup] 8.4 Parking Lot 停车场

8.4 Design a parking lot using object-oriented principles. 这道题让我们实现一个停车位的数据结构,由于题目没给任何多余的信息,所以自由度很大,比如能停放什么种类的车,或是否是多层的等等.根据书中描述,这里我们做如下假设: 1. 停车场有多层,每层有多行停车位 2. 停车场可以停摩托车,小轿车和公交车 3. 停车场有摩托车位,紧凑型车位,和大型车位 4. 摩托车可以停在任何位置 5. 小轿车可以停在紧凑型车位和大型车位 6. 公交车只能停在

[生活]闺女做的第一个手术-小儿泪道手术记录

11月份更新很不及时,是因为去北京儿童医院给女儿做了一个小手术-泪道手术,手术很成功,现在娃的眼睛已经好了,泪道手术最好在娃10个月以前做. 大概在娃3个月的时候,娃两只眼睛都有分泌物.当时也咨询了已经为人父母的同学同事,得到答复基本都是泪道不通,然后就每天给娃做按摩,大概到娃9月份的时候,右眼已经好了,左眼还是有分泌物,就决定带娃去儿童医院看看,当时挂的特需号,其实第一次没必要挂特需,以下按照时间顺序来记录.供有同样需求的人参考. 2017-11-12挂的特需号(300元)医生是王建华医生,知