Java:如何将堆栈的伪代码转换为数组

时间:2012-11-08 16:23:57

标签: java arrays directed-graph

如何将以下伪代码转换为数组而不是堆栈。该算法旨在构造给定某个输入的有向图:

  1. 从右到左扫描公式,在堆栈上调用符号,直到顶部出现2个连续的节点符号。
  2. 弹出这两个节点符号,并在堆栈的正下方弹出'*'。从第一个符号到第二个符号绘制一条边。
  3. 按下堆栈上的第一个符号。
  4. 继续执行步骤1-3,直到处理完公式。
  5. 以下是输入和输出示例:

    输入:

    ***ABCD
    

    输出:

    *AB, *AC, *AD
    

    '*'表示边缘

    所有输入都将使用扫描仪完成。

2 个答案:

答案 0 :(得分:2)

可以使用数组和“堆栈索引”的索引来建模有限大小的堆栈。

-1处启动堆栈索引。在推送操作上,递增堆栈索引,并将值存储在数组的相应索引处。在弹出操作中,使用堆栈索引处的值,并在获取值后递减索引。要访问堆栈顶部,请读取堆栈索引处的项目。

答案 1 :(得分:1)

您基本上可以使用FIFO专有权对阵列执行操作。

public ArrayStack( )
{
        theArray = new String[InitialSize];
        topOfStack = -1;
}

有时候你向数组中添加一个元素(推送),你执行topOfStack++;并将此元素插入数组中的"topOfStack"位置。通过执行topOfStack++,您将保持位置(在数组上)成为堆栈的新顶部。

弹出时,必须检查数组是否为空,并返回array[topOfStack]上的元素并执行topOfStack--;。因为top现在是数组上的前一个位置。

如果您的阵列需要更多空间,因为堆栈已满(topOfStack == InitialSize),您必须创建另一个具有更多空间的数组,例如:

private void doubleArray( )
{
        String [ ] newArray;

        newArray = new String[ theArray.length * 2 ];
        for( int i = 0; i < theArray.length; i++ )
            newArray[ i ] = theArray[ i ];
        theArray = newArray;

}

尝试将其设为自己,您可以检查this以检查数组/堆栈实现。