C#数据结构【数组】

C#数据结构【数组】
黄雨涵前言
【此文章所有代码可在文章末尾下载查看源码】
数据结构是计算机存储,组织数据的方式,同样也是相互之间存在一种或者多种特定关系的数据元素的集合
算法是一系列规定的计算步骤,为了实现特定的计算目的
基本数据结构一般有4类:
(1)集合 (2)线性结构 (3)树形结构 (4)图形结构
集合:数据结构中的集合与数学中的集合类似,在集合中的 数据只是存在同一集合中,但其数据之间没有关系。
线性结构:数据元素之间是一对一的关系
主要包括:线性表,栈,队列(三者的数据元素以及数据间的逻辑关系完全相同,差别就在于线性表的操作不受限制,而栈和队列的操作受到限制,栈的操作只能在表的一端进行,队列的插入操作在表的一端进行而其它操作在表的另一端进行,所以,把栈和队列称为操作受限的线性表)
树形结构:数据元素之间的层次关系是一对多
图形结构:数据元素之间呈多对多的关系
数组
静态数组:
int[],float[],string[]等
特点:数组一旦创建,其容量的大小是无法进行改变的
动态数组:
ArrayList List
特点:可以根据元素的多少动态的调整数组容量的大小
泛型数组(List):
优势:对于存储值类型数据,性能更优;使代买更清晰和保证类型安全
动态数组代码实现
这里主要考虑的便是数组中所要实现的功能(插入数据,获取数据,删除数据,修改数据,数组的扩容)
(1).定义一个数组来存储数据T[] data,通过num来统计数组的数组的大小
1 | private T[] data;//数组数据 |
(2).所需要的参数定义完毕后便是对构造方法,这里主要考虑的便是数组需要在创建之初要设置好数组的大小
1 | /// <summary> |
(3).考虑使用过程中所需要的功能【添加数据,修改数据,删除数据,获取数据,扩容数组】
插入/添加数据
①.首先需要判定index是否在数组范围内
1 | if(index < 0 || index >num )throw new ArgumentException("index不合法,请检查"); |
②.由于我们使用的是动态数组,当数组的长度和num相同时,则需要对数组进行扩容【相关代码请看ResetCapacity()方法】
1 | //当数组容量不足时则需要进行数组的扩容 |
③下面我们要考虑的便是添加数据,这里主要考虑的便是插入的目标索引和数据信息,需要将目标位置索引数据往后挪动,然后将目标索引的数据写入即可
1 | public void Add(int index,T e) { |
④这里为了方便添加了向数据末尾和数据头部添加数据的方法,只需将num和数据添加写入即可
1 | /// <summary> |
获取数据
这里考虑的比较少一些,只需判断所要获取的索引是否越界,然后返回相应索引的数据
1 | /// <summary> |
修改数据
这里考虑的比较少一些,只需判断所要获取的索引是否越界,将相应索引的数据重新赋值即可
1 | /// <summary> |
删除数据
1 | /// <summary> |
判断数据是否存在
1 | /// <summary> |
下面是完整代码
1 | private T[] data;//数组数据 |
具体测试代码详见
1 | ArrayOne<int> arrayOne = new ArrayOne<int>(20); |
控制台输出效果
1 | 数组信息:ArrayOne: count=10 capacity=20 |