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

以栈为例,之前是增加一个元素就要重新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;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值