zoukankan      html  css  js  c++  java
  • 循环队列

    循环队列类似栈,但是有两个口,一个专门用来入队,一个专门用来出队。由于入队出队不在一个端口,因此如果不适用循环队列,随着队列的使用,存储空间马上就被耗光了。在循环队列中,一个主要的知识点,就是如何判断队列为空,或者队列满。

    这里主要有两个方法:

    1 设置一个标记位,初始时,队列为空,我们设置flag=0;随着数据的使用,如果队满,设置flag=1;

    2 使用一个空的数据位,这样rear指针永远也不能追上front指针。当front==rear时,队列即为空;当(rear-front)%SIZE==SIZE时,队列为满

    数据结构

    typedef struct Queue{
        int data[MAXSIZE];
        int front;
        int rear;
    }Queue;

    入队操作

    int inQueue(Queue *q,int num){
        if((q->rear+1)%MAXSIZE == q->front)
            return 0;
        q->data[q->rear] = num;
        q->rear = (q->rear+1)%MAXSIZE;
        return 1;
    }

    出队操作

    int outQueue(Queue *q,int *tar){
        if(q->front == q->rear)
            return 0;
        *tar = q->data[q->front];
        q->front = (q->front+1)%MAXSIZE;
        return 1;
    }

    示例代码

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #define MAXSIZE 10
     4 
     5 typedef struct Queue{
     6     int data[MAXSIZE];
     7     int front;
     8     int rear;
     9 }Queue;
    10 
    11 void initQueue(Queue *q,int n);
    12 void showQueue(Queue *q);
    13 int getLength(Queue *q);
    14 int inQueue(Queue *q,int num);
    15 int outQueue(Queue *q,int *tar);
    16 
    17 int main()
    18 {
    19     Queue *q = (Queue *)malloc(sizeof(Queue));
    20     initQueue(q,3);
    21     showQueue(q);
    22 
    23     if(inQueue(q,9))
    24         showQueue(q);
    25 
    26     int *tar = (int *)malloc(sizeof(int));
    27     if(outQueue(q,tar))
    28         printf("the number %d out Queue
    ",*tar);
    29     showQueue(q);
    30 
    31     if(outQueue(q,tar))
    32         printf("the number %d out Queue
    ",*tar);
    33     showQueue(q);
    34 
    35     if(inQueue(q,110))
    36         showQueue(q);
    37 
    38     if(outQueue(q,tar))
    39         printf("the number %d out Queue
    ",*tar);
    40     showQueue(q);
    41 
    42     if(outQueue(q,tar))
    43         printf("the number %d out Queue
    ",*tar);
    44     showQueue(q);
    45 
    46     if(outQueue(q,tar))
    47         printf("the number %d out Queue
    ",*tar);
    48     showQueue(q);
    49 
    50     free(tar);
    51     free(q);
    52     return 0;
    53 }
    54 
    55 void initQueue(Queue *q,int n){
    56     int i;
    57     q->front=0;
    58     q->rear =0;
    59     for(i=0;i<n;i++){
    60         q->data[q->rear]=2*i+1;
    61         q->rear++;
    62     }
    63 }
    64 void showQueue(Queue *q){
    65     int i;
    66     int len=getLength(q);
    67     printf("front-");
    68     for(i=0;i<len;i++){
    69         if(q->front+i<MAXSIZE)
    70             printf("%d-",q->data[q->front+i]);
    71         else
    72             printf("%d-",q->data[q->front+i-MAXSIZE]);
    73     }
    74     printf("rear
    ");
    75 }
    76 int getLength(Queue *q){
    77     return (q->rear-q->front+MAXSIZE)%MAXSIZE;
    78 }
    79 int inQueue(Queue *q,int num){
    80     if((q->rear+1)%MAXSIZE == q->front)
    81         return 0;
    82     q->data[q->rear] = num;
    83     q->rear = (q->rear+1)%MAXSIZE;
    84     return 1;
    85 }
    86 int outQueue(Queue *q,int *tar){
    87     if(q->front == q->rear)
    88         return 0;
    89     *tar = q->data[q->front];
    90     q->front = (q->front+1)%MAXSIZE;
    91     return 1;
    92 }

    运行结果

  • 相关阅读:
    java生成UUID通用唯一识别码 (Universally Unique Identifier)
    使用ToolRunner运行Hadoop程序基本原理分析
    Hadoop入门经典:WordCount
    Hadoop配置文件
    【Nutch2.2.1基础教程之3】Nutch2.2.1配置文件
    8大排序算法图文讲解
    动态字典树_前缀相互查找(HDU_1671)
    DP_基本DP+排序(HDU_1421)
    斯特灵公式
    七种 qsort 排序方法
  • 原文地址:https://www.cnblogs.com/xing901022/p/3534937.html
Copyright © 2011-2022 走看看