1 public class MyStack
2 {
3 //用于存放栈元素
4 private object[] _array;
5 //默认的栈容量
6 private const int _defaultCapactity = 10;
7 private int _size;
8
9
10 public MyStack()
11 {
12 this._array=new object[_defaultCapactity];
13 this._size = 0;
14 }
15
16 public MyStack(int initalCapacity)
17 {
18 if (initalCapacity<0)
19 {
20 throw new ArgumentOutOfRangeException("initalCapacity","栈空间容量不可为负");
21 }
22 if (initalCapacity<_defaultCapactity)
23 {
24 initalCapacity = _defaultCapactity;
25 }
26 this._array=new object[initalCapacity];//分配栈空间
27 this._size = 0;
28 }
29
30 //出栈
31 public virtual object Pop()
32 {
33 if (this._size==0)
34 {
35 throw new InvalidOperationException("栈下溢");
36 }
37 object obj = this._array[--this._size];
38 this._array[this._size] = null;
39 return obj;
40 }
41
42 //进栈
43 public virtual void Push(object obj)
44 {
45 if (this._size==this._array.Length)
46 {
47 //栈扩容
48 object[] dest=new object[2*this._array.Length];
49 Array.Copy(this._array, 0, dest, 0, this._size);
50 this._array = dest;
51 }
52 this._array[this._size++] = obj;
53 }
54
55 public virtual int Count
56 {
57 get { return this._size;}
58 }
59
60 //获得栈顶元素
61 public virtual object Peek()
62 {
63 object obj = this._array[this._size];
64 return obj;
65 }
66 }