c++环形队列的实现方法类模板题目

感谢老师讲的很认真非常好

1 - 环形队列的实现方法类模板

在前面两篇我介绍了自己实现嘚Buffer类,Buffer类是双端的缓冲区两头都可以加入或取出元素。而在实际使用中可能两头都需要取和放元素的需求并不多更多的情况是FIFO和LIFO的缓沖区,即队列和栈这两种数据结构

当然,想要把Buffer类当做FIFO或LIFO只需要自己规定好分别使用Front还是Back来当In或Out用就行了但是如果你是要和别人合作の类的还是有些不方便,毕竟还要有些先验知识要是搞错了方向就尴尬了。所以专门为其写一个接口还是蛮有必要的

下面给出FIFO缓冲区 Queue模块的接口:

Queue类同样是使用面向对象的方式,用了一个虚表实现的多态其方法包括入队In、出队Out和清空Cleanup。因为它也是一个容器所以也继承自Container类。

实现方面当然我可以重新写一个实现。但是为了重用现有代码当然也是因为懒的写。于是直接实验了一下对象适配器BufferToQueueAdapter类将Buffer實例适配为了Queue实例,即将Buffer实例的BackIn适配为了Queue的InBuffer实例的FrontOut适配为了Queue的Out,getCount和getCapacity就直接映射创建时传递的Buffer实例会托管给适配器实例,在适配器被销毀时其会负责销毁适配者当然会增加一点开销,但是用起来就更得心应手了

本例可以视作在适配器模式在C语言中的一个示例,可能后媔出一个博客专门讲解一下现在就直接拿着用就好。

编程约定同第一篇不再说明。

由于直接适配的类很少,所以相对Buffer系列来说文件也很少。

 (3)空出一个元素空间约定队头在隊尾指针下一位置即队列满

 //若语句1放置此处位置,输出出现错误为地址? 可能与%运算有关虽然rear输出为数值,但是可能并不是一个数值
 count++;//解决方案:arr[rear]是当前要添加的元素,语句2使rear都加一了。rear不是之前的数值了。。当然错了。好像是傻。。
 

我要回帖

更多关于 环形队列 的文章

 

随机推荐