题目描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>#define TRUE 1
#define FALSE 0
#define N 2typedef struct
{char num[20];//车牌照号码int arriveh,arrivem,arrives;//到达的时分秒int leaveh,leavem,leaves;//离开的时分秒
}CAR;typedef struct
{CAR car[N];int top;
}PARKING_STACK;typedef struct
{CAR car[N];int front;int rear;
}SIDEWALK_QUEUE;void InitStack(PARKING_STACK *stack)
{stack->top=-1;
}void InitQueue(SIDEWALK_QUEUE *queue)
{queue->front=queue->rear=0;
}int PushStack(PARKING_STACK *stack,CAR car)
{if(stack->top==N)return FALSE;stack->car[++stack->top]=car;return TRUE;
}CAR PopStack(PARKING_STACK *stack)
{if(stack->top==-1){printf("栈空\n");return;}return stack->car[stack->top--];
}int EnterQueue(SIDEWALK_QUEUE *queue,CAR car)
{if((queue->rear+1)%N==queue->front)return FALSE;queue->car[queue->rear]=car;queue->rear=(queue->rear+1)%N;return TRUE;
}CAR DeleteQueue(SIDEWALK_QUEUE *queue)
{CAR car;if(queue->front==queue->rear){printf("队列空\n");return;}car=queue->car[queue->front];queue->front=(queue->front+1)%N;return car;
}void PrintCar(PARKING_STACK *stack,SIDEWALK_QUEUE *queue)
{int i;printf("PARKING:\n");for(i=0;i<=stack->top;i++){printf("%d\t%s\n",i+1,stack->car[i].num);}printf("SIDEWALK:\n");for(i=queue->front;i!=queue->rear;i=(i+1)%N){printf("%d\t%s\n",i+1,queue->car[i].num);}
}void ExitParking(PARKING_STACK *stack,PARKING_STACK *side_stack,CAR car)
{CAR leaveCar;int minute;for(;strcmp(stack->car[stack->top].num,car.num)!=0;){PushStack(side_stack,PopStack(stack));}leaveCar=PopStack(stack);minute=(car.leaveh*60+car.leavem)-(leaveCar.arriveh*60+leaveCar.arrivem);printf("%s已离开,共停留%d分钟\n",car.num,minute);for(;side_stack->top!=-1;){PushStack(stack,PopStack(side_stack));}
}
int main()
{int ch1,ch2;PARKING_STACK stack,side_stack;SIDEWALK_QUEUE queue;InitStack(&stack);InitStack(&side_stack);InitQueue(&queue);while(1){CAR car;printf("请输入选项:\n");printf("1:查看停车场和便道状态\n");printf("2:管理汽车\n");printf("3:exit\n");printf("top:%d\n",stack.top);scanf("%d",&ch1);switch(ch1){       case 1:PrintCar(&stack,&queue);break;case 2:printf("请输入到达还是离去(1或2),车牌号,以及对应时间(时 分 秒)\n");scanf("%d",&ch2);if(ch2==1)//到达{scanf("%s %d %d %d",car.num,&car.arriveh,&car.arrivem,&car.arrives);if(stack.top==N-1)//入队列{if(EnterQueue(&queue,car)==TRUE)printf("%s成功入队!\n",car.num);elseprintf("%s未能入队!\n",car.num);}else//能入停车场{if(PushStack(&stack,car)==TRUE)printf("%s进入停车场!\n",car.num);elseprintf("队满,%s未能进停车场!\n",car.num);}}if(ch2==2){     int flag=0;int i;scanf("%s %d %d %d",car.num,&car.leaveh,&car.leavem,&car.leaves);for(i=0;i<=stack.top;i++){if(strcmp(car.num,stack.car[i].num)==0){flag=1;break;}}if(!flag){printf("查无此车!\n");break;}ExitParking(&stack,&side_stack,car);if(queue.front!=queue.rear){  CAR car=DeleteQueue(&queue);PushStack(&stack,car);printf("%s已进入停车场!\n",car.num);}                }break;case 3:exit(0);default:printf("input again!\n");}}return 0;
}

(c)(数据结构)栈与队列的应用--停车场管理相关推荐

  1. 数据结构栈和队列(以停车场管理题目为例)

    /*实验 栈和队列实验 实验目的 熟悉栈和队列的基本特性,掌握栈和队列基本运算的实现过程. 时间要求:4+4学时 问题描述: 设停车场内只有一个可停放 n 辆汽车的狭长通道,且只有一个 大门可供汽车进 ...

  2. 数据结构栈和队列_使您的列表更上一层楼:链接列表和队列数据结构

    数据结构栈和队列 When you want to store several elements somewhere in a program, the go-to data type is an a ...

  3. 数据结构栈与队列的应用之汽车轮渡问题——自己的一些理解

    本题摘自王道数据结构栈与队列的应用的课后题,题目如下: 某汽车轮渡口,过江渡船每次能载10辆汽车过江.过江车辆分为客车类和货车类,上渡船有如下规定:同类车先到先上船,客车先于货车上船,且每上4辆客车, ...

  4. 数据结构——栈与队列相关题目

    数据结构--栈与队列相关题目 232. 用栈实现队列 思路 225. 用队列实现栈 1.两个队列实现栈 2.一个队列实现栈 20. 有效的括号 思路 1047. 删除字符串中的所有相邻重复项 思路 1 ...

  5. java语言使用栈和队列实现简易停车场管理系统

    [问题描述]:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出.车辆按到达停车场时间的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面).如果停车场已放满n ...

  6. 第十章 基本数据结构——栈和队列

    摘要 本章介绍了几种基本的数据结构,包括栈.队列.链表以及有根树,讨论了使用指针的简单数据结构来表示动态集合.本章的内容对于学过数据结构的人来说,没有什么难处,简单的总结一下. 1.栈和队列 栈和队列 ...

  7. 大话数据结构-栈与队列

    文章知识点来至于大话数据结构里边章节知识, 这篇主要介绍栈与队列在计算机中存储形式, 以及在某些算法领域中对栈和队列的相关应用.章节最后介绍了著名的逆波兰表达式, 以及通过算法来实现该表达式的运算过程 ...

  8. 数据结构——栈与队列操作(用栈模拟队列)

    [栈与队列操作] 问题描述:假设有两个长度相同的栈 S1,S2,已知以下入栈.出栈.判栈满和判栈空操作: void Push(S,x); Elemtype Pop(S); bool StackFull ...

  9. 【数据结构-栈和队列】详解栈和队列(代码+STL+原理)

    一.栈的应用 栈是一种先进后出(FILO)的数据结构 1.1 栈的操作实现 清空(clear): // 栈的清空操作就是把栈顶top置为-1 void clear(){top=-1; } // 清空栈 ...

最新文章

  1. 270亿参数、刷榜CLUE,阿里达摩院发布最大中文预训练语言模型PLUG(开放测试)...
  2. 基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)及代码
  3. 千万别让爸妈帮你P图......
  4. 发布Akka Toolkit 2.3
  5. 405 Method Not Allowed
  6. 树莓派摄像头基础配置及测试
  7. [机器学习-实践]支持向量机(SVM)从例子代码中学习
  8. SpringCloud工作笔记058---springBoot项目maven命令打包部署
  9. 为何python不好找工作-为什么说Python不好找工作?原因在这里!
  10. RobotStudio传送带设计
  11. JFrame真正全屏
  12. 基于Ionic3和极光推送实现推送功能
  13. 产品经理学习一(定义、分类、成员配合、调研、3D文档、竞品分析、SWOT分析)
  14. nfc卡模式与标准模式_NFC是什么?有什么优势和劣势?
  15. VSPD V9版(Virtual Serial Port Driver 9.0)
  16. centos-sftp
  17. python或c++编写一个文件传输工具
  18. Jane Austen谈Python:文学与技术的交集
  19. Unity制作地震防空知识视频讲解程序
  20. BGP双线机房优点116.211.147.x

热门文章

  1. matlab画图坐标轴不用科学计数法
  2. Excel-函数-拆分和组合函数
  3. python BytesIO转bytes
  4. 2023年计算机视觉与模式识别国际会议(CCVPR 2023)
  5. Presto学习(1)-基本原理学习
  6. iOS视频广告(二) (二次封装, Demo)
  7. 分享笔记1 之《白帽子讲web安全》
  8. 写给金融危机下年轻人的16条忠告
  9. 深入剖析实战Spring
  10. 三菱FX3U——ST编程中的数组