什么是游标链接列表? [C ++]

时间:2010-04-07 01:53:24

标签: c++ data-structures linked-list

我的教授为我提供了一个名为CursorList.cpp的文件,它实现了一个“Cursor Linked List”。问题是 - 我不知道那是什么!

有人可以给我一把关于它的要点吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

根据this,这里有一个关于游标链表的背景知识:

  • 某些语言不支持指针
  • 使用对象数组
  • 以Freelist开头
  • 在需要时从空闲列表中分配空间
  • 删除:更改指针,添加到Freelist

所以基本上是一个不使用指针实现的链表。也许这个实现应该“更容易”理解?

答案 1 :(得分:1)

我的猜测是它是linked list另外保留指向“当前”元素的指针,例如用于迭代列表。

如果你想确定你的教授究竟是什么意思,请查看.cpp文件并找出那里实施的内容。

答案 2 :(得分:1)

CursorList是链接列表的数组版本。实质上,您有一个列表节点数组,但是每个节点都包含指向链表中下一个项的指针,而数组中的每个节点元素都包含下一个节点元素的索引。例如,如果我们想将5, 3, 2, 11, 9存储在链接列表中,我们就会5 -> 3 -> 2 -> 11 -> 9 -> NULL。插入不是问题,因为我们只是将最后一个指针更改为指向插入的节点并使插入的节点指向NULL。删除是一样的,我们只是重新调整指针。但是,必须始终为新节点动态分配(使用malloc或new)内存可能会有问题。

如果我们要存储在CursorList中,我们首先声明数组的最大大小,然后填充它。所以我们说listNode cursorList[10]我们声明一个listNode对象,如下所示:

class listNode {
    public:
        listNode() {
            data = -1;
            next = NULL;
        }
        listNode(int inputData, &listNode inputNext) {
            data = inputData;
            next = inputNext;
        }
    private:
        int data;
        listNode* next;
};

所以在使用listNode对象填充数组后,我们将看到如下内容:CursorList after insertions

现在,如果我们要删除5,我们所要做的就是更新next索引。所以我们留下了这个:CursorList with 5 removed

出现了一个问题,我们如何知道将5 next索引设置为什么?好吧,Freelist(在@Justin Ethier' s repsonse中提到)进来了.Preelist包含阵列中仍然可用的索引。因此,在创建CursorList时,空闲列表具有0-9。当listNode对象被分配给数组的元素时,空闲列表将删除这些索引。删除一个数字时(例如上面5中的示例),索引将被添加回空闲列表。如果我们想在CursorList中添加一个数字,我们只需更新相应元素的next索引。

答案 3 :(得分:0)

在游标实现中,我们构建存储 汇集我们自己,将未使用的节点存储在一个 存储在数组中的链表。

在C和C ++中,存储池由一组管理 语言提供的库函数。 在执行开始时,存储适当大的存储池 从操作系统获得。 当程序请求新节点时,从中获取存储 通过语言库函数池。 如果池中的存储空间不足,则库请求 来自操作系统的额外池空间。 当程序释放存储时,语言库函数 将其返回到存储池。 游标实现通常会获得固定的 作为数组从系统存储的数量,和 提供类似于new和delete的功能 应用程序使用