目录
1.想:将B站视频《C#数据结构与算法》--2020 最新精讲版:提高学习效率,所以编写此系列博客
1.因为这个系列教程评价目前是最好的,所以想看视频、写代码、写博客
1.功能:重新开辟一个内容空间,想想 动画演示:数组扩容,就会理解这样写的思路
一.目的
1.想:将B站视频《C#数据结构与算法》--2020 最新精讲版:提高学习效率,所以编写此系列博客
1.因为这个系列教程评价目前是最好的,所以想看视频、写代码、写博客
二.参考
1.C#数据结构与算法》--2020 最新精讲版
https://www.bilibili.com/video/BV1gE41157pC
- 学习的视频
三.操作:1:成功
1.版本
- windows10 64
- VS2019
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.动画演示:数组缩容
- 数组缩容时候,如果是当新数组只有之前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.运行结果:
- 当第一次扩容时候,增加了一倍
- 当数组长度只有之前的四分之一时候,缩容一半