首页 > 代码库 > 一步一步写算法(之线性队列)
一步一步写算法(之线性队列)
原文: 一步一步写算法(之线性队列)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
这里的线性结构实际上指的就是连续内存的意思,只不过使用“线性”这个词显得比较专业而已。前面一篇博客介绍了现象结构的处理方法,那么在这个基础之上我们是不是添加一些属性形成一种新的数据结构类型呢?答案是肯定的,队列便是其中的一种。
队列的性质很简单:
(1)队列有头部和尾部
(2)队列从尾部压入数据
(3)队列从头部弹出数据
那么连续内存下的队列是怎么实现的呢?
a)设计队列数据结构
typedef struct _QUEUE_NODE{ int* pData; int length; int head ; int tail; int count;}QUEUE_NODE;b)申请队列内存
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 = http://www.mamicode.com/(int*)malloc(sizeof(int) * number);> c)释放队列内存STATUS delete_queue(const QUEUE_NODE* pQueueNode){ if(NULL == pQueueNode) return FALSE; assert(NULL != pQueueNode->pData); free(pQueueNode->pData); free((void*)pQueueNode); return TRUE;}d)把数据压入队列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;}e)把数据弹出队列STATUS get_queue_data(QUEUE_NODE* pQueueNode, int* value){ if(NULL == pQueueNode || NULL == value) return FALSE; if(0 == pQueueNode->count) return FALSE; *value = http://www.mamicode.com/pQueueNode->pData[pQueueNode->head];> f)统计当前队列中有多少数据int get_total_number(const QUEUE_NODE* pQueueNode){ if(NULL == pQueueNode) return 0; return pQueueNode->count;}g)查看队列中初始化的时候总长度是多少int get_total_number(const QUEUE_NODE* pQueueNode){ if(NULL == pQueueNode) return 0; return pQueueNode->length;}
【预告: 下一篇博客介绍线性堆栈的内容】
一步一步写算法(之线性队列)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。