注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

告别迷茫

梦想与现实的差距,就是我们生活的意义。因为我们有差距,我们才会一直积累,在努力。

 
 
 

日志

 
 

循环队列的实现,可以用数组,也可以申请空间  

2014-10-09 15:16:08|  分类: 数据结构---严老 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

空间使用完了之后,我们不能再次利用realloc 申请  比如  5 6 空的 1 2 3 4  这样的排列的顺序   我们的想法是123456

但是不可以啊,必须手动弄好了才可以。

结构实现:

 #include<cstdlib>
const int Max=1000;
struct SqQnueue

{
 int *base;
 int front;
 int tail;
};


bool InitQ(SqQnueue &l)
{
 l.base=(int *)malloc(Max*sizeof(SqQnueue));
 l.front=l.tail;
}
int Lengthsq(SqQnueue &l)
{
 int p=(l.tail-l.front+Max)%Max;//考虑到我们的特殊的情况的时候,我们就得必须很好
                                //比如我们的尾节点在我们的首节点的前面!
 return p;
}


bool Deletesq(SqQnueue &l,int &e)
{
 if(l.front ==l.tail)
 {
  return false;
  //我们这里的问题,和链式的不一样啊
  //l.base[l.tail]没有保存结果啊!
  //我们牺牲了一个空间的待价,来判断是否为空
  //或者选择,使用一个标记节点,插入后标记,删除时标记,具体一会再说啊!
  //判断是否满了  (l.tail+1)%Max==?l.front;
 }
 e=l.base[l.front];
 l.front=(l.front+1)%Max;
 return true;
}
bool Insertsq(SqQnueue &l,int e)
{
 /*
 1.判断是否满了!
 */
 if((l.tail+1)%Max==l.front)
 {
  return false;
 }
 l.base[l.tail]=e;//l.tail 没有保存的有元素啊!
 //让我们的l.tail指向后面的元素;
 l.tail=(l.tail+1)%Max;//魔力之环,就是这么的叼啊~
 return true;
}


bool GetHead(SqQnueue &l,int &e)
{
 if(l.tail==l.front)
 {
  return false;
 }
 e=l.base[l.front];//e=*(Q.base+Q.front);一样的结果啊!
 return true;
}
bool IsEmpty(SqQnueue &l)
{
 if(l.tail==l.front)
 {
  return true;
 }
 return false;
}


bool Clearsq(SqQnueue &l)
{
 //理解这个的意思!  什么为空啊??l.tail==l.front
 l.tail==l.front=0;
 return true;
}
bool Destroysq(SqQnueue &l)
{
 //destroy 的意思呢??  把申请的节点的空间删掉!  申请了多少呢??
 if(l.base)
 {
  free(l.base);
 }
 l.front=l.tail=0;
 l.base=NULL;
}


  评论这张
 
阅读(1)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017