码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构之队列

时间:2016-05-01 09:46:27      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:

转自: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\n");
        }
        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

数据结构之队列

标签:

原文地址:http://www.cnblogs.com/shirishiqi/p/5450032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!