using System;
namespace DataStructure
{
public class MyStack<T>
{
private T[] _array;
private int _size;
public MyStack(int size)
{
_array = new T[size];
_size = 0;
}
public MyStack()
{
_array = new T[4];
_size = 0;
}
public int Count
{
get { return _size; }
}
public bool IsEmpty()
{
return Count == 0;
}
public void Clear()
{
_size = 0;
}
public void Push(T item)
{
//這裏判斷stack的長度與內部數組的長度是否相等,如果相等就對它的長度進行擴展
if (this._size == this._array.Length)
{
T[] objArray = new T[this._array.Length == 0 ? 4 : 2 * this._array.Length];
Array.Copy(this._array, 0, objArray, 0, this._size);
this._array = objArray;
}
_array[_size] = item;
_size++;
}
public T Pop()
{
T temp = _array[_size - 1];
_size--;
return temp;
}
public T Peek()
{
return _array[_size - 1];
}
public override string ToString()
{
var str = "";
for (var i = 0; i < Count; i++)
{
str += _array[i].ToString() + " ";
}
return str;
}
}
}
代碼十分簡單,C#中的Stack源碼中內部也是用的數組,實現上訴幾個方法的思路是一樣的。