Algorithm 实现一个没有指针的高效堆栈?

Algorithm 实现一个没有指针的高效堆栈?,algorithm,pointers,data-structures,stack,Algorithm,Pointers,Data Structures,Stack,所以,我在一个指针不存在(或者至少不可访问)的环境中工作,并且我试图有效地实现堆栈。我有一个堆栈实现在工作,但它是O(n),这当然不如基于指针的堆栈通常的O(1)那么有效。我只是想不出更好的方法来实现这一点 该环境限制的一些重要背景:有一个名为Entity的类的全局实例数组;变量只能存储有符号整数;而且没有使用指针甚至创建新数组的方法。超级有限公司 实体具有(x,y,z)坐标的成员、用于任意数据存储(至少是整数)的字符串到整数的映射以及用于任意字符串存储的字符串列表。环境不提供比较两个字符串的方

所以,我在一个指针不存在(或者至少不可访问)的环境中工作,并且我试图有效地实现堆栈。我有一个堆栈实现在工作,但它是O(n),这当然不如基于指针的堆栈通常的O(1)那么有效。我只是想不出更好的方法来实现这一点

该环境限制的一些重要背景:有一个名为Entity的类的全局实例数组;变量只能存储有符号整数;而且没有使用指针甚至创建新数组的方法。超级有限公司

实体具有(x,y,z)坐标的成员、用于任意数据存储(至少是整数)的字符串到整数的映射以及用于任意字符串存储的字符串列表。环境不提供比较两个字符串的方法,除非将它们与硬编码的值进行比较;环境也不提供比较两个整数的本机方法,除非其中一个是硬编码的;因此,要比较两个变量整数,必须将它们相减,然后比较为0(在这方面非常类似于汇编)

我现在的实现为堆栈中的每个条目向列表中添加了一个新的实体实例,将其值和索引存储在其映射中,并使用键值和索引(我知道,是原始的)。每当将一个值推送到堆栈上时,我就遍历列表并增加每个现有实体的索引,然后创建一个索引为0的新实体。当它弹出时,我遍历列表,找到索引为0的那个,并复制该值;我递减列表中每个非零实体的索引

它工作得很好,但当然,推和弹出都是O(n)。即使我在某处跟踪head索引,找到具有匹配索引的条目的唯一方法是首先从所有条目中减去head索引,这仍然是O(n)


有没有什么方法可以比O(n)更有效地实现这一点,而无需访问指针甚至其他数组?或者这是这些限制所能做到的最好的吗

你用什么语言?为什么指针不可用?@Dai这是一种用于视频游戏的脚本语言;它并不意味着是一种成熟的编程语言,这就是为什么它如此有限的原因,但我总是喜欢在可以做的事情上突破界限,因此,如果可能的话,我会尝试让这项工作发挥作用。如果你在堆栈的末尾而不是开始时创建堆栈的顶部,无论何时执行push或pop操作,都不需要更改任何元素的索引,因此这两个操作都可以在O(1)中完成。虽然您正在使用的确切限制有些不明确。@Dukeling索引不需要更改,但如果没有指针,我如何找到“堆栈的末尾”?我必须遍历所有堆栈元素以找到索引最高的元素,使其再次成为O(n),对吗?或者有没有另一种方法可以在没有指针的情况下找到它?您不能存储一个变量(例如,指示堆栈的大小)以允许您在O(1)中查找映射中的最后一个元素吗?如果我不知道你可以使用的方法的确切细节,我真的无法给出更具体的建议(或者知道这是否有效)。请注意,RAM基本上只是一个数组,指针基本上就是这个数组中的索引,所以如果您只有一个大数组,您可能可以实现类似于RAM的东西来拥有指针。