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

数据结构学习之循环队列(顺序存储)

时间:2015-06-19 11:53:13      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:队列   循环队列   顺序存储   

【摘要】队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。
技术分享
这样有个缺陷,空间利用率不高,所以我们直接学习循环队列(基于连续内存的)。

技术分享
(1)设计队列数据结构

typedef struct _QUEUE_NODE
{
    int* pData;
    int length;//队列长度
    int head ;//队头指针
    int tail;//队尾指针
    int count;//队列元素当前个数
}QUEUE_NODE;

(2)申请队列内存

QUEUE_NODE* alloca_queue(int number)
{
    QUEUE_NODE* pQueueNode;
    if( 0 == number)
        return NULL;

    pQueueNode = (QUEUE_NODE*)malloc(sizeof(QUEUE_NODE));
    assert(NULL != pQueueNode);
    memset(pQueueNode, 0, sizeof(QUEUE_NODE));

    pQueueNode->pData = (int*)malloc(sizeof(int) * number);
    if(NULL == pQueueNode->pData){
        free(pQueueNode);
        pQueueNode = NULL;
        return NULL;
    }

    pQueueNode->length = number;//队列长度
    return pQueueNode;
}

(3)释放队列内存

STATUS delete_queue(const QUEUE_NODE* pQueueNode)
{
    if(NULL == pQueueNode) 
        return FALSE;

    assert(NULL != pQueueNode->pData);

    free(pQueueNode->pData);
    free((void*)pQueueNode);
    return TRUE;
}

(4) 把数据压入队列

STATUS insert_queue(QUEUE_NODE* pQueueNode, int value)
{
    if(NULL == pQueueNode)
        return FALSE;

    if(pQueueNode->length == pQueueNode->count)//判断是不是溢出
        return FALSE;

    pQueueNode->pData[pQueueNode->tail] = value;
    pQueueNode->tail = (pQueueNode->tail + 1) % pQueueNode->length;  //队尾指针位置
    pQueueNode->count ++;
    return TRUE;
}

(5)把数据弹出队列

STATUS get_queue_data(QUEUE_NODE* pQueueNode, int* value)
{
    if(NULL == pQueueNode || NULL == value)
        return FALSE;

    if(0 == pQueueNode->count)
        return FALSE;

    *value = pQueueNode->pData[pQueueNode->head];
    pQueueNode-> pData[pQueueNode->head] = 0; //被弹出的位置赋值为0
    pQueueNode-> count --;
    pQueueNode->head = (pQueueNode->head + 1) % pQueueNode->length;//重新定位队头指针的位置
    return TRUE;
}

(6)统计当前队列中有多少数据

int  get_total_number(const QUEUE_NODE* pQueueNode)
{
    if(NULL == pQueueNode)
        return 0;

    return pQueueNode->count;
}

(7)查看队列中初始化的时候总长度是多少

int  get_total_number(const QUEUE_NODE* pQueueNode)
{
    if(NULL == pQueueNode)
        return 0;

    return pQueueNode->length;
}

数据结构学习之循环队列(顺序存储)

标签:队列   循环队列   顺序存储   

原文地址:http://blog.csdn.net/xy010902100449/article/details/46559567

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