如何在ti-basic中实现低记忆堆栈

时间:2017-04-16 01:58:28

标签: stack calculator ti-basic

所以我正在使用递归回溯创建迷宫生成算法。我使用矩阵跟踪我在堆栈中访问的点。该矩阵有两列,一列用于x坐标,一列用于y坐标。问题是,我的程序适用于小型迷宫,但对于更大的迷宫,我的计算器会耗尽内存。我想知道是否有更少的内存密集型方法来实现堆栈。我正在考虑使用字符串作为一种可行的方法。我顺便使用了ti-84 CSE。

1 个答案:

答案 0 :(得分:3)

您的堆栈可能应该使用列表来实现。我将使用L1进行演示。堆栈是后进先出的数据结构。 可以使用

访问列表元素
L1(X)

其中X是您想要的项目。这意味着首先必须转到L1(1)(列表的开头;第1项),然后转出,并且首先必须从列表中的最后一项出来。要查找列表中有多少项(因此找出第N项是最后一项),请使用

dim(L1)

这将给出一些项目的数量。我们可以使用它来始终访问列表中的最后一项,而不是将其存储到变量中。用这个:

L1(dim(L1))->M
//this addresses the item of L1 at dim(L1), meaning the last item

现在M将拥有最后一项的值。这是第一部分。然后,为了销毁最后一个项目(因为你将其弹出),请执行以下操作:

dim(L1)-1->dim(L1)

所以把它们放在一起,你的“pop”代码将是:

If dim(L1)>0
Then
// It checks if L1 has an element to pop off in the first place
L1(dim(L1))->M
dim(L1)-1->dim(L1)
End

现在,M将拥有最后一项的值,并且最后一项被销毁。现在,进入推送代码。要推送,您必须将您的号码放入比旧的最后一个号码更高的新插槽中。从本质上讲,你必须制作一个新的最后一个项目。幸运的是,这在TI-Basic中非常容易。你的“推送”代码是:

If dim(L1)<99
// It checks if L1 has less than the maximum number of elements,
// which is 99.
M->L1(dim(L1)+1)

如果您要在堆栈中存储X / Y坐标,我建议使用以下格式:

X + .01Y -> M
//X=3, Y = 15
// This would make M be 3.15

将它们分成两个单独的坐标:

int(M)->X
// The integer value of M is 3, which is what X was earlier
100*fPart(M)->Y
// The fraction part of M was .15. Multiply that by 100 to get 15,
// which is what Y was earlier