什么是光标链接列表? [C++]
我的猜测是它是一个linked list另外保留一个指向“current”元素的指针,例如用于遍历列表。
如果你想确定你的教授究竟是什么意思,看看.cpp文件,找出那里实施的东西。
即与我此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对象,我们将有一些看起来像这样经过:
我们要做的就是更新next
索引。所以我们留下了这个:
一个问题出现了,我们怎么知道该怎么设置5的next
索引?那么这就是Freelist(在@Justin Ethier的repsonse中提到)进来的地方。Freelist包含了阵列中仍然有空的索引。所以在创建CursorList之后,Freelist有0-9。当listNode对象被分配给数组的元素时,Freelist将删除这些索引。当一个数字被删除(例如上面的例子5)时,索引被添加回Freelist。如果我们想为CursorList添加一个数字,我们只需更新适当元素的next
索引。
在游标实现中,我们自己构建存储池 ,将未使用的节点存储在存储在数组中的 链接列表中。
在C和C++,存储池是由一组由语言提供 库函数来管理。 在开始执行时,存储的适当大的池是从操作系统获取 。 当程序需要一个新的节点,从 池由语言库函数获得的存储。 如果存储空间不足是在池中可用,库请求从操作系统 额外的池空间。 当存储由程序,语言库函数 它返回到存储池释放。 光标执行,通常会在系统中作为一个数组获得固定 的存储量,并 提供类似于新的功能和删除的 应用程序使用
尤瓦,你应该通过看到的接口开始文件已经暴露。也就是说,阅读它,查看哪些公共方法,如何使用它们等等。从名称看,它似乎非常确定它实现了链接列表数据结构,即可以插入,删除,遍历的链接列表数据结构, 之类的东西。测试一下。 – 2010-04-07 03:27:51