如何将0项压入int的堆栈
本文关键字:int 堆栈 0项 | 更新日期: 2023-09-27 18:14:57
我有一个简单的堆栈实现。但是我不知道程序员是如何解决以下问题的:不可能把0推到堆栈上。怎么做呢?我的意思是如何跟踪它是一个0
值还是仅仅是堆栈的末尾?或者在我的实现中没有问题?
public class Stack: IStack
{
private int[] s;
private int N = 0;
public Stack(int N)
{
s = new int[N];
}
public void push(int x)
{
s[N++] = x;
if (N >= s.Length)
{
Array.Resize(ref s, s.Length*2);
}
}
public int pop()
{
s[N] = 0;
return s[--N];
}
}
您已经使用N
(或者更确切地说,N - 1
)跟踪堆栈的最后一个元素。您不需要验证元素是否为0
,并且您的实现实际上不区分零和其他数字。
在您提供的实现中,完全可以将0
压入堆栈。
pop()
方法:
public int? pop()
{
if (N != 0)
{
return s[--N];
}
else
{
return null;
}
}
这样,如果堆栈为空,它返回null
。
您应该意识到S[N], S[N+1], ...
的值是什么并不重要,因为您只使用S[0..N-1]
的值来实现。您将部分S[N...]
视为未初始化的,并且添加一个新元素,甚至是0
,都会导致S[N]
被初始化为新值。
你可以按0,没有什么可以阻止它。N
等于元素数,它也用于跟踪下一项的索引来推送N == (index of last element + 1)
。我看到的问题是,如果你运行pop()太多次,你会得到IndexOutOfRangeException
。
你可以这样添加IsEmpty属性:
public bool IsEmpty
{
get { return N < 1; }
}