线性表操作二刷总结

 /// <summary>
    /// 数组:线性数据结构,连续的存储空间存储相同数据类型的数据结构
    /// 随机访问性:因为数组是连续的内存空间,所以数组具有随机访问性,随机访问的时间复杂度为O(1)
    /// 数组的插入,删除操作:相比链表,数据的插入删除操作的时间复杂度在最好的情况下为O(1)【对数组的最后面元素进行操作】,在最坏的情况下O(n)【0~n之间的元素进行操作】
    /// 平均时间复杂度为O(n)【计算方式(1+2+3+...+n)/(n)】
    /// 原因:数组需要连续的存储空间,所以每次进行插入删除操作时,为了保证数组空间的连续行,都需要进行数据的搬迁
    /// 为了提高插入操作的效率,在数组中数组没有规律的情况下,不要求规则的情况下,可以把指定插入的数据元素放在数组的末尾,把要插入的数据元素直接插入到指定的位置
    /// 时间复杂度为O(1)
    /// 删除操作:在做删除操作的时候,可以先把要删除的位置标记下来,但是并不做删除,不做数据元素的搬迁,待数组中没有足够的空间时,再做删除操作,搬迁数组数据元素
    /// 数组的越界问题:数组越界是因为访问了数组受限的内存
    /// 数组的动态扩容:在向数组中添加数据元素的时候,数组的内存空间不够,需要扩大数组的内容,然后再将数组中的元素复制到新的数组中
    /// 数组下标访问:首地址+数据类型大小*k
    /// </summary>
    class ArrayTest
    {
        int[] array;
        int last;
        int Maxcount;

        public ArrayTest(int size)
        {
            array = new int[size];
            Maxcount = size;
            last = -1;
        }

        public void Append(int item)
        {
            if (last < Maxcount - 1)
                array[++last] = item;
        }

        public void Insert(int i, int item)
        {
            if (i < 1||last==Maxcount-1||i>last+2)
                return;

            if (i == last + 2)
                array[last + 1] = item;
            else
            {
                int j = 0;
                for (; j < i - 1; ++j)
                {
                    array[j + 1] = array[j];
                }
                array[i - 1] = item;
            }

            ++last;
        }

        public int Delet(int i)
        {
            int temp = array[0];
            if (last==-1)
                return -1;

            if (i < 1 || i > last + 1)
                return -1;

            if (i == last + 1)
            {
                temp = array[last--];
            }
            else
            {
                temp = array[i - 1];
                int j = i;
                for (; j <= last; ++j)
                {
                    array[j] = array[j + 1];
                }
            }

            --last;

            return temp;
        }

        public int GetIndex(int item)
        {
            int pos = -1;
            for (int i = 0; i < Maxcount; ++i)
            {
                if (array[i] == item)
                {
                    pos = i;
                    break;
                }
            }

            return pos;
        }

        public int GetlocalValue(int i)
        {
            if (i < 1 || i > last + 2)
                return -1;

            return array[i - 1];
        }

        public void Print()
        {
            for (int i = 0; i < Maxcount; ++i)
            {
                Console.WriteLine(array[i]);
            }
        }
        
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值