- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
循环队列存储空间动态扩充方法
循环队列存储空间动态扩充方法
摘要:循环队列在定义时总是事先规定一个最大值MAXSIZE来确定队列的最大存储空间,在使用中若初始值MAXSIZE太小会造成存储空间不够用的问题。在此提出了一种新的实现循环队列存储空间动态扩充的方法,解决了存储空间不够用的问题,同时也成功地避免了循环队列中存储空间的浪费问题。
关键词:循环队列;存储空间;动态分配;自动扩充
中图分类号:TP311.12 文献标识码:A文章编号:1007-9599 (2011) 24-0000-01
Dynamic Extension Methods of Circular queue Storage space
Zhang Haixia1,Ren Zhiguo2,Yue Qiuju2,Da Wenjiao
(1.Zhangye Medical College,Zhangye734000,China;2,Lanzhou City University,School of Information Engineering,Lanzhou730070,China)
Abstract:The circular queue definition is always predetermined a maximum value of MAXSIZE to determine the maximum storage space of the queue,use the initial value of MAXSIZE is too small will cause the problem of not enough storage space.Put forward a new dynamically expanding circular queue storage space to solve the problem of not enough storage space,but also succeeded in avoiding the waste of storage space in the circular queue.
Keywords:Circular queue;Storage space;Dynamically allocated;Automatically expand
在限定性线性表队列的顺序存储结构中,使用队列时都要将队列从逻辑上看成一个环即循环队列,克服“假上溢”现象,节省了计算机的存储空间。循环队列在定义时总是事先规定一个最大值MAXSIZE来确定队列的最大存储空间,在使用中其初始值太小会造成存储空间不够用。一般的做法是停止程序的执行,修改MAXSIZE的值。若太大则会造成存储空间的浪费,不能实现动态扩充的目的。以解决此问题为目的,本文提出了一种新的实现循环队列存储空间动态扩充的方法,解决了存储空间不够用的问题,同时也成功地避免了循环队列中存储空间的浪费问题。
一、传统方法
在循环队列的应用中,如果数据元素有进有出,且存储在队列中的元素个数始终小于MAXSIZE时,用传统算法完全可以解决。但是若数据元素把空间都占满又有元素需要入队,那么传统算法就无法解决了,只能出现“溢出”,数据元素入队不成功。
二、动态扩充方法
针对上面???问题,可以将ElemType定义为指针类型*Elem,而非数组,这样就不需要对循环队列设置最大值MAXSIZE,而是给循环队列设置初始值QUEUE_INIT_SIZE,通过C语言提供的动态内存函数malloc,给该指针分配存储空间,且附设一个Size来表示该空间的当前大小,若在程序执行中出现队满的情况,可以通过realloc函数将该空间进行扩充,使其增加INCREMENT个单元。其新的类型定义如下:
# define QUEUE_INIT_SIZE 20//循环队列存储空间的初始分配量
# define INCREMENT 5 //循环队列存储空间的分配增量
typedef struct
{
ElemType *Elem;//存储空间基址
int front,rear; //队头和队尾的当前位置
int Size; //当前分配的存储容量
}SeqQueue;
依照上述定义方法,在进行循环队列的初始化时,需要调用malloc函数开辟队列的初始空间。其描述如下:
int InitQueue(SeqQueue *Q)
{Q-Elem=(ElemType *)malloc(QUEUE_INIT_SIZE*sizeof(ElemType));
if(!Q-Elem)
return
文档评论(0)