c语言循环队列怎么动态扩充,循环队列存储空间动态扩充方法.doc

循环队列存储空间动态扩充方法

循环队列存储空间动态扩充方法

摘要:循环队列在定义时总是事先规定一个最大值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)   retur

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值