• 数据结构队列实例


      1 //数据结构 --队列
      2 //静态队列-用数组实现
      3 //静态队列通常是循环队列
      4 //循环队列讲解
      5 //1.静态队列为什么必须是循环队列?
      6 //2.循环队列需要几个参数来确定?
      7 /*
      8     front 和 rear
      9     1)队列初始化,font和rear的值都为零
     10     2)队列非空   
     11         font代表的是队列的第一个元素
     12         rear代表的是队列的最后一个有效元素的下一个元素
     13     3)队列空
     14         front和rear值
     15 */
     16 //3.循环队列各个参数的含义?
     17 //4.如何判断循环队列是否为空?
     18 /*
     19     front与rear值相等,则该队列就一定为空;
     20 */
     21 //5.如何判断循环队列是否已满?
     22 /*
     23 1)利用标志参数来判定是否已满;
     24 2)少用一个元素
     25 if((r+1)%数组长度==f)
     26     已满;
     27 else
     28     不满;
     29 */
     30 //6.循环队列入队伪算法讲解
     31 #include <stdio.h>
     32 
     33 typedef struct Queue
     34 {
     35     int *pBase;
     36     int front;
     37     int rear;
     38 }QUEUE;
     39 
     40 void init(QUEUE*);
     41 bool en_queue(QUEUE*, int val);
     42 void traverse_queue(QUEUE);
     43 bool out_queue(QUEUE*, int *);
     44 bool empty_queue(QUEUE* pQ);
     45 
     46 int main(void)
     47 {
     48     QUEUE Q;
     49     en_queue(&Q, 1);
     50     en_queue(&Q, 1);
     51     en_queue(&Q, 1);
     52     init(&Q);
     53     return 0;
     54 }
     55 
     56 void init(QUEUE *pQ)
     57 {
     58     pQ->pBase = (int*)malloc(sizeof(int)*6);
     59     pQ->front = 0;
     60     pQ->rear = 0;
     61 }
     62 
     63 bool en_queue(QUEUE* pQ, int val)
     64 {
     65     if (full_queue(pQ))
     66     {
     67         return false;
     68     }
     69     else
     70     {
     71         pQ->pBase[pQ->rear] = val;
     72         pQ->rear = (pQ->rear + 1)%6;
     73         return true;
     74     }
     75 }
     76 
     77 bool full_queue(QUEUE *pQ)
     78 {
     79     if (pQ->front == (pQ->rear + 1) % 6)
     80     {
     81         return true;
     82     }
     83     else
     84     {
     85         return false;
     86     }
     87 }
     88 
     89 void traverse_queue(QUEUE *pQ)
     90 {
     91     int i = pQ->front;
     92     while (i != pQ->rear)
     93     {
     94         printf("%d",pQ->pBase[i]);
     95         i = (i + 1) % 6;
     96     }
     97     return;
     98 }
     99 
    100 bool empty_queue(QUEUE *pQ)
    101 {
    102     if (pQ->rear == pQ->front)
    103     {
    104         return true;
    105     }
    106     else
    107     {
    108         return false;
    109     }
    110 }
    111 
    112 bool out_queue(QUEUE*pQ, int* pVal)
    113 {
    114     if (empty_queue(pQ))
    115     {
    116         return false;
    117     }
    118 
    119     int i = 0;
    120     while (i != pQ->rear)
    121     {
    122         *pVal = pQ->pBase[pQ->front];
    123         pQ->front = (pQ->front + 1) % 6;
    124     }
    125     return true;
    126 }
    127 
    128 //队列的具体应用:所有和时间有关的都与队列有关
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    JN_0026:FTP连接站点 规避防火墙
    JS_0002:js读取外部json文件
    JQPlug0002:layer Zindex不断增加的问题 弹窗一直置顶
    JQPlug0001:layer父子页面通信,常用打开模版
    Web_0010:Html打包EXE方法
    Web_0009:win系统下注册自己的协议,用于web项目启动本地程序
    ZAB 和 Paxos 算法的联系与区别?
    保证缓存与数据库双写时的数据一致性
    解决 Redis 的并发竞争 Key 问题
    缓存雪崩和缓存穿透
  • 原文地址:https://www.cnblogs.com/hujianglang/p/9813853.html
Copyright © 2020-2023  润新知