• 数据结构之队列


    转自:http://www.cnblogs.com/kaituorensheng/archive/2013/02/28/2937865.html

    队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。

    队列有下面几个操作:

    • InitQueue()   ——初始化队列
    • EnQueue()        ——进队列
    • DeQueue()        ——出队列
    • IsQueueEmpty()——判断队列是否为空
    • IsQueueFull()    ——判断队列是否已满

    队列可以由数组和链表两种形式实现队列操作(c语言),下面仅以数组为例:

    数组实现:

    队列数据结构

    复制代码
    typedef struct queue
    {
            int queuesize;   //数组的大小
            int head, tail;  //队列的头和尾下标
            int *q;          //数组头指针
    }Queue;
    复制代码

    InitQueue()   ——初始化队列

    复制代码
    void InitQueue(Queue *q)
    {
            q->queuesize = 8;
            q->q = (int *)malloc(sizeof(int) * q->queuesize); //分配内存
            q->tail    = 0;
            q->head = 0;
    }
    复制代码

    这样有个缺陷,空间利用率不高。采用循环队列:

    EnQueue()        ——进队列

    复制代码
    void EnQueue(Queue *q, int key)
    {
            int tail = (q->tail+1) % q->queuesize; //取余保证,当quil=queuesize-1时,再转回0
            if (tail == q->head)                   //此时队列没有空间
            {
                printf("the queue has been filled full!");
            }
            else
            {
                q->q[q->tail] = key;
                q->tail = tail;
            }
    }
    复制代码

    DeQueue()        ——出队列

    复制代码
    int DeQueue(Queue *q)
    {
            int tmp;
            if(q->tail == q->head)     //判断队列不为空
            {
                printf("the queue is NULL
    ");
            }
            else
            {
                tmp = q->q[q->head];
                q->head = (q->head+1) % q->queuesize;
            }
            return tmp;
    }
    复制代码

    IsQueueEmpty()——判断队列是否为空

    复制代码
    int IsQueueEmpty(Queue *q)
    {
            if(q->head == q->tail)
            {
                return 1;
            }
            else
            {
                return 0;
            }
    }
    复制代码

    IsQueueFull()——判断队列是否已满

    复制代码
    int IsQueueFull(Queue *q)
    {
        if((q->tail+1)% q->queuesize == q->head)
        {
            return 1;
        }
        else
        {
            return 0;
        }
    }
    复制代码

    更多数据结构相关学习网址:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

  • 相关阅读:
    结对第一次—原型设计(文献摘要热词统计)
    第一次作业-准备篇
    201771010135杨蓉庆《面向对象程序设计(java)》第二周学习总结
    杨蓉庆201771010135《面向对象程序设计(java)》第一周学习总结
    2019 SDN阅读作业
    第01组 Alpha冲刺 (2/4)
    2019 SDN上机第3次作业
    第01组 ALPHA冲刺(1/4)
    2019SDN上机第二次作业
    2019 SDN上机第1次作业
  • 原文地址:https://www.cnblogs.com/shirishiqi/p/5450032.html
Copyright © 2020-2023  润新知