以栈为例,之前是增加一个元素就要重新new一个比原来大1的数组出来替换原始数组。
public void Push(T item)
{
int size = Size();
T[] newarray = new T[size + 1];
for (int i = 0; i < size; i++)
{
newarray[i] = array[i];
}
newarray[size] = item;
this.array = newarray;
}
将stack类进行修改优化,减少了重复定义的次数,提高了入栈出栈效率
public class My_Stack<T>
{
public My_Stack()
{
Max_Capacity = 8;
array = new T[Max_Capacity];
actual_size = 0;
}
private T[] array;
private int Max_Capacity;
private int actual_size;
/// <summary>
/// 入栈
/// </summary>
/// <param name="item"></param>
public void Push(T item)
{
if (actual_size > Max_Capacity / 2)
{
//翻倍
Max_Capacity *= 2;
T[] newarray = new T[Max_Capacity];
for (int i = 0; i < actual_size; i++)
{
newarray[i] = array[i];
}
newarray[actual_size] = item;
this.array = newarray;
}
else
{
array[actual_size] = item;
}
actual_size += 1;
}
/// <summary>
/// 出栈
/// </summary>
/// <param name="item"></param>
public T Back()
{
if (Size() == 0)
{
Console.WriteLine("未添加元素");
return default(T);
}
else
{
T num = array[actual_size - 1];
array[actual_size - 1] = default(T);
actual_size -= 1;
return num;
}
}
/// <summary>
/// 删除后进的一个元素
/// </summary>
public void Pop()
{
if (Size() == 0)
{
Console.WriteLine("未添加元素");
}
else
{
array[actual_size - 1] = default(T);
actual_size -= 1;
}
}
/// <summary>
/// 判断是否为空
/// </summary>
/// <returns></returns>
public bool Isempty()
{
if (actual_size == 0)
{
return true;
}
else
{
return false;
}
}
/// <summary>
/// 获取大小的方法
/// </summary>
/// <returns></returns>
public int Size()
{
if (array == null)
{
return 0;
}
else
{
return actual_size;
}
}
/// <summary>
/// 获取队列长度的属性
/// </summary>
public int Length
{
get
{
return Size();
}
}
/// <summary>
/// 理论最大容量
/// </summary>
public int MaxCapacity
{
get
{
return Max_Capacity;
}
}
}