m0_64018569 2022-07-17 20:06 采纳率: 78.6%
浏览 63
已结题

这个代码的流程图怎么做


#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义车辆信息
typedef struct _carinfo
{
    char id[10]; //车牌号
    int hourCome; //到达时间,时,为了简便,这里只处理同一天内的时间
    int minCome; //到达时间,分钟
    int hourLeave; //离开时间,时
    int minLeave; //离开时间,分钟
}Carinfo;
 
/*****************************************************定义顺序栈,栈,先进后出xqls*********************************/
 
typedef struct _Stack
{
    Carinfo* pcar;
    int maxlen;
    int front;
}Stack;
 
//初始化栈
void Stackinit(Stack* s,int size)
{
    s->maxlen = size;
    s->pcar = (Carinfo*)malloc(size * sizeof(Carinfo));
    s->front = 0;
}
//入栈
int Stackpush(Stack* s, Carinfo c)
{
    if (s->front >= s->maxlen)
        return 0;
    else
    {
        s->pcar[s->front] = c;
        s->front++;
        return s->front;
    }
}
//出栈
int Stackpop(Stack* s, Carinfo* e)
{
    if (s->front <= 0)
        return 0;
    else
    {
        s->front--;
        *e = s->pcar[s->front];
        return 1;
    }
}
 
//判断是否为空
int Stackempty(Stack s)
{
    if (s.front <= 0)
        return 1;
    else
        return 0;
}
 
 
//判断栈是否满
int StackFull(Stack s)
{
    if (s.front == s.maxlen)
        return 1;
    else
        return 0;
}
 
/*****************************************************定义链式队列,先进先出xqls*********************************/
typedef struct _node
{
    Carinfo car;
    struct _node* next;
}QueueNode,*Queue;
//初始化队列
Queue Queueinit()
{
    Queue head = (Queue)malloc(sizeof(QueueNode));
    head->next = 0;
    return head;
}
//入队
int Queuepush(Queue q, Carinfo c)
{
    Queue p = q;
    QueueNode* t = (QueueNode*)malloc(sizeof(QueueNode));
    int pos = 1;
 
    t->car = c;
    t->next = 0;
    while (p->next)
    {
        p = p->next;
        pos++;
    }
        
    p->next = t;
    return pos;
}
//出队
int Queuepop(Queue q, Carinfo* e)
{
    Queue p = q->next;
    if (q->next == 0)
        return 0;
    else
    {
        *e = p->car;
        q->next = p->next;
        free(p);
        p = 0;
        return 1;
    }
}
//判断是否为空
int Queueempty(Queue q)
{
    if (q->next == 0)
        return 1;
    else
        return 0;
}
 
 
//计算停车费xqls
double pay(int h1, int m1, int h2, int m2,double p)
{
    int s1 = h1 * 60 + m1;
    int s2 = h2 * 60 + m2;
    double out = (s2 - s1) / 60.0 * p;
    return out;
}
 
 
 
int main()
{
    Stack parking; //停车场栈 xqls
    Stack tmp;   //临时栈 xqls
    Queue waiting; //等候队列 xqls
 
    int n; //停车场最多停放的车辆数目
    int op; //操作
    int h, m;
    int pos = 0;
    char id[10] = { 0 };
 
    double pay_perhour = 2; //每小时的停车费
 
    printf("请输入停车场最大的停车数量n:");
    scanf("%d", &n);
 
    //初始化
    Stackinit(&parking,n);
    Stackinit(&tmp,n);
    waiting = Queueinit();
 
 
 
    while (1)
    {
        printf("请输入操作:1.到达;2.离开;3.退出程序 : ");
        scanf("%d", &op);
        if (op == 2 && Stackempty(parking))
        {
            printf("停车场目前暂无车辆\n");
            continue;
        }
        printf("请输入车牌号:");
        scanf("%s", id);
        //到达
        if (op == 1)
        {
            printf("请输入到达时间(HH:MM):");
            scanf("%d:%d", &h, &m);
            Carinfo cc;
            strcpy(cc.id, id);
            cc.hourCome = h;
            cc.minCome = m;
            if (StackFull(parking))
            {
                pos = Queuepush(waiting, cc);
                printf("便道位置:%d\n", pos);
            }
            else
            {
                pos = Stackpush(&parking, cc);
                printf("停车场位置:%d\n", pos);
            }
                
        }
        else if (op == 2)
        {
            while (1)
            {
                //该车之后的先出栈,入临时栈
                Carinfo cc;
                Stackpop(&parking, &cc);
                if (strcmp(cc.id, id) == 0)
                {
                    printf("请输入离开时间(HH:MM):");
                    scanf("%d:%d", &cc.hourLeave, &cc.minLeave);
                    printf("缴费:%.1f\n",pay(cc.hourCome, cc.minCome, cc.hourLeave, cc.minLeave, pay_perhour));
                    break;
                }
                else
                {
                    Stackpush(&tmp, cc);
                    printf("    %s入临时栈\n", cc.id);
                }
            }
            //临时栈车辆返回
            while (!Stackempty(tmp))
            {
                Carinfo cc;
                Stackpop(&tmp, &cc);
                Stackpush(&parking, cc);
                printf("    %s返回停车场\n", cc.id);
            }
            
            //等待队列入栈
            if (!Queueempty(waiting))
            {
                Carinfo cc;
                Queuepop(waiting, &cc);
                pos = Stackpush(&parking, cc);
                printf("%s驶入停车场,位置:%d\n", cc.id,pos);
            }
 
 
        }
        else if (op == 3)
            break;
    }
    return 0;
 
}
 
  • 写回答

2条回答 默认 最新

  • 关注

    这不是我给你写的代码吗,流程图如下:

    img

    没啥问题的话,请帮忙采纳一下,谢谢。给你代码的那个问题也请帮忙采纳一下,谢谢。

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月25日
  • 已采纳回答 7月17日
  • 创建了问题 7月17日

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号