大家好,我正在用C语言编写rpn计算器,我想把rpn表达式编译成字节码。但我不确定表示它们的数据结构是什么?到目前为止我的堆栈数据结构是
struct stack_t{
int type;
union {
double val;
char *str;
/* probably some more */
}u;
};
为了学校的一个项目,我正在做一个RPN计算器。这个计算器有一个抽象类堆栈,其中三个不同的堆栈实现派生自。其中之一是链表堆栈。对于这些堆栈,我必须显示堆栈上的值。为此,我使用了一个数组。对于我的arraystack和list栈来说,这很容易,但我不知道如何将链表转换为数组。做到这一点的最好方法是什么?
这是我在链表中使用的代码。
public class Node
{
public int data;
public Node next;
public Node(int i)
{
data = i;
next = null;
我有一个作业,我应该使用这个非常简单(或者我是这么想的)堆栈,这是我的老师用C语言写的,只是使用了一个数组。因此,我必须从文本文件中实现反向波兰语表示法。
为了实现这一点,我使用了一个堆栈,将值推入,直到我遇到一个操作。然后,我执行该操作并将结果推回到堆栈上,直到用户点击p以打印值。
问题是,由于某些原因,我的教授的堆栈数组实现将第一个(索引0)值默认为0。打印堆栈而不将任何内容推送到堆栈上应该会产生null,但输出似乎是0。
下面是我的教授对堆栈的实现:
#define STK_MAX 1024
#define ELE int
ELE _stk[STK_MAX];
int _top = 0
我真的很有兴趣成为精通Clojure/Clojurescript的web应用程序。现在,我正在制作简单的命令行应用程序,以获得对该语言的感觉。
但是,现在很难理解如何在没有可变变量的语言中完成任务。
我的问题是:我正在制作一个小的计算器,在这个计算器中,用户可以输入数字以添加到堆栈中,还可以对堆栈执行数学操作:
> ;adding to stack
> 4 4
> ; print the stack
> [4, 4]
> 2 3
> p
> [4 4 2 3]
> ; adding the top two items to the stack
&
我开始学习ocaml,并且真正体会到了递归在语言中的威力。然而,我担心的一件事是堆栈溢出。
如果ocaml使用堆栈进行函数调用,它最终不会溢出堆栈吗?例如,如果我有以下函数:
let rec sum x =
if x > 1 then f(x - 1) + x
else x;;
它最终一定会导致堆栈溢出。如果我在c++中做同样的事情(使用递归),我知道它会溢出。
所以我的问题是,有没有内置的保护措施来防止函数式语言溢出堆栈?如果不是,它们是不是像这样不太有用,因为上面的求和算法是用for循环的过程化风格编写的,可以处理任何数字(与整数溢出无关)?
我正在创建一个面向堆栈的虚拟机,因此我开始学习Forth,以了解它的工作原理。然后,我列出了我需要在虚拟机中实现的基本堆栈操作操作:
drop ( a -- )
dup ( a -- a a )
swap ( a b -- b a )
rot ( a b c -- b c a )
我相信以下四个堆栈操作操作可以用来模拟任何其他堆栈操作操作。例如:
nip ( a b -- b ) swap drop
-rot ( a b c -- c a b ) rot rot
tuck ( a b -- b a b ) dup -rot
over ( a b -- a b a )