• 循环队列-----银行排号叫号系统模仿


    运用知识:

         循环队列的顺序存储

    下面是文件运行成功的样式展示

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #define FALSE 0
      4 #define ERROR 0
      5 #define OK 1
      6 #define TRUE 1
      7 #define MAXSIZE 6  //队列的长度
      8 typedef int Elem;
      9 typedef int Status;
     10 /*
     11    这里似乎没用到GetHead(),QueueEmpty()这两个函数,但是我还是定义了
     12 */
     13 //队列的顺序存储结构
     14 typedef struct
     15 {
     16     Elem data[MAXSIZE];
     17     int front;
     18     int rear;
     19 }Sq;
     20 
     21 int IsInit = FALSE;//这个是用来判断是否初始化,即主函数中用来要求先输入0(即先选上班,不然队列没有初始化);
     22 //队列的初始化,即将队列的头尾指针都等于0;
     23 void Init(Sq &S)
     24 {
     25     S.front = 0;
     26     S.rear = 0;
     27     IsInit = TRUE;
     28 }
     29 //入队列,注:入队列时会空出一个数组位置,方便尾指针的指向,所以这也是判断队满时为什么尾指针要加1
     30 Status EnQueue(Sq &S,Elem num)
     31 {
     32     if((S.rear+1)%MAXSIZE==S.front) return ERROR;//判断是否栈满,即尾指针后移一位与头指针相逢,队列就满了
     33     S.data[S.rear] = num;  //存数
     34     S.rear = (S.rear+1)%MAXSIZE;  //队尾指针后移
     35     return OK;
     36 }
     37 //出队列
     38 Status DeQueue(Sq &S,Elem &e)
     39 {
     40     if(S.front == S.rear) return ERROR;//判断队空,当队头指针遇到队尾指针,队空
     41     e = S.data[S.front];   //队头元素赋值给e
     42     S.front = (S.front+1)%MAXSIZE;//队头指针后移
     43     return OK;
     44 }
     45 //获得队列的长度
     46 int getLen(Sq S)
     47 {
     48     return (S.rear+MAXSIZE-S.front)%MAXSIZE;//返回队列的长度
     49 }
     50 //获得队列的头元素
     51 Status GetHead(Sq S,Elem &e)
     52 {
     53     if(S.rear == S.front)
     54         return ERROR;
     55     else{
     56         e = S.data[S.front];
     57         return OK;
     58     }
     59 }
     60 //判断队空
     61 Status QueueEmpty(Sq S)
     62 {
     63     if(S.front==S.rear) return ERROR;
     64     else
     65         return OK;
     66 }
     67 //判断队满
     68 Status QueueFull(Sq S)
     69 {
     70     if((S.rear+1)%MAXSIZE==S.front)
     71         return ERROR;
     72     else
     73         return OK;
     74 }
     75 int main()
     76 {
     77     Sq S;
     78     int n,num=0;
     79     Elem e;
     80 
     81     while(1)
     82     {
     83         printf("---------------银行叫号系统-----------
    ");
     84         printf("--------------------------------------
    ");
     85         printf("1.上班
    ");
     86         printf("2.排号
    ");
     87         printf("3.叫号
    ");
     88         printf("0.下班
    ");
     89         printf("---------------------------------------
    
    ");
     90 
     91         scanf("%d",&n);
     92         switch(n)
     93         {
     94             case 0:if(!IsInit)
     95                    {
     96                        printf("要先开始上班才能下班哦!!
    
    ");
     97                        break;
     98                        //为什么要有这个判断呢,因为队列要初始化,这里其实可以不做判断
     99                    }
    100                    if(!QueueEmpty(S))
    101                    {
    102                        printf("下班啦,可以回家了!!!
    
    ");
    103                        return 0;
    104                    }else
    105                    {
    106                        printf("还有业务没有完成,暂时不能下班!!
    
    ");
    107                        break;
    108                    }
    109             case 1:
    110                    Init(S);
    111                    num = 0;
    112                    printf("一切准备就绪,开始上班!!!
    
    ");
    113                    break;
    114 
    115             case 2:
    116                 if(!IsInit)
    117                 {
    118                     printf("要先开始上班,请做好工作准备!!
    
    ");
    119                     break;
    120                     //为什么要有这个判断呢,因为队列要初始化
    121                 }
    122                 if(QueueFull(S))
    123                 {
    124                     //如果队列没满,就入队列
    125                     EnQueue(S,++num);
    126                     printf("当前是%d号,前面有%d位
    
    ",num,getLen(S)-1);
    127                     break;
    128                 }else
    129                 {
    130                     //如果队列满了
    131                     printf("人已满了!!请耐心等待
    
    ");
    132                     break;
    133                 }
    134             case 3:
    135                 if(!IsInit)
    136                 {
    137                     printf("新的一天开始了
    要先开始上班,请先做好准备!!
    
    ");
    138                     break;
    139                     //为什么要有这个判断呢,因为队列要初始化
    140                 }
    141                 if(DeQueue(S,e))
    142                 {
    143                     //如果队列没空,就可以出队列
    144                     printf("%d号业务办理成功!还有%d人在等待!
    
    ",e,getLen(S));
    145                     break;
    146                 }else
    147                 {
    148                     //如果队列空了
    149                      printf("当前没有人办理业务!!
    
    ");
    150                      break;
    151                 }
    152              default :
    153                 printf("无效操作!!!请重新输入
    
    ");
    154                 break;
    155 
    156         }
    157     }
    158 }
  • 相关阅读:
    jmeter-获取数据库中的数据
    jmeter常见报错汇总
    学习目录
    Spring+Spring Security+JSTL实现的表单登陆的例子
    Spring+Spring Security+Maven 实现的一个Hello World例子
    第六章:位置匹配
    第五章:重复匹配
    第四章:使用元字符
    第三章:匹配一组字符
    第二章:匹配单个字符
  • 原文地址:https://www.cnblogs.com/wwww2/p/11755734.html
Copyright © 2020-2023  润新知