zoukankan      html  css  js  c++  java
  • 数据结构队列的实现

    声明:本文仅供交流学习使用,严禁利用所学技术违法犯罪,否则后果自负

    循环队列问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    1,静态队列为什么必须是循环队列
    2,循环队列需要几个参数来确定
    需要2个参数来确定
    2个参数不同场合有不同的含义
    font和rear
    3,循环队列各个参数的含义
    1),队列初始化
    font和rear的值都是零
    2),队列非空
    font代表的是队列的第一个元素
    rear代表的是队列的最后一个有效元素
    3),队列空
    font和rear相等,但是不一定是零
    4,循环队列入队伪算法
    两步完成
    1),将值存入r所代表的位置
    2),正确的写法:r = (r+1)%数组的长度
    错误的写法:r = r+1
    5,循环队列出队伪算法
    f = (f + 1)% 数组的长度
    6,如何判断循环队列为空
    如果front 与 rear 的值相等,即 f = r 该队列为空
    7,如何判断循环队列已满
    两种方式:
    1,多增加一个表标识参数
    2,少用一个元素【通常用第二种方式】
    1),如果r和f的值紧挨着,则表示队列已满
    2),用c语言伪算法表示就是:
    if((r+1)%数组长度 == f){以满}
    else{不满}

    程序实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118

    #include<malloc.h>


    typedef struct //定义一个数据类型QUEUE
    {
    int * pBase;
    int front;
    int rear;

    }QUEUE;
    大专栏  数据结构队列的实现span>
    void init(QUEUE *);
    bool en_queue(QUEUE *, int val);//入队
    void traverse_queue(QUEUE *);//遍历队列
    bool full_queue(QUEUE *); //判断入队之前是不是已经满了
    bool out_queue(QUEUE *, int * ); //出队
    bool emput_queue(QUEUE *); //判断出队的时候是否为空

    int main(void)
    {
    QUEUE Q;
    int val;

    init(&Q);

    en_queue(&Q,1);
    en_queue(&Q,2);
    en_queue(&Q,3);
    en_queue(&Q,4);

    if(out_queue(&Q,&val))
    {
    printf("出队成功,队列出队的元素是:%dn" , val);
    }
    else
    {
    printf("出队失败n");
    }

    traverse_queue(&Q);
    return 0;


    }

    void init(QUEUE *pQ)
    {
    pQ->pBase = (int *)malloc(sizeof(int)*6);
    pQ->front = 0;
    pQ->rear = 0;

    }

    bool full_queue(QUEUE *pQ)
    {
    if((pQ->rear +1)%6 == pQ->front)
    return true;
    else
    return false;
    }


    bool en_queue(QUEUE * pQ, int val)
    {
    if(full_queue(pQ))
    {
    return false;
    }
    else
    {
    pQ->pBase[pQ->rear] = val;
    pQ->rear = (pQ->rear + 1)%6;
    return true;
    }

    }

    void traverse_queue(QUEUE * pQ)//遍历队列
    {
    int i = pQ->front;
    while(i != pQ->rear)
    {
    printf("%d ",pQ->pBase[i]);
    i = (i+1)%6;
    }


    }

    bool emput_queue(QUEUE *pQ)
    {
    if(pQ->front==pQ->rear)
    {
    return true;
    }
    else
    {
    return false;
    }
    }


    bool out_queue(QUEUE * pQ, int * pVal)
    {
    if(emput_queue(pQ))
    {
    return false;
    }
    else
    {
    *pVal = pQ->pBase[pQ->front];
    pQ->front = (pQ->front+1)%6;
    return true;
    }


    }
    1
    2
    出队成功,出队元素是1,
    2,3,4
  • 相关阅读:
    Practice II 字符串
    Euleriar Path 入门
    2-SAT 入门
    Practice I 图论
    游戏中寻找学习JAVA的乐趣之坦克大战系列5-坦克的动态参数
    JQuery教程:实现轮播图效果
    HTML表格应用
    菜鸟Vue学习笔记(三)
    Java成神路上之设计模式系列教程之一
    JVM垃圾回收机制之对象回收算法
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12360818.html
Copyright © 2011-2022 走看看