数据结构学习之循环队列(顺序存储)
2015-06-19 11:07
337 查看
【摘要】队列特性:先进先出(FIFO)——先进队列的元素先出队列。来源于我们生活中的队列(先排队的先办完事)。
这样有个缺陷,空间利用率不高,所以我们直接学习循环队列(基于连续内存的)。
(1)设计队列数据结构
(2)申请队列内存
(3)释放队列内存
(4) 把数据压入队列
(5)把数据弹出队列
(6)统计当前队列中有多少数据
(7)查看队列中初始化的时候总长度是多少
这样有个缺陷,空间利用率不高,所以我们直接学习循环队列(基于连续内存的)。
(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; }
相关文章推荐
- 数据结构_二叉树遍历
- 数据结构_数值转换
- 数据结构:栈和队列
- 数据结构:链表
- JavaScript中数据结构与算法(五):经典KMP算法
- 数据结构和算法-009 双向链表
- 数据结构学习之堆栈(链式存储)
- JavaScript中数据结构与算法(四):串(BF)
- JavaScript中数据结构与算法(三):链表
- 数据结构学习之堆栈(顺序存储)
- JavaScript中数据结构与算法(二):队列
- JavaScript中数据结构与算法(一):栈
- JavaScript中数据结构与算法(一):栈
- JavaScript中数据结构与算法(二):队列
- JavaScript中数据结构与算法(三):链表
- JavaScript中数据结构与算法(四):串(BF)
- JavaScript中数据结构与算法(五):经典KMP算法
- 数据结构-图存储表示之邻接表
- 【kd-tree】bzoj3290 Theresa与数据结构
- 数据结构学习之双向循环链表的基本操作(非递归实现)