如何在 ti-basic 中实现低内存堆栈
How to implement a low-momory stack in ti-basic
所以我正在创建一个使用递归回溯的迷宫生成算法。我使用矩阵跟踪我在堆栈中访问的点。该矩阵有两列,一列用于 x 坐标,一列用于 y 坐标。问题是,我的程序适用于小迷宫,但对于更大的迷宫,我的计算器内存不足。我想知道是否有一种内存密集度较低的方法来实现堆栈。我正在考虑使用字符串作为一种可能的方式来做到这一点。顺便说一句,我使用 ti-84 CSE。
您的堆栈可能应该使用列表来实现。我将使用 L1 进行演示。栈是一种后进先出的数据结构。
可以使用
访问列表元素
L1(X)
其中 X 是您想要的项目。这意味着先入必须转到 L1(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 中非常容易。您的 "push" 代码将是:
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
所以我正在创建一个使用递归回溯的迷宫生成算法。我使用矩阵跟踪我在堆栈中访问的点。该矩阵有两列,一列用于 x 坐标,一列用于 y 坐标。问题是,我的程序适用于小迷宫,但对于更大的迷宫,我的计算器内存不足。我想知道是否有一种内存密集度较低的方法来实现堆栈。我正在考虑使用字符串作为一种可能的方式来做到这一点。顺便说一句,我使用 ti-84 CSE。
您的堆栈可能应该使用列表来实现。我将使用 L1 进行演示。栈是一种后进先出的数据结构。 可以使用
访问列表元素L1(X)
其中 X 是您想要的项目。这意味着先入必须转到 L1(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 中非常容易。您的 "push" 代码将是:
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