我有一个问题,考虑一个刺激堆栈的程序(不使用任何内置的堆栈功能等).
stack2= 1 2 3 4 5 //single dimension array of 5 elements
Run Code Online (Sandbox Code Playgroud)
通过调用该方法pop,堆栈应如下所示,基本上每次重新调用堆栈时都会关闭一个元素.
stack2= 1 2 3 4 0
stack2= 1 2 3 0 0
stack2= 1 2 0 0 0
stack2= 1 0 0 0 0
stack2= 0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
for (int i = 1; i <= 6; i++)
{
number= TryPop(s2);
//use number
ShowStack(s2, "s2");
}
public void Push(int g)
{
if (top == Max)
{
throw new Exception("Stack overflow...");
}
else
{
tabel[top] = g;
top++;
}
}/*Push*/
Run Code Online (Sandbox Code Playgroud)
我已经有了用数字填充我的数组的代码(通过push方法).pop方法应取最后一个值并将其置于0,然后调用下一个堆栈并将以下内容置于0(如上面的stack2中所示).
跟踪顶部索引的当前pop方法(0个元素= 0顶部,1个元素= 1顶部等...)已经包含下溢警告,如果该值为0或更低(这是正确的).
public int Pop()
{
if(top <= 0)
{
throw new Exception("Stack underflow...");
}
else
{
for (int j = tabel.Length - 1; j >= 0; j--)
{
//...Really not sure what to do here.
}
}
return number;
}/*Pop*/
Run Code Online (Sandbox Code Playgroud)
因为在另一个类中我已经有一个循环(for上面显示的循环),模拟s2堆栈的6倍.(第一个堆栈:1 2 3 4 0,第二个堆栈1 2 3 0 0,依此类推.)我每次如何关闭一个元素?我要么将整个显示设置为0,要么将0设置在错误的位置/出于索引错误.
编辑:工作流程方法:
public int Pop()
{
if(top <= 0)
{
throw new Exception("Stack underflow...");
}
top--;
tabel[top] = 0;
number = tabel[top];
return number;
}/*Pop*/
Run Code Online (Sandbox Code Playgroud)
要实现堆栈,您需要一个数组和一个指向堆栈顶部的"指针".
empty _ _ _ _ _
?
Run Code Online (Sandbox Code Playgroud)
在您的代码中,table是数组并且top是指针(作为数组索引).
推
要将项目推送到堆栈,请将项目放在堆栈顶部并将指针前进一个:
push 1 1 _ _ _ _
?
push 2 1 2 _ _ _
?
push 3 1 2 3 _ _
?
Run Code Online (Sandbox Code Playgroud)
这就是你的代码已经做的事情:
table[top] = g; // insert `g` at `top` into `table`
top++; // advance `top` by one
Run Code Online (Sandbox Code Playgroud)
流行的
要弹出一个项目,将指针向后移动一步并返回+删除顶部的项目:
pop 3 1 2 _ _ _
?
pop 2 1 _ _ _ _
?
pop 1 _ _ _ _ _
?
Run Code Online (Sandbox Code Playgroud)
现在尝试将Push解决方案转换为反向,如下所示!
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |