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


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

     主要考察问题:

          栈:

            初始化栈

            判断栈满

            入栈

            出栈

          队列:

            初始化链队列

            判断链队列是否为空

            链队列入队

            链队列出队

    总结细节问题:

       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 }

            

  • 相关阅读:
    android 布局边框的使用,在xml文件中配置边框大小及颜色
    android去掉layout顶部的阴影(状态栏下边的阴影)
    ExpandableListView
    addTextChangedListener有错
    Android EditText____TextchangedListener
    LinkedHashMap.get("key")
    适配器模式(Java代码)
    单例模式(Java代码)
    工厂方法模式(Java代码)
    质数算法
  • 原文地址:https://www.cnblogs.com/shunyu/p/4934749.html
Copyright © 2020-2023  润新知