zoukankan      html  css  js  c++  java
  • 循环队列程序演示

      1 #include<stdio.h>
      2 #include<malloc.h>
      3 
      4 typedef struct Queue{
      5     int * pBase;//数组名就是第一个数组元素的地址
      6     int front;//队首第一个元素下标
      7     int rear;//队尾最后一个有效元素的下一个元素
      8 }QUEUE;
      9 
     10 //函数声明,此处可不写形参
     11 void init(QUEUE *);//初始化队列,此处使用指针!!
     12 bool en_queue(QUEUE *,int);//入队(从最后一个元素开始),两个形参代表着往哪个数组里放、放入的元素是什么
     13 bool out_queue(QUEUE *,int *);//出队(从第一个元素开始),后面的int *表示删除的元素会返回
     14 void traverse_queue(QUEUE *);//遍历
     15 bool full_queue(QUEUE *);//判断队列是否满
     16 bool empty_queue(QUEUE *);//判断队列是否满
     17 
     18 int main(){
     19     int val;
     20     
     21     QUEUE Q;//声明一个结构体变量Q
     22     
     23     init(&Q);//传递实参结构体变量Q的地址
     24     
     25     en_queue(&Q,1);//存放元素
     26     en_queue(&Q,11);
     27     en_queue(&Q,123);
     28     en_queue(&Q,15);
     29     en_queue(&Q,16);
     30     en_queue(&Q,19);
     31     
     32     traverse_queue(&Q);//遍历输出
     33     
     34     if( out_queue(&Q,&val) ){
     35         printf("出队成功,出队元素是:%d",val);
     36     }
     37     else{
     38         printf("出队失败");
     39     }
     40     
     41     
     42     return 0;
     43 }
     44 
     45 void init(QUEUE *pQ){
     46     //长度为6的数组,动态分配内存24个字节
     47     pQ->pBase = (int *)malloc(sizeof(int)*6);
     48    //队列的初始状态,队首和队尾的下标都是0
     49     pQ->front = 0;
     50     pQ->rear = 0;
     51 }
     52 
     53 full_queue(QUEUE *PQ){
     54     if((pQ->rear + 1) % 6 == pQ->front){
     55         return true;
     56     }
     57     else{
     58         return false;
     59     }
     60 }
     61 
     62 bool en_queue(QUEUE * pQ,int val){
     63     if( full_queue(pQ)){
     64         return false;
     65     }
     66     else{
     67         pQ -> pBase[pQ->rear] = val;
     68         //因为rear的位置是在队尾最后一个有效元素的下一个元素,
     69         //所以将val存入rear的位置
     70         pQ->rear = (pQ->rear+1) % 6;//rear后移一位
     71         return true;
     72     }
     73 }
     74 
     75 void traverse_queue(QUEUE *pQ){
     76     int i = pQ->front;
     77     while(i != pQ->rear){
     78         printf("%d ",pQ->pBase[i]);
     79         i = (i+1) % 6;
     80     }
     81     return;
     82 }
     83 
     84 bool empty_queue(QUEUE *pQ){
     85     if( pQ->fromt == pQ->rear){
     86         return true;
     87     }
     88     else{
     89         return false;
     90     }
     91 }
     92 
     93 bool out_queue(QUEUE *pQ, int *pVal){
     94     if( emput_queue(pQ)){
     95         return false;
     96     }
     97     else{
     98         pVal = pQ->pBase[pQ->front];
     99         pQ->front = (pQ->front + 1) % 6 ;
    100         return true;
    101     }
    102 }
  • 相关阅读:
    linux使用tar命令打包压缩时排除某个文件夹或文件
    SEO误区之——静态化页面
    Usage of API documented as @since1.6+
    JAVA多线程售票问题
    nginx基本配置与参数说明
    ElasticSearch搜索实例含高亮显示及搜索的特殊字符过滤
    实例讲解Nginx下的rewrite规则
    postgresql之ctid的浅谈
    【转载】PostgreSQL分区表(Table Partitioning)应用
    PostgreSQL中使用外部表
  • 原文地址:https://www.cnblogs.com/sunbr/p/11354138.html
Copyright © 2011-2022 走看看