【发布时间】:2019-04-14 13:42:53
【问题描述】:
我正在尝试编写一个程序,用于弹出并添加堆栈中的前 2 个项目。该程序有一个Pop 方法,但我想知道如何在Add 方法中调用该方法。这个Add 应该弹出堆栈中的顶部两个项目,获取它们的总和,然后将该总和推送到堆栈中。在下面的代码中,我在Add 方法内调用了两次Pop 方法,但是当我显示堆栈时,堆栈仍然具有所有原始值。我还需要做些什么才能让Pop 方法起作用吗?
class StackEmptyException : ApplicationException
{
public StackEmptyException(String message) : base(message)
{
}
}
class MathStack
{
private int[] dataStack;
private int size;
private int top = -1;
public bool IsEmpty()
{
return top == -1;
}
public bool IsFull()
{
return top == size - 1;
}
public void Push(int i)
{
dataStack[++top] = i;
}
public int Pop()
{
if (IsEmpty())
throw new StackEmptyException
("Stack empty -- cannot pop");
else
return dataStack[top--];
}
public int Top()
{
if (IsEmpty())
throw new StackEmptyException
("Stack empty -- top undefined");
else
return dataStack[top];
}
public MathStack()
{
dataStack = new int[10];
}
public MathStack(int s)
{
size = 10;
dataStack = new int[size];
}
public void LoadStack(int v)
{
dataStack[++top] = v;
}
public void Display()
{
int[] display = new int[dataStack.Length];
for (int i = 0; i < dataStack.Length; i++)
{
display[i] = dataStack[i];
Console.WriteLine("{0}", display[i]);
}
}
public void Add()
{
int add1 = dataStack[0];
int add2 = dataStack[1];
Pop();
Pop();
int sum = add1 + add2;
Console.WriteLine("Sum: {0}", sum);
}
}
class Program
{
static void Main(string[] args)
{
MathStack stack1 = new MathStack();
stack1.Push(9);
stack1.Push(8);
stack1.Push(7);
stack1.Push(6);
stack1.Push(5);
stack1.Push(4);
stack1.Push(3);
stack1.Push(2);
stack1.Push(1);
stack1.Push(0);
stack1.Display();
stack1.Add();
stack1.Display();
Console.ReadLine();
}
}
【问题讨论】:
-
@KevinGosse 对于
dataStack.top似乎无效的特定语法? -
您的
Add方法将推入堆栈的前两项相加,而不是最后两项。这是故意的吗?在您的示例中,您希望求和 9+8 还是 1+0? -
你的任务是write
Stack类吗?请注意,与大多数其他语言一样,C# 已经有了一个。为什么Add表现得像一个队列?您正在抓取堆栈中的第一个元素,而不是顶部的元素,弹出的元素不是您要添加的元素。 -
另外,您的
Pop方法不是问题,是Display方法。
标签: c# methods data-structures stack