language-agnostic - 使用栈实现数组

标签 language-agnostic arrays stack

我的编程语言没有数组、列表、指针、eval 和可变变量。它拥有的一切:

  • 您从大多数编程语言中了解到的普通变量:它们都有确切的名称和值。

  • 一个堆栈。提供的函数有:push(向栈顶添加元素)、pop(从栈顶移除元素、获取值)和empty(检查栈是否为空)

我的语言是图灵完备的。 (实现了基本算术、条件跳转等)这意味着,一定可以实现某种列表或数组,对吧?

但我不知道如何...

我想要实现的目标:创建一个可以检索和/或更改堆栈的元素 x 的函数。

我可以很容易地将这个函数添加到我的语言的实现中,在解释器中,但我想用我的编程语言来实现。

  • “解决方案”一(访问一个元素x,从栈顶开始计数)

创建一个循环。从栈顶弹出元素 x 次。弹出的最后一个元素是元素号 x。我最终得到了一个被破坏的堆栈。

  • 解决方案二:

与上面的操作相同,但将所有弹出的值存储在第二个 堆栈中。然后你可以在完成后将所有元素移回。但你知道吗?我没有第二个堆栈!

最佳答案

听起来像是一道家庭作业题,因为它涉及计算机科学的随机部分...

我认为您会希望使用递归来执行此操作。假设我有这样的东西..

Queue globalQueue = new Queue();

然后我可以得到像这样获取元素 X 的代码

public Object findElement(stepsToTake s) {

    if (queue.empty()) {
        throw new EmptyQueueYouFailException();
    }

    Object o = queue.pop();


   if (s == 0) {
        queue.push(o);
        return o;
    }

    Object actualResult = findElement( s - 1 );
    //restore this element to the stack
    queue.push(o);
    //return actual result
    return actualResult;
}

所以很有可能是我犯了一些错误……还没有想好。特别担心我会因为我的调用顺序而重新排序堆栈..

希望这能让您沿着正确的路线思考以获得解决方案?

关于language-agnostic - 使用栈实现数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2754000/

相关文章:

javascript - 将数组中的字符串组合到一定长度

java - 每个线程都有一个堆栈空间吗?

c - 协助使用C代码和汇编代码绘制堆栈

language-agnostic - 网络编程 - 学习途径是什么?

security - 为系统定义安全策略

javascript - 如何将对象与表行关联起来?

arrays - 使用右移按位运算符生成列表中的所有唯一项

c - Arduino StackArray 不是全局的

design-patterns - 工厂方法可以返回多个实例吗?

language-agnostic - 硬编码文字是否可以接受?