如何将以下伪代码转换为数组而不是堆栈。该算法旨在构造给定某个输入的有向图:
以下是输入和输出示例:
输入:
***ABCD
输出:
*AB, *AC, *AD
'*'表示边缘
所有输入都将使用扫描仪完成。
答案 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以检查数组/堆栈实现。