【愚公系列】2021年11月 C#版 数据结构与算法解析(数组)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 【愚公系列】2021年11月 C#版 数据结构与算法解析(数组)

引言:数据结构的基本概念

我们先来回顾下数据结构的几个概念。


何谓数据结构?专门研究数据之间的逻辑关系、存储方式及操作的学问就是所谓的数据结构。


数据的逻辑结构

数据元素之间存在的关联关系(与它们在计算机中的存储位置无关),被称为数据的逻辑结构。


从数据的逻辑结构划分大致有如下4中逻辑结构:


集合:数据元素之间只有"同属于一个集合"的关系

线性结构:数据元素之间存在"一对一"的关系

树形结构:数据元素之间存在"一对多"的关系

图状结构或网状结构:

数据的存储结构

对于数据不同的逻辑结构,在底层通常通常有两种物理存储结构(数据元素在计算机存储空间的存放形式):


顺序存储结构(线性表)

链式存储结构(链表)

对上面的内容用思维导图小结下:

image.png

线性表

对于常用的数据结构可以分为线性结构和非线性结构。线性结构主要是线性表,非线性结构主要是树和图。


从上面对数据结构的逻辑结构介绍中得知, 数据元素之间存在"一对一"的关系, 即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意循环l链表也是线性结构,但是它首尾是相接的)。


线性表的每个元素必须有相同的结构(元素可以是简单的数据,也可以是复杂的数据,但复杂的数据内部结构要相同)。


线性表的基本操作

线性表初始化

插入元素

向指定位置插入元素

删除元素

删除指定位置的元素

取指定位置的元素

查找元素的位置

返回线性表的长度

判断线性表是否为空

清空线性表

线性表主要有两种存储结构:顺序存储(线性表)、链式存储(链表)。本篇文章主要介绍顺序存储,链式存储放在下一个篇文章。


顺序结构存储是指用一组地址连续的存储单元一次存放线性表中的元素。也就是说,顺序结构线性表中的数据元素的物理关系和逻辑关系是一致的。所以如果线性表采用顺序存储,往线性表中间的某个位置插入或者删除元素需要对该位置及其之后的元素进行移动。


顺序存储结构的线性表中间位置插入新元素

首先要把该位置及其之后的元素往后移一位,为新元素腾出空间。


往索引 index=2 的位置插入元素:

image.png

把索引index=2及其后面的所有元素往后移一格,为新元素腾出位置:

image.png

插入新元素

image.png

删除顺序存储结构的线性表中间位置元素

删除顺序存储结构的线性表中间位置的元素,操作类似。

删除索引index=2的元素:

image.png

删除元素:

image.png

把index=2之后的所有元素向左移动一格:

image.png

顺序存储的线性表,采用数组存储,插入元素如果容量不够,需要进行扩容。扩容主要是创建一个新的数组,然后把数据从老数组拷贝到新的数组中。


一:数组

数组主要有Array,ArrayList,List


Array

数组在C#中最早出现的。在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单。

<span style="font-family:SimSun;font-size:18px;">//数组  
string[] s=new string[2];  
//赋值  
s[0]="a";  
s[1]="b";  
//修改  
s[1]="a1";  
</span>

优点:数组在内存中是连续存储的、所以它的索引速度是非常快的、时间复杂度为O(1)、而且它的赋值/修改/获取元素也是非常简单的。


缺点:1、定义数组的时候需要指定数组的长度(过长会造成内存浪费、过短会导致程序异常System.IndexOutOfRangeException:“索引超出数组界限”)


2、插入和删除元素效率低、也比较麻烦。


在不清楚数组长度的时候、就很尴尬了。 所以C#提供了ArrayList了来处理这些问题…


ArrayList

使用大小会根据需要动态增加的数组。

//初始化
ArrayList list = new ArrayList();
//添加元素
list.Add(1);
list.Add("A");
list.Add(0.1);
//修改元素
list[2] = "B";
//指定索引插入元素
list.Insert(1, "ABC");
//移除元素
list.RemoveAt(1);

优点:1、ArrayList大小会根据需要动态增加的数组。


2、实现了IList接口、可以方便的对数据进行添加、插入和删除。


缺点:1、ArrayList会把插入的数据都当做object类型来存储、在操作数据的时候可能会因为类型不匹配而出现异常、它是非类型安全的对象。


2、由于存储的是object类型、在使用的时候进行类型转换、会造成装箱拆箱、从而损耗性能。


装箱:把值类型转换成引用类型;


拆箱:把引用类型转换成值类型。

//装箱
int i = 1;
object obj = (object)i;
//拆箱
int j = (int)obj;

优点:由于泛型List是强类型、编译器会验证类型安全。这样就避免了类型的不安全、以及数据强制转换导致装箱拆箱损耗性能。

备注:哈希表(散列),就是数组的升级版通过hash运算快速查找到值,数组下标就是哈希值。(前512是int,后才是哈希)

相关文章
|
4天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
7天前
|
监控 算法 安全
内网桌面监控软件深度解析:基于 Python 实现的 K-Means 算法研究
内网桌面监控软件通过实时监测员工操作,保障企业信息安全并提升效率。本文深入探讨K-Means聚类算法在该软件中的应用,解析其原理与实现。K-Means通过迭代更新簇中心,将数据划分为K个簇类,适用于行为分析、异常检测、资源优化及安全威胁识别等场景。文中提供了Python代码示例,展示如何实现K-Means算法,并模拟内网监控数据进行聚类分析。
28 10
|
16天前
|
存储 人工智能 算法
C 408—《数据结构》算法题基础篇—数组(通俗易懂)
408考研——《数据结构》算法题基础篇之数组。(408算法题的入门)
58 23
|
16天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
69 29
|
16天前
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
92 27
|
25天前
|
存储 算法 安全
控制局域网上网软件之 Python 字典树算法解析
控制局域网上网软件在现代网络管理中至关重要,用于控制设备的上网行为和访问权限。本文聚焦于字典树(Trie Tree)算法的应用,详细阐述其原理、优势及实现。通过字典树,软件能高效进行关键词匹配和过滤,提升系统性能。文中还提供了Python代码示例,展示了字典树在网址过滤和关键词屏蔽中的具体应用,为局域网的安全和管理提供有力支持。
50 17
|
30天前
|
算法 搜索推荐 Java
【潜意识Java】深度解析黑马项目《苍穹外卖》与蓝桥杯算法的结合问题
本文探讨了如何将算法学习与实际项目相结合,以提升编程竞赛中的解题能力。通过《苍穹外卖》项目,介绍了订单配送路径规划(基于动态规划解决旅行商问题)和商品推荐系统(基于贪心算法)。这些实例不仅展示了算法在实际业务中的应用,还帮助读者更好地准备蓝桥杯等编程竞赛。结合具体代码实现和解析,文章详细说明了如何运用算法优化项目功能,提高解决问题的能力。
62 6
|
2月前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
2月前
|
存储 监控 算法
企业内网监控系统中基于哈希表的 C# 算法解析
在企业内网监控系统中,哈希表作为一种高效的数据结构,能够快速处理大量网络连接和用户操作记录,确保网络安全与效率。通过C#代码示例展示了如何使用哈希表存储和管理用户的登录时间、访问IP及操作行为等信息,实现快速的查找、插入和删除操作。哈希表的应用显著提升了系统的实时性和准确性,尽管存在哈希冲突等问题,但通过合理设计哈希函数和冲突解决策略,可以确保系统稳定运行,为企业提供有力的安全保障。
|
2月前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
283 30

热门文章

最新文章

推荐镜像

更多