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

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

问题描述:

我的教授向我提供了一个名为CursorList.cpp的文件,它实现了“光标链接列表”。问题是 - 我不知道甚至是什么!什么是光标链接列表? [C++]

有人能给我它的要点吗?

谢谢!

+0

尤瓦,你应该通过看到的接口开始文件已经暴露。也就是说,阅读它,查看哪些公共方法,如何使用它们等等。从名称看,它似乎非常确定它实现了链接列表数据结构,即可以插入,删除,遍历的链接列表数据结构, 之类的东西。测试一下。 – 2010-04-07 03:27:51

this,这里是一个指针链表的一些背景:

  • 某些语言不支持指针对象
  • 使用数组来代替
  • 开始有空闲列表
  • 从分配空间空闲列表需要时
  • 删除:更改指针,添加到空闲列表

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

+0

仍然不是很清楚它们是什么。那么我能否扩展我的问题并询问在这种情况下使用的是什么清单?谢谢! – 2010-04-07 01:59:09

+1

http://en.wikipedia.org/wiki/Linked_list – stefanB 2010-04-07 02:06:52

我的猜测是它是一个linked list另外保留一个指向“current”元素的指针,例如用于遍历列表。

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

+0

即与我此ADT^H^H^H ^对象类型的回味同意 - 列表+当前位置 - 回到我的数据结构类(80年代,唉)之前,该单词被“偷”为(仅)和SQL结果集缓冲区 – Roboprog 2012-11-20 17:54:41

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的repsonse中提到)进来的地方。Freelist包含了阵列中仍然有空的索引。所以在创建CursorList之后,Freelist有0-9。当listNode对象被分配给数组的元素时,Freelist将删除这些索引。当一个数字被删除(例如上面的例子5)时,索引被添加回Freelist。如果我们想为CursorList添加一个数字,我们只需更新适当元素的next索引。

在游标实现中,我们自己构建存储池 ,将未使用的节点存储在存储在数组中的 链接列表中。

在C和C++,存储池是由一组由语言提供 库函数来管理。 在开始执行时,存储的适当大的池是从操作系统获取 。 当程序需要一个新的节点,从 池由语言库函数获得的存储。 如果存储空间不足是在池中可用,库请求从操作系统 额外的池空间。 当存储由程序,语言库函数 它返回到存储池释放。 光标执行,通常会在系统中作为一个数组获得固定 的存储量,并 提供类似于新的功能和删除的 应用程序使用