• 队列基础知识


    利用标志位tag实现顺序循环队列:

      1 /* */
      2 # include <stdio.h>
      3 # include <math.h>
      4 # include <stdlib.h>
      5 # define QUEUESIZE 100
      6 # define MAXSIZE 100
      7 typedef int DataType;
      8 
      9 typedef struct
     10 {
     11     int queue[QUEUESIZE];
     12     int front, rear;
     13     int tag;
     14 }SCQueue;
     15 
     16 void PrintData( DataType e);
     17 int CheckType(DataType e);
     18 void InitQueue(SCQueue *SCQ)///初始化为空队列
     19 {
     20     SCQ->front = SCQ->rear = 0;///对头指针和队尾指针都置为0
     21     SCQ->tag = 0;///标志置为0;
     22 }
     23 
     24 int QueueEmpty(SCQueue SCQ)///判断顺序循环队列是否为空,是则返回1,否则返回0
     25 {
     26     if( SCQ.front==SCQ.rear && SCQ.tag==0 )///队头指针和队尾指针都为0,且标志位为0表示队列已空
     27     {
     28         return 1;
     29     }
     30     else
     31     {
     32         return 0;
     33     }
     34 }
     35 
     36 int EnQueue(SCQueue *SCQ, DataType e)///将元素e插入顺序循环队列SQ中, 插入成功返回1, 否则返回0
     37 {
     38     if( SCQ->front==SCQ->rear && SCQ->tag==1 )
     39     {
     40         printf("顺序循环队列已满, 不能如队!");
     41         return 0;
     42     }
     43     else
     44     {
     45         SCQ->queue[SCQ->rear] = e;
     46         SCQ->rear = SCQ -> rear + 1;
     47         SCQ->tag = 1;
     48         return 1;
     49     }
     50 }
     51 
     52 int DeQueue(SCQueue *SCQ, DataType *e)///删除循环队列中的队头元素, 并将该元素赋值给e, 删除成功返回1, 否则返回0
     53 {
     54     if( QueueEmpty(*SCQ) )
     55     {
     56         printf("顺序循环队列已经是空列, 不能再进行出队操作!");
     57         return 0;
     58     }
     59     else
     60     {
     61         *e = SCQ->queue[SCQ->front];
     62         SCQ->front = SCQ->front+1;
     63         SCQ->tag = 0;
     64         return 1;
     65     }
     66 }
     67 
     68 void DisplayQueue(SCQueue SCQ)///输出顺序循环队列中的元素
     69 {
     70     int i;
     71     if( QueueEmpty(SCQ) )
     72     {
     73         return ;
     74     }
     75     if( SCQ.front<SCQ.rear )
     76     {
     77         for( i=SCQ.front; i<SCQ.rear; i++)
     78         {
     79             printf("%4d", SCQ.queue[i]);
     80         }
     81     }
     82     else
     83     {
     84         for( i=SCQ.front; i<SCQ.rear+QUEUESIZE; i++ )
     85         {
     86             printf("%4d", SCQ.queue[i%QUEUESIZE]);
     87         }
     88     }
     89     printf("
    ");
     90     return ;
     91 }
     92 
     93 int main()
     94 {
     95     SCQueue Q;
     96     int e;
     97     int a[] = {1, 2, 3, 4}, i;
     98     InitQueue(&Q);
     99     for( i=0; i<sizeof(a)/sizeof(a[0]); i++ )
    100     {
    101         EnQueue(&Q, a[i]);
    102     }
    103     printf("队列中元素: ");
    104     DisplayQueue(Q);
    105     i= 0;
    106     while( !QueueEmpty(Q) )
    107     {
    108         printf("队头元素第%d次出队
    ", ++i);
    109         DeQueue(&Q, &e);
    110         printf("出队的元素: ");
    111         printf("%d
    ", e);
    112     }
    113 }
    114 
    115 void PrintData(DataType e)///数据的输出(为了使调用函数不需要格式控制符
    116 {
    117     char n;
    118     n = CheckType(e);
    119     switch(n)
    120     {
    121     case 1:
    122         printf("%4c
    ", e);
    123         break;
    124     case 2:
    125         printf("%4d
    ", e);
    126         break;
    127     case 3:
    128         printf("%8.2f
    ", e);
    129         break;
    130     }
    131 }
    132 
    133 int CheckType(DataType e)///判断e是浮点数,整数还是字母字符
    134 {
    135     char str[MAXSIZE];
    136     int a;
    137     float b;
    138     if( fabs(e-(int)e>1e-6))///是浮点数
    139     {
    140         return 3;
    141     }
    142     if( e>='A' && e<='Z' || e>='a' && e<='z' )///是字母字符
    143         {
    144             return 1;
    145         }
    146         else///是整数
    147         {
    148             return 2;
    149         }
    150 }
  • 相关阅读:
    1、购买阿里云服务器
    struts2页面乱码解决方法
    struts第一次编写怎么都无法跳转页面
    时间转换与map集合
    struts2addActionError 、addFieldError、addActionMessage方法
    struts2基本流程
    struts2自定义类型转换器
    jsp聊天窗口随笔
    conn!=null与conn.isClosed的区别
    应用表单隐藏域进行提交
  • 原文地址:https://www.cnblogs.com/wsy107316/p/10713430.html
Copyright © 2020-2023  润新知