《C#数据结构与算法》--2020 最新精讲版:2-5 动态数组

目录

一.目的

1.想:将B站视频《C#数据结构与算法》--2020 最新精讲版:提高学习效率,所以编写此系列博客

1.因为这个系列教程评价目前是最好的,所以想看视频、写代码、写博客

二.参考

1.C#数据结构与算法》--2020 最新精讲版

三.操作:1:成功

1.版本

1.制作动态数组原因

1.动画演示:数组扩容

1.功能:重新开辟一个内容空间,想想 动画演示:数组扩容,就会理解这样写的思路

1. 功能:数组添加元素:在数组中间空间位置添加元素

1.动画演示:数组缩容

1.功能:删除指定索引的元素

1.运行结果:


一.目的

1.想:将B站视频《C#数据结构与算法》--2020 最新精讲版:提高学习效率,所以编写此系列博客

1.因为这个系列教程评价目前是最好的,所以想看视频、写代码、写博客

二.参考

1.C#数据结构与算法》--2020 最新精讲版

https://www.bilibili.com/video/BV1gE41157pC

  1. 学习的视频

三.操作:1:成功

1.版本

  1. windows10 64
  2. VS2019

1.制作动态数组原因

  1. 之前的课程都是静态数组,有增删改查功能,容量是有限的,但是实际很多时候我们是无法预估我们的容量,容量开的过大,就造成浪费,容量开的过小,就造成不够用,此时动态数组就出现了。

1.动画演示:数组扩容

1.功能:重新开辟一个内容空间,想想 动画演示:数组扩容,就会理解这样写的思路

        /// <summary>
        /// 视频编号: 2-5 动态数组
        /// 功能:重新开辟一个内容空间,想想 动画演示:数组扩容,就会理解这样写的思路
        /// </summary>
        /// <param name="newCapacity"></param>
        private void ResetCapacity(int newCapacity)
        {
            int[] newData = new int[newCapacity];//新建一个数组,大小是形参
            for (int i = 0; i <N; i++)
            {
                newData[i] = data[i];//将之前的数组数据都赋值给新的数组
            }
            data = newData;//将新创建的数组赋值给全局变量data,这样就实现了数组data的扩容。
        }

1. 功能:数组添加元素:在数组中间空间位置添加元素

        /// <summary>
        /// 视频编号: 2-5 动态数组
        /// 功能:数组添加元素:在数组中间空间位置添加元素
        /// </summary>
        /// <param name="index"></param>
        /// <param name="e"></param>
        public void Add(int index, int e)
        {
            if (index < 0 || index > N)
                throw new ArgumentException("数组索引越界!");

            if (N == data.Length)
                ResetCapacity(2 * data.Length);//( 视频编号: 2-5 动态数组:增加内容)因为需要动态数组,所以当增加元素超过数组长度后,需要扩容相当于之前2倍大小的新数组
                                               //throw new ArgumentException("数组已满!");

            //从后向前,每一个往后挪一个
            for (int i = N - 1; i >= index; i--)
                data[i + 1] = data[i]; //将当前空间数据给后面一个空间,实现将从index开始的元素每一个往后挪一个空间位置

            data[index] = e;
            N++;
        }

 

 

1.动画演示:数组缩容

  1. 数组缩容时候,如果是当新数组只有之前2分之一时候缩容一半,那么如果又扩容时候,导致会频繁的扩容、增容,降低了内存性能;
  2. 数组缩容时候,尽量保持当新的数组只有之前四分之一时候再缩容一半;

1.功能:删除指定索引的元素

        /// <summary>
        ///  视频编号: 2-4 包含、搜索、删除
        ///  视频编号: 2-5 动态数组
        /// 功能:删除指定索引的元素
        /// </summary>
        /// <param name="index">删除元素的索引</param>
        /// <returns>删除索引的元素内容</returns>
        public int RemoveAt(int index)
        {
            if (index < 0 || index >= N)
                throw new ArgumentException("索引越界!");

            int del = data[index];//删除位置的元素内容

            for (int i = index + 1; i <= N - 1; i++)
                data[i - 1] = data[i];//这里时候联想:删除数组中的元素:动画演示

            N--;
            data[N] = default(int);


            // ( 视频编号: 2-5 动态数组:增加内容)想想:动画演示:数组缩容因为当删除数组某个元素后,
            // 如果数组长度没有之前的四分之一长,那么就可以将其缩容一半,减少内存开支,
            //并不是只有之前一半长久缩容,而是四分之一,减少内存空间不断的缩容和扩容
            if (N==data.Length/4)
                ResetCapacity(data.Length / 2);

            return del;
        }

 

 

1.运行结果:

  1. 当第一次扩容时候,增加了一倍
  2. 当数组长度只有之前的四分之一时候,缩容一半

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值