zoukankan      html  css  js  c++  java
  • 两夜之后,停车场模拟告一段落

    /*经过两个深夜的战斗,终于把老师要求的作业做完了,其实没办法,后天还让交上,

    本想在网上下一个算了,不过还是自己些吧,写完方知其中乐趣。*/

     

      1  //都无头节点
      2    #include<stdio.h>
      3    #include<malloc.h>
      4    #include<string.h>
      5    #include<stdlib.h> 
      6    #define  MAX_PARK  2
      7    typedef  struct{
      8        char license_plate[10]; /*汽车牌照号码*/
      9        char state;  /*汽车当前状态,p表示在停车位上,q表示在便道上*/
     10       float time;  /*汽车进入的时刻*/
     11   }Car;
     12   //停车场栈或辅助栈
     13   typedef struct{
     14       Car Pack[MAX_PARK];               /*各汽车信息的存储空间*/
     15       int top;                          /*用来指示栈顶位置的指针*/  
     16   }ParkStack,*Parklink;
     17   //便道(为队列)
     18   typedef struct qnode{
     19       Car  data;  /*各汽车信息的存储空间*/
     20       struct qnode  *next;
     21   }Qnode;
     22   typedef struct{
     23       Qnode *front, *rear;  /*用来指示队头和队尾位置的指针*/
     24   }RoadQueue;
     25   //辅助栈
     26   /*typedef struct{
     27       Car BUFFER[MAX_PARK]; //各汽车信息的存储空间
     28       int top;                //用来指示栈顶位置的静态指针
     29   }BUFFER;*/
     30   void out_zhan(Parklink a){
     31    int i=0;
     32    while(i<=a->top){
     33    printf("(%s,%c,%.2f)",a->Pack[i].license_plate,a->Pack[i].state,a->Pack[i].time);
     34    i++;
     35    }
     36   }//out_zhan结束
     37   void out_biandao(RoadQueue *frb){
     38    Qnode *p=frb->front;
     39       while(p){
     40     Car t=p->data;
     41     printf("(%s,%c,%.2f),",t.license_plate,t.state,t.time);
     42     p=p->next;
     43    }
     44   }
     45   void depart(Parklink ht,Parklink hf,char a[],float t2,RoadQueue *frb){
     46    int i=0;
     47    while(strcmp(ht->Pack[i].license_plate,a)!=0){
     48     i++;
     49    }
     50    while(ht->top>i){
     51    hf->top++;
     52    strcpy(hf->Pack[hf->top].license_plate,ht->Pack[ht->top].license_plate);
     53    hf->Pack[hf->top].state=ht->Pack[ht->top].state;
     54    hf->Pack[hf->top].time=ht->Pack[ht->top].time;
     55       ht->top--;
     56       printf("%s车已移到辅助栈  ",hf->Pack[hf->top].license_plate);
     57    }
     58    printf("\n");
     59    ht->top--;
     60    printf("%s已移出停车场,",ht->Pack[i].license_plate);
     61    printf("应收费:");
     62    printf("%.2f元\n",(t2-ht->Pack[i].time)*5);
     63    while(hf->top!=-1){//再移回停车场
     64     strcpy(ht->Pack[++ht->top].license_plate,hf->Pack[hf->top].license_plate);
     65        ht->Pack[ht->top].state=hf->Pack[ht->top].state;
     66        ht->Pack[ht->top].time=hf->Pack[hf->top].time;
     67     printf("%s又移回停车场",hf->Pack[hf->top].license_plate);
     68     hf->top--;
     69    }
     70    printf("\n");
     71    while(ht->top<MAX_PARK-1&&frb->front!=NULL&&frb->rear!=NULL){//便道上的车停到车场
     72     float t;
     73     strcpy(ht->Pack[++ht->top].license_plate,frb->front->data.license_plate);
     74     frb->front=frb->front->next;
     75     printf("%s要进站",ht->Pack[ht->top].license_plate);
     76           printf("请输入现在时间以对该车进行收费:");
     77     scanf("%f",&t);
     78     ht->Pack[ht->top].time=t;
     79    }
     80   }//end depart
     81   void in_che(Parklink ht,Parklink hf,RoadQueue *frb){
     82     char a[10],b;
     83     float c;
     84     Qnode*sb;
     85     while(1){
     86     int i=0,j=0;
     87        printf("请输入车辆的信息:\n");
     88        scanf("%s %s %f",a,&b,&c);
     89        if(*a=='0'&&b=='0'&&c==0)
     90            break;
     91     if(b=='a'){
     92      while(i<=ht->top){
     93      if(strcmp(ht->Pack[i].license_plate,a)==0){
     94       printf("以存在\n");
     95          i=10;
     96      }
     97      else
     98       i++;
     99      }
    100        if(i==10)
    101         continue;
    102        else{
    103     if(++ht->top<MAX_PARK){//停车场未满 
    104     strcpy(ht->Pack[ht->top].license_plate,a);
    105              ht->Pack[ht->top].state=b;
    106              ht->Pack[ht->top].time=c;
    107    }
    108    else{
    109        sb=(Qnode*)malloc(sizeof(Qnode));
    110              if(frb->rear==NULL){
    111                 frb->front=sb;
    112                 frb->rear=sb;
    113           }
    114              else {
    115           frb->rear->next=sb;
    116                 frb->rear=sb;
    117           }
    118     strcpy(sb->data.license_plate,a);
    119            sb->data.state=b;
    120            sb->data.time=c;
    121            sb->next=NULL;
    122        }
    123      if(ht->top==MAX_PARK)
    124     ht->top=MAX_PARK-1;
    125    }
    126    } //end if(b=='a')
    127    else if(b=='d'){//车要离开
    128     while(j<=ht->top){//判断是否有该车
    129     if(strcmp(ht->Pack[j].license_plate,a)==0){
    130      j=10;
    131      break;
    132     }
    133     else
    134      j++;
    135     }
    136     if(j==10)
    137               depart(ht,hf,a,c,frb);
    138     else{
    139      printf("车场中无该车");
    140     }
    141    }
    142    else
    143     printf("输入错误,");
    144    }//end while
    145  }//end in_che
    146  void out_che(Parklink ht,Parklink hf,RoadQueue *frb){
    147     printf("停车场里的车:");
    148     if(ht->top>-1){
    149         out_zhan(ht);printf("\n");
    150     }
    151     else 
    152      printf("无\n");
    153     printf("便道上的车有:");
    154     if(frb->front==frb->rear&&frb->rear==NULL)
    155         printf("无\n");
    156     else{
    157      out_biandao(frb);printf("\n");
    158     }
    159  }
    160  void main(){
    161     int fs=0,bd=0,caoz;
    162     ParkStack *ht,*hf; //hf代表辅助栈头指针
    163     RoadQueue *frb;           //frb便道头尾
    164     printf("停车场模拟\n");
    165     printf("车辆的信息以空格隔开如(f004 a 6.5)a代表到达,d代表离开,输入(0 0 0)结束\n收费每分钟5元\n");
    166     ht=(ParkStack*)malloc(sizeof(ParkStack));//开辟停车场栈
    167     ht->top=-1;  //top该插的位置
    168     hf=(ParkStack*)malloc(sizeof(ParkStack));//开辟辅助栈
    169     hf->top=-1;  
    170     frb=(RoadQueue*)malloc(sizeof(RoadQueue));//开辟便道栈
    171     frb->rear=NULL;frb->front=NULL;
    172  start:
    173     printf("你想进行的操作(1输入车信息,2查看车信息,3清屏)\n");
    174     scanf("%d",&caoz);
    175     if(caoz==1){
    176       in_che(ht,hf,frb);
    177     }
    178     else if(caoz==2){
    179       out_che(ht,hf,frb);
    180     }
    181     else if(caoz==3)
    182      system("CLS");
    183     printf("//------------------------------------------------//\n");
    184     goto start;
    185  }//main结束
    186 
  • 相关阅读:
    1 基本概念 进入java世界
    一文了解kudu【转载】
    jenkins git项目clean before checkout 和 wipe out repository & force clone
    jenkins 内置判断条件
    jenkins常用插件使用说明-git publisher
    常用正则表达式
    基于ldap+sentry+rbac的hive数据库权限测试
    nginx_mirror_module流量复制在项目中的应用
    jenkins上job误删除怎么恢复
    pipeline语法学习日记
  • 原文地址:https://www.cnblogs.com/liulei/p/1340969.html
Copyright © 2011-2022 走看看