当前位置: 首页 > 知识库问答 >
问题:

使用动态数组的循环队列

太叔英锐
2023-03-14

我正在从Sahni的“C语言数据结构基础”中学习数据结构。在使用动态数组的循环队列中,作者提到了以下几点,

假设capacity是循环队列的初始容量,我们必须首先使用realloc增加数组的大小,这将把最大容量元素复制到新的数组中。为了获得正确的循环队列配置,我们必须将右段中的元素(即元素a和B)滑动到数组的右端(参见图3.7.d)。数组加倍和向右滑动一起最多复制2*容量-2个元素。

共有1个答案

盛跃
2023-03-14

让我们试着证明最坏的情况是正确的:

对于容量=n的队列,队列中最多存在n-1个元素

因此,当我们将队列大小增加一倍时,我们需要将所有这些N-1个元素复制到新队列中,并且最多可以有N-1个移位(对于元素)。

 类似资料:
  • 假设我有一个大小为[10]的数组,当该数组被填满时,我想实现一个FIFO结构,而不是它只是填满了,因此无法向数组中添加新的东西,并抛出旧的东西。 例如,如果我有一个包含汽车制造商的字符串数组,当我的数组中有10个制造商时,我希望删除最旧的条目,添加最新的条目,但要考虑kepping FIFO。我如何在这样的方法中实现它:

  • 我有一个用于队列的迭代器类(实现为循环数组)。我在下面附上代码。问题出在++运算符上。一旦它到达数组的末尾,它就会回到它的开始,因此迭代器会指向第一个元素。它工作得很好,但我没有办法使用这种方法实现then end()迭代器。在队列类中返回begin()和end()迭代器的函数可以在底部看到。end()迭代器应该指向队列的后部,但是当数组已满且后部等于数组的大小时,++运算符将循环返回,而不是让它

  • 输入一个整数序列:a1,a2,a3,…,an,进行入队或出队操作。用数组Q[m](最多能放m个元素,本题设m=9)表示队列,并且设一个标志tag,以tag0和tag1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写相应的入队和出队等算法,并完成以下任务:对输入的ai,当ai>0时,将ai入队,若入队时队满则发生上溢“OVERFLOW”;当ai=0时,队

  • 问题内容: 我有想要应用于多个表的代码,而不是简单地复制和替换表名,而是想使用某种循环或游标来简化代码。 我设想设置一个表名数组,并使用索引遍历该列表,检索每个表名,并在适用于我的代码的情况下使用动态SQL散布表名。 据我所知,由于在SQL中没有“数组”构造,因此我不确定这将如何工作。 关于如何解决这个问题的任何想法? 问题答案: 这是一种实现方法:

  • 我使用了初始的前置和后置条目为0,因为最初在队列中,任何先进入的条目也将成为最后一个条目。然而,我的老师说我应该保持后面的条目为'-1',当插入一个元素到队列中时,首先增加后面的条目索引,然后添加,反对我的代码先添加后增加。我在网上查了一下,直到现在我也不知道我怎么错了。 如果我错了或者我的老师错了,请给我提供信息?

  • 问题内容: 当实现像队列这样的FIFO时,我的教练总是建议我们将其表示为圆形数组,而不是常规数组。为什么? 是因为在后者中,我们最终将在数组中包含垃圾数据吗? 问题答案: 如果您使用固定数量的Array-Slots / Elements,则以循环方式回收插槽比较容易,因为您不需要重新排列Elements的顺序。每当第一个Element以类似Array的方式移除时,您都必须将剩余的Elements向