算法学习(一)背包队列和栈(优化)

以栈为例,之前是增加一个元素就要重新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;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39623521/article/details/84725487