c ++实现组合队列/堆栈

对于我最近的家庭作业,我应该实现一个“嘎嘎”,它是循环队列和堆栈的组合。 现在,我试图围绕前两个函数,pushFront和pushBack。 这是他们如何工作的一个例子。

pushFront(a)[a -----]

pushFront(b)[a ---- b]

相反,如果首先调用pushBack,则需要将该项目放置在数组的第一个元素中,然后再移回。

pushBack(a)[a -----]

pushBack(b)[ab ----]

这是我困惑的地方:

1.)使用模算术将项目[0]的前端包装到项目[max -1]中。 我能想到的唯一解决方案是创建一个if语句,当达到[0]时,将前移到[max-1]。

2.)为了使pushBack函数将值放入项目[0]中,它必须从项目[max-1]开始(然后在放置项目之前“向后移动”)。 问题是,如果首先调用pushFront,那么该位置已经有一个项目。

3.)我想过使用一段时间(item [back]!= null)来移动它,但我稍后编写的pop函数似乎并不真正从数组中移除项目。 相反,他们只是移动前后位置,实际上是缩短了嘎嘎。 感谢您的支持,如果您想查看代码,请随时告诉我。 因为我的问题更具概念性,所以我认为这可能是解决问题的最佳方式。


你的模式有点令人困惑。 我从你的解释中了解到,你有一个固定大小的max元素bufer,并且你必须在前面和后面添加元素。

为了在这样的循环缓冲区中执行此操作,您需要知道哪个是第一个活动元素,哪个是最后一个。 所以你必须跟踪两个指标: startend 。 难点在于连续的活动元素可以跨越缓冲区的边界(即起始元素的索引高于结束元素的索引。

empty: 
+----+----+----+----+
!    !    !    !    !     start=0, end=0
---------------------
pushback(a):  
+----+----+----+----+
! a  !    !    !    !     start=0, end=1
---------------------
pushback(b):
+----+----+----+----+
! a  !  b !    !    !     start=0, end=2
---------------------
pushfront(c):
+----+----+----+----+
! a  !  b !    ! c  !     start=max-1, end=2
---------------------

after a log of push and pop front and back :
+----+----+----+----+
!    !  x ! y  ! z  !     start=1, end=0
---------------------

1)为了优雅地规避这些情况,modmodo算法有助于:

(end + 1) % max效果在end+1 ,如果它小于max0 ,如果它是恰好max 。 模运算符%对于管理一种循环算法是非常实用的。

2)考虑到这种观点,你的推回是(伪代码):

check that buffer is not full 
add the element at end index and increment the index as explained in 1.  

前沿是相似的,你必须在开始或开始之前添加一个元素(取决于结构是empy还是已经有元素)并且减少开始(因此提示:使用无符号整数类型,例如size_t您的索引为了能够从0递减时使用模数)。

事实上,你也有堆叠操作,这意味着你

3)考虑到这个逻辑,3应该不再是一个问题。

4)但是你需要考虑一个悬而未决的问题:

当遵循这个逻辑时,开始时你已经结束了==开始,都是0.当你的结构将满时,结束==再次开始,所以你必须考虑如何处理这个。 做出改变的最简单方法是保留元素的数量。


我相信功能pushFront应该推动下一个字符到列表的前面。 所以不是

pushFront(a)[a -----]

pushFront(b)[a ---- b]

你应该得到,

pushFront(a)[a -----]

pushFront(b)[ba ----]

pushFront(c)[cba ---]

pushBack(d)[cbad--]

无论哪种方式,你不应该需要使用模数运算符,直到你需要找到正面和背面。

链接地址: http://www.djcxy.com/p/79865.html

上一篇: c++ Implementation of a combined queue/stack

下一篇: stack and queue