数据结构实训——停车场系统

2023-05-16

这个程序是利用栈和循环队列实现的,自己得先处理好逻辑关系就好了。由于题目没有要求,这个程序就没加重复判断,比如一辆车已经停在车位上或者便道上,再来一辆就判断不了了。关于栈,就是先进后出的思想,队列就是先进先出的思想。这个程序自己没用链栈和链队列做,因为感觉比较耗时。不过栈和队列的运用大多数都是用数组,先掌握好数组的表示再用链表写上手也很快。
**项目要求:**停车场是一个能放 n 辆车的狭长通道,只有一个大门,汽车按到达的先后次序停放。若车场满了,车要在门外的便道上等候,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由于通道窄,在它后面的车要先退出,待它走后依次进入。汽车离开时按停放时间收费。
基本功能要求:
1)建立三个数据结构分别是:停放队列,让路栈,等候队列
2)输入数据模拟管理过程,数据(入或出,车号)。

头文件: PLot.h

//
// Created by PC-Saw on 2018/12/17.
//

#ifndef  __PLOT_H__
#define __PLOT_H__

#define Price    1          // 单价可以自己定义n
#define MAX_STOP 10
#define MAX_PAVE 10

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <time.h>                           // 包含时间函数的头文件
#include <string.h>

// 汽车信息
typedef struct
{

    int timeIn;              // 进入停车场时间
    int timeOut;             // 离开停车场时间
    char plate[10];
    // 汽车牌照号码,定义一个字符指针类型
}Car;

// 停放栈(用于停放车辆)
typedef struct
{
    Car Stop[MAX_STOP];   // 用于停放车辆的栈
    int top;                  // 标记栈顶位置
}Stopping;

// 等候队列
typedef struct
{
    int count;                // 用来指示队中的数据个数
    Car Pave[MAX_PAVE];   // 等候停车的队列
    int front, rear;          // 标记队头和队尾位置
}Pavement;

// 让路栈
typedef struct
{
    Car Help[MAX_STOP];   // 用于让路的队列
    int top;                  // 标记站定位置
}Buffer;

Stopping s;
Pavement p;
Buffer   b;
Car      c;
char     C[10];

void stop_to_pave();       // 车停入便道
void car_come    ();       // 车停入停车位
void stop_to_buff();       // 车进入让路栈
void car_leave   ();       // 车离开
void welcome     ();       // 主界面函数
void Display     ();       // 显示车辆信息

#endif //__PLOT_H__


源文件 PLot.c

//
// Created by PC-Saw on 2018/12/17.
//

#include "PLot.h"

void stop_to_pave()                         // 车停入便道
{
    // 判断队满
    if (p.count > 0 && (p.front == (p.rear + 1) % MAX_PAVE))
    {
        printf ("便道已满,请下次再来\n");
    }
    else
    {
        strcpy(p.Pave[p.rear].plate, C);    // 车进入便道
        p.rear = (p.rear + 1) % MAX_PAVE;   // 队尾指示器加1
        p.count++;                          // 计数器加1
        printf ("牌照为%s的汽车停入便道上的%d的位置\n", C, p.rear);
    }
}

void car_come()                             // 车停入停车位
{
    printf ("请输入即将停车的车牌号:");     // 输入车牌号
    scanf ("%s", &C);
    if (s.top >= MAX_STOP - 1)              // 如果停车位已满,停入便道
    {
        stop_to_pave();                     // 停入便道
    }
    else
    {
        s.top++;                            // 停车位栈顶指针加1
        time_t t1;
        long int t = time(&t1);             // 记录进入停车场的时间
        char* t2;
        t2 = ctime (&t1);                   // 将当前时间转换为字符串
        s.Stop[s.top].timeIn = t;

        strcpy(s.Stop[s.top].plate, C);     // 将车牌号登记
        printf ("牌照为%s的汽车停入停车位的%d车位, 当前时间:%s\n", C, s.top + 1, t2);
    }

    return ;
}

void stop_to_buff()                         // 车进入让路栈
{
    // 停车位栈压入临时栈,为需要出栈的车辆让出道
    while (s.top >= 0)
    {
        if (0 == strcmp(s.Stop[s.top].plate, C))
        {
            break;
        }

        // 让出的车进入让路栈
        strcpy(b.Help[b.top++].plate, s.Stop[s.top].plate);
        printf ("牌照为%s的汽车暂时退出停车场\n", s.Stop[s.top--].plate);
    }

    // 如果停车位中的车都让了道,说明停车位中无车辆需要出行
    if (s.top < 0)
    {
        printf ("停车位上无此车消息\n");
    }
    else
    {
        printf ("牌照为%s的汽车从停车场开走\n", s.Stop[s.top].plate);
        time_t t1;
        long int t = time (&t1);
        c.timeOut = t;                        // 标记离开停车场的时间
        char* t2;
        t2 = ctime (&t1);                   // 获取当前时间
        printf ("离开时间%s\n需付%ld元\n", t2, Price * (c.timeOut - s.Stop[s.top].timeIn));
        s.top--;
    }

    // 将让路栈中的车辆信息压入停车位栈
    while (b.top > 0)
    {
        strcpy(s.Stop[++s.top].plate, b.Help[--b.top].plate);
        printf ("牌照为%s的汽车停回停车位%d车位\n", b.Help[b.top].plate, s.top);
    }

    // 从便道中 -> 停车位
    while (s.top < MAX_STOP-1)
    {
        if (0 == p.count)               // 判断队列是否为空
        {
            break;
        }   // 不为空,将便道中优先级高的车停入停车位
        else
        {
            strcpy(s.Stop[++s.top].plate, p.Pave[p.front].plate);
            printf ("牌照为%s的汽车从便道中进入停车位的%d车位\n", p.Pave[p.front].plate, s.top);
            p.front = (p.front + 1) % MAX_PAVE;
            p.count--;
        }
    }
}

void car_leave()                        // 车离开
{
    printf ("请输入即将离开的车牌号:\n");
    scanf ("%s", &C);
    if (s.top < 0)                      // 判断停车位是否有车辆信息
    {
        printf ("车位已空,无车辆信息!\n");
    }
    else
    {
        stop_to_buff();
    }
}

void Display()
{
    int i = s.top;
    if (-1 == i)
    {
        printf ("停车场为空\n");
    }
    time_t t1;
    long int t = time(&t1);             // 标记显示时的时间
    printf ("\t车牌号\t\t\t停放时间\t\t当前所需支付金额\n");
    while (i != -1)
    {
        printf ("\t%s\t\t%d秒\t\t\t%d元\n", s.Stop[i].plate, t - s.Stop[i].timeIn, Price * (t - s.Stop[i].timeIn) / 10);
        i--;
    }
}

void welcome()
{
    printf ("\t*******************目前停车场状况***********************\n");
    printf ("\t停车场共有%d个车位,当前停车场共有%d辆车,等候区共有%d辆车\n", MAX_STOP, s.top+1, (p.rear + MAX_PAVE - p.front)
                                                                       % MAX_PAVE);
    printf ("\t********************************************************\n");
    printf ("\t---------------Welcome to our Car Parking---------------\n");
    printf ("\t*                     1.Parking                        *\n");
    printf ("\t*                     2.leaving                        *\n");
    printf ("\t*                     3.situation                      *\n");
    printf ("\t*                     4.exit                           *\n");
    printf ("\t--------------------------------------------------------\n");
}



主函数 main.c

/**********************************************************
问题描述:停车场是一个能放 n 辆车的狭长通道,只有一个大门,
汽车按到达的先后次序停放。若车场满了,车要在门外的便道上等候
,一旦有车走,则便道上第一辆车进入。当停车场中的车离开时,由
于通道窄,在它后面的车要先退出,待它走后依次进入。汽车离开
时按停放时间收费。
基本功能要求:
    1)建立三个数据结构分别是:停放队列,让路栈,等候队列
    2)输入数据模拟管理过程,数据(入或出,车号)。
***********************************************************/
#include "PLot.h"


int main()
{
    // 初始化
    s.top   = -1;
    b.top   =  0;
    p.rear  =  0;
    p.count =  0;
    p.front =  0;


    while(1)
    {
        //system("clear");
        welcome();
        int i, cho;
        scanf ("%d", &i);

        if (1 == i) car_come();
        if (2 == i) car_leave();
        if (3 == i) Display();
        if (4 == i) break;

        printf ("返回请输入1\n");
        scanf ("%d", &cho);
        if (1 == cho)
        {
            continue;
        }
        else
        {
            printf ("您的输入有误,请重新输入\n");
            scanf ("%d", &cho);
            continue;
        }
    }
    return 0;
}
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构实训——停车场系统 的相关文章

  • 数据结构实验之排序五:归并求逆序数

    数据结构实验之排序五 xff1a 归并求逆序数 Time Limit 50 ms Memory Limit 65536 KiB Submit Statistic Discuss Problem Description 对于数列a1 a2 a
  • 数据结构实验之栈与队列五:下一较大值(一)

    数据结构实验之栈与队列五 xff1a 下一较大值 xff08 一 xff09 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Discuss Problem Descri
  • 数据结构上机实验之顺序查找

    数据结构上机实验之顺序查找 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Discuss Problem Description 在一个的序列里 xff0c 查找元素是
  • 数据结构实验之查找四:二分查找

    数据结构实验之查找四 xff1a 二分查找 Time Limit 30 ms Memory Limit 65536 KiB Submit Statistic Discuss Problem Description 在一个给定的无重复元素的递
  • Java各种加密方式集锦(AES,DES,RSA,DSA,MD5,SHA)

    一 什么是加密 加密 xff0c 是以某种特殊的算法改变原有的信息数据 xff0c 使得未授权的用户即使获得了已加密的信息 xff0c 但因不知解密的方法 xff0c 仍然无法了解信息的内容 在网络数据传输过程中会经常用到报文加密 xff0
  • 数据结构实验之数组二:稀疏矩阵

    数据结构实验之数组二 xff1a 稀疏矩阵 Time Limit 5 ms Memory Limit 1000 KiB Submit Statistic Discuss Problem Description 对于一个n n的稀疏矩阵M 1
  • 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五 xff1a 层序遍历 Statistic Problem Description 已知一个按先序输入的字符序列 xff0c 如abd eg cf 其中 表示空结点 请建立二叉树并求二叉树的层次遍历序列 Input 输
  • 数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四 xff1a 有序链表的归并 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 分别输入两个有序的整数序列 xf
  • 数据结构实验之二叉树五:层序遍历

    数据结构实验之二叉树五 xff1a 层序遍历 Time Limit 1000 ms Memory Limit 65536 KiB 其实层序遍历就是一个递归存储的过程 Submit Statistic Problem Description
  • 数据结构实验之二叉树二:遍历二叉树

    数据结构实验之二叉树二 xff1a 遍历二叉树 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 已知二叉树的一个按先序遍历输入的字
  • 数据结构实验之求二叉树后序遍历和层次遍历

    数据结构实验之求二叉树后序遍历和层次遍历 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 已知一棵二叉树的前序遍历和中序遍历 xf
  • 数据结构实验之二叉树一:树的同构

    数据结构实验之二叉树一 xff1a 树的同构 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 给定两棵树T1和T2 如果T1可以通
  • 数据结构实验之二叉树八:(中序后序)求二叉树的深度

    数据结构实验之二叉树八 xff1a xff08 中序后序 xff09 求二叉树的深度 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Descriptio
  • 求二叉树的先序遍历

    求二叉树的先序遍历 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 已知一棵二叉树的中序遍历和后序遍历 xff0c 求二叉树的先序
  • 数据结构上机测试4.1:二叉树的遍历与应用1

    数据结构上机测试4 1 二叉树的遍历与应用1 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 输入二叉树的先序遍历序列和中序遍历序
  • 2、STM32点亮LED灯

    STM32寄存器和库函数点灯 一 寄存器操作1 新建工程 xff0c 新建一个目录存放以后所有的工程stmproject xff0c 在这个目录下新建文件夹寄存器点灯 xff0c 文件名为LED 2 新建文件main c并双击source
  • 数据结构实验之二叉树七:叶子问题

    数据结构实验之二叉树七 xff1a 叶子问题 Time Limit 1000 ms Memory Limit 65536 KiB Submit Statistic Problem Description 已知一个按先序输入的字符序列 xff
  • 数据结构实验之二叉树的建立与遍历

    数据结构实验之二叉树的建立与遍历 二叉树的基本操作 xff0c 中序遍历 xff0c 后序遍历 xff0c 前序遍历 xff0c 只是根节点输出的位置不同 xff0c 叶子结点 xff0c 深度 xff0c 需要自己理解 xff0c 也非常
  • 哈夫曼树

    什么是哈夫曼树 xff1f 让我们先举一个例子 判定树 xff1a 在很多问题的处理过程中 xff0c 需要进行大量的条件判断 xff0c 这些判断结构的设计直接影响着程序的执行效率 例如 xff0c 编制一个程序 xff0c 将百分制转换
  • 哈夫曼树的概念及其实现

    1 基本概念 a 路径和路径长度 若在一棵树中存在着一个结点序列 k1 xff0c k2 xff0c xff0c kj xff0c 使得 ki是ki 43 1 的双亲 xff08 1 lt 61 i lt j xff09 xff0c 则称此

随机推荐

  • 二叉排序树详解

    二叉排序树的介绍 二叉排序树为一颗二叉树 xff0c 或者为空 xff0c 或者满足如下条件 xff1a 如果它的左子树不为空 xff0c 那么左子树上的所有结点的值均小于它的根结点的值如果它的右子树不为空 xff0c 那么右子树上的左右结
  • 数据结构实验之队列一:排队买饭

    数据结构实验之队列一 排队买饭 这个题猛的一看可能会有点麻烦 xff0c 但是其实一点也不 xff0c 只要把每个情况用if条件语句分清就可以了 有一点栈的思想 Problem Description 中午买饭的人特多 食堂真是太拥挤了 买
  • bLue的文件查找器

    bLue的文件查找器 用结构体数组按顺序存储 xff0c 每次查找的时候只是判断最后的文件格式ex Problem Description bLue 的电脑里存了各种各样的文件 xff0c 随着文件越来越多 xff0c 查找文件也成了一个麻
  • 图的基本存储的基本方式二

    小编在网上看到好多博主的文章这道题都没有用结构体做 xff0c 数据量太大 xff0c 结构体也是一个不错的选择 但是结构体有一个不好的地方 xff0c 不能直接搜索 xff0c 只能每次从头开始搜索 xff0c 有点浪费时间 Proble
  • 图的基本存储的基本方式一

    这个题主要的是这个 stdbool h 这个函数 xff0c 还有bool这个数组 Problem Description 解决图论问题 xff0c 首先就要思考用什么样的方式存储图 但是小鑫却怎么也弄不明白如何存图才能有利于解决问题 你能
  • 图的基本存储的基本方式四

    一直不知道这个题为什么用链表可以A xff0c 但是结构体就会WA xff0c 如果有童鞋们知道 xff0c 希望能留下想法 xff0c 一起学习 xff0c 一起进步 Problem Description 解决图论问题 xff0c 首先
  • C# 超详细的WebService创建、发布与调用(VS2019)

    1 编写接口 这里我选择的是 ASP NET Web应用程序 NET Framework 填写好项目名称 选择项目位置以及所使用的框架 xff0c 这里我用的是 NET Framework 4 框架 xff0c 然后点击创建 继续点击创建
  • 图的基本存储的基本方式三

    图的基本存储的基本方式三 Problem Description 解决图论问题 xff0c 首先就要思考用什么样的方式存储图 但是小鑫却怎么也弄不明白如何存图才能有利于解决问题 你能帮他解决这个问题么 xff1f Input 多组输入 xf
  • 数据结构实验之栈与队列九:行编辑器

    数据结构实验之栈与队列九 xff1a 行编辑器 Problem Description 一个简单的行编辑程序的功能是 xff1a 接受用户从终端输入的程序或数据 xff0c 并存入用户的数据区 由于用户在终端上进行输入时 xff0c 不能保
  • 顺序表应用2:多余元素删除之建表算法

    顺序表应用2 xff1a 多余元素删除之建表算法 Time Limit 3 ms Memory Limit 600 KiB Submit Statistic Problem Description 一个长度不超过10000数据的顺序表 xf
  • 数据结构实验之链表四:有序链表的归并

    数据结构实验之链表四 xff1a 有序链表的归并 Problem Description 分别输入两个有序的整数序列 xff08 分别包含M和N个数据 xff09 xff0c 建立两个有序的单链表 xff0c 将这两个有序单链表合并成为一个
  • 数据结构实验之链表五:单链表的拆分

    数据结构实验之链表五 xff1a 单链表的拆分 Problem Description 输入N个整数顺序建立一个单链表 xff0c 将该单链表拆分成两个子链表 xff0c 第一个子链表存放了所有的偶数 xff0c 第二个子链表存放了所有的奇
  • 数据结构——二叉树的基本操作(不包括还原)

    小编没有写主函数 xff0c 你们需要用什么函数只需要自己写一个主函数调用一下就可以了 include lt stdio h gt include lt string h gt include lt stdlib h gt typedef
  • 数据结构实验之图论四:迷宫探索

    数据结构实验之图论四 xff1a 迷宫探索 Time Limit 1000 ms Memory Limit 65536 KiB Problem Description 有一个地下迷宫 xff0c 它的通道都是直的 xff0c 而通道所有交叉
  • 数据结构实验之图论七:驴友计划

    数据结构实验之图论七 xff1a 驴友计划 Time Limit 1000MS Memory Limit 65536KB Problem Description 做为一个资深驴友 xff0c 小新有一张珍藏的自驾游线路图 xff0c 图上详
  • 数据结构实验之排序一:一趟快排

    H 数据结构实验之排序一 xff1a 一趟快排 Problem Description 给定N个长整型范围内的整数 xff0c 要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果 Input 连续输入多组数据 xff0c 每组输入
  • 数据结构实验之排序二:交换排序

    include lt stdio h gt int s x void qsort int a int l int h int i 61 l j 61 h k 61 a l while i gt 61 j return while i lt
  • vs当前不会命中断点,还未为文档加载符号

    一般网上的解决办法是 xff1a A 工具 选项 调试 常规中的 要求源文件和原始版本完全匹配 的勾去掉 B 工具 选项 调试 常规中的 启用仅我的代码 的勾去掉 这种是治标不治本 xff0c 有的时候也不起作用 当前不会命中断点 xff0
  • 数据结构实验之排序三:bucket sort

    数据结构实验之排序三 xff1a bucket sort 作为桶排序的典型例题 xff0c 我们完全可以按照桶排序的思想来做这个题 但是本题完全不需要用太多的空间去换时间 xff0c 只需要一个空间为101的一维数组就好 Problem D
  • 数据结构实训——停车场系统

    这个程序是利用栈和循环队列实现的 xff0c 自己得先处理好逻辑关系就好了 由于题目没有要求 xff0c 这个程序就没加重复判断 xff0c 比如一辆车已经停在车位上或者便道上 xff0c 再来一辆就判断不了了 关于栈 xff0c 就是先进