• 数据结构-循环队列程序演示


      1 /*
      2 循环队列需要2个参数来确定;
      3 front,rear
      4 1)队列初始化
      5 front和rear的值都为零
      6 2)队列非空
      7 front代表的是队列的第一个元素
      8 rear代表的是队列的最后一个有效元素
      9 3)队列空
     10 front和rear的值相等,但不一定是零
     11 */
     12 
     13 
     14 /*
     15 队列
     16 定义:一种可以实现先进先出的存储结构
     17 分类:
     18 静态队列
     19 链式队列
     20 */
     21 #include <stdio.h>
     22 #include <malloc.h>
     23 
     24 typedef struct Queue
     25 {
     26     int *pBase;
     27     int front;
     28     int rear;
     29 }QUEUE;
     30 
     31 void init(QUEUE *);
     32 bool en_queue(QUEUE*, int val);
     33 void traverse_queue(QUEUE*);
     34 void out_queue(QUEUE *, int*);
     35 bool full_queue(QUEUE*);
     36 bool empty_queue(QUEUE*);
     37 
     38 int main(void)
     39 {
     40     QUEUE Q;
     41     int val;
     42     init(&Q);
     43     en_queue(&Q, 0);
     44     en_queue(&Q, 1);
     45     en_queue(&Q, 2);
     46     en_queue(&Q, 3);
     47     en_queue(&Q, 4);
     48     en_queue(&Q, 5);
     49     en_queue(&Q, 6);
     50     en_queue(&Q, 7);
     51     en_queue(&Q, 8);
     52     traverse_queue(&Q);
     53     if (out_queue(&Q, &val))
     54     {
     55         printf("出队成功,队列出队的元素为:%d
    ",val);
     56     }
     57     else
     58     {
     59         printf("出队失败!
    ");
     60     }
     61     traverse_queue(&Q);
     62     return 0;
     63 }
     64 
     65 void init(QUEUE *pQ)
     66 {
     67     pQ->pBase = (int*)malloc(sizeof(int) * 6);
     68     pQ->front = 0;
     69     pQ->rear = 0;
     70 }
     71 
     72 bool en_queue(QUEUE *pQ, int val)
     73 {
     74     if (full_queue(pQ))
     75     {
     76         return false;
     77     }
     78     else
     79     {
     80         pQ->pBase[pQ->rear] = val;
     81         pQ->rear = (pQ->rear + 1) % 6;
     82         return true;
     83     }
     84 }
     85 
     86 bool full_queue(QUEUE*pQ)
     87 {
     88     if (pQ->front == (pQ->rear+1)%6)
     89     {
     90         return true;
     91     }
     92     else
     93     {
     94         return false;
     95     }
     96 }
     97 
     98 void traverse_queue(QUEUE *pQ)
     99 {
    100     int i = pQ->front;
    101     while (i != pQ->rear)
    102     {
    103         printf("%d ", pQ->pBase[i]);
    104         i = (i + 1) % 6;
    105     }
    106     return;
    107 }
    108 
    109 bool empty_queue(QUEUE *pQ)
    110 {
    111     if (pQ->front == pQ->rear)
    112     {
    113         return true;
    114     }
    115     else
    116     {
    117         return false;
    118     }
    119 }
    120 
    121 bool out_queue(QUEUE*pQ, int* pVal)
    122 {
    123     if (empty_queue(pQ))
    124     {
    125         return false;
    126     }
    127     else
    128     {
    129         *pVal = pQ->pBase[pQ->front];
    130         pQ->front = (pQ->front + 1) % 6;
    131         return true;
    132     }
    133 }
    怕什么真理无穷,进一寸有一寸的欢喜。---胡适
  • 相关阅读:
    zookeeper
    redis客户端高低版本简单实战、雪崩、击穿、穿透、布隆过滤器(三)
    redis集群理论与实战(二)
    redis集群理论与实战
    oracle单表循环修改表字段
    redis的集群、主从复制、CAP、paxos
    CF1328D Carousel
    AT4842 [ABC136E] Max GCD
    [ABC135D] Digits Parade
    AT4752 [ABC131E] Friendships
  • 原文地址:https://www.cnblogs.com/hujianglang/p/9704263.html
Copyright © 2020-2023  润新知