循环链表和迭代器

时间:2014-04-03 14:26:45

标签: algorithm linked-list iterator circular-list

我的数据结构算法类中有一个问题。

  

对于以下哪个表示,可以在恒定的最坏情况时间内执行所有基本队列操作?

要为循环链表执行恒定的最坏情况时间,我应该在哪里保留迭代器?

他们有两个选择:

  1. 维护与列表中第一项对应的迭代器
  2. 维护与列表中最后一项对应的迭代器。
  3. 我的回答是,为了得到最坏的情况,我们应该保持与列表中最后一项对应的迭代器,但我不知道如何证明和解释。那么这个答案理由需要什么重要的一点。

1 个答案:

答案 0 :(得分:0)

  

对于以下哪个表示,可以在恒定的最坏情况时间内执行所有基本队列操作?

     

我的回答是,为了得到最坏的情况,我们应该维护与最后一项对应的迭代器

假设您的循环列表是单链接的,并且循环列表中的“最后一项”是最新插入的那个,您的答案是正确的 * 。为了证明你是对的,你需要演示如何在恒定时间内执行这四个操作:

  1. 获取前元素 - 由于队列是循环的,并且您有一个指向最新插入元素的迭代器,因此最新插入的下一个元素是前面元素(即最早插入的元素)。
  2. 获取后退元素 - 由于您维护一个指向最新插入元素的迭代器,因此获取队列的后面是取消引用迭代器的问题。
  3. 入队 - 这是在您持有的迭代器之后插入,并将迭代器移动到新插入的项目。
  4. Dequeue - 将前面元素的内容(在#1中描述)复制到一个临时变量中,将最新插入元素的下一个链接重新指向前面元素的下一个链接,然后删除前面的元素。
  5. 由于这些操作都不需要迭代列表,因此所有这些操作都可以在恒定时间内执行。

    * 使用双向链接循环列表,两个答案都是正确的。