C#常用数据结构和算法总结

作者:贺臣 时间:2021-10-31 22:05:29 

1.数据

数据(Data)是外部世界信息的载体, 是能够被计算机识别,加工,存储的。在现实生活中也就是我们的产品原材料。

计算机中的数据包括数值数据,图片,影音资料等.

2. 数据元素和数据项

数据元素(Data Element)是数据的基本单位,在计算机处理的过程中通常是作为一个整体来作为处理的。

数据项(Data Item):一个数据元素通常由一个或多个数据项组成。

比如数据库表:(Student),它有Id,Name,Sex,Age,Address等字段,而这张表又有多行数据。我们通常将这些字段就叫做数据项,每行数据

就叫做数据元素。在某些情况下数据元素又称为元素,节点,纪录等。

数据项分为两种:(1)初等项;(2)组合项[也就是可以分为更小的项,比如人可以再分为欧洲人,亚洲人,非洲人]

3.数据结构

数据结构(Data Structure) 是在相互之间存在的一种或多种特定关系的数据元素集合.

众所周知,在计算机中任何数据元素都不可能是单一或孤立存在的,它们之间都存在着一定的关系。就和人类体系结构一样,人不可能是孤立而与外界没有关系的。

数据结构分为四种:

(1)集合[Set]

(2)线性结构[Linear Structure] (常见的线性结构数据,数据库存储数据)

(3)树形结构[Tree Structure]    (树状结构,就好像人类的继承关系,在计算机中xml文件存储数据最为典型)

(4)图形结构[Graphic Structure] (图形结构也是相对比较复杂的,因为存在多对多的关系,计算机网络拓扑)

C#常用数据结构和算法总结

4.数据对象

数据对象(Data Object),性质相同的数据元素的集合,是数据(Data) 的一个子集。{“aa”,"bb","cc","dd"} 我们就可以将其看做是一个数据对象,都是字符长度的集合。

5.数据类型

数据类型(Data Type) ,从上面的数据对象我们可以引申出数据类型这个概念,很多时间数据类型在C#,Java 等高级程序语言中说的比较多

数据类型分为两种:

(1) 非结构的原子类型 (在C#也就是基本数据类型,如int,string,long 等)

(2)结构类型,可以由多个结构类型组成,并可以分解。而结构类型可以包含结构类型和非结构的原子类型

6.算法

算法: 一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

一个算法的优劣可以使用空间复杂度和时间复杂度来衡量。其中算法有五个特征:

(1)有穷性: 算法中每条指令的执行次数有限,执行每条指令的时间有限

(2)确切性: 算法的每一步骤必须有确切的定义

(3)输入:    一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件

(4)输出:   一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的

(5)可行性:算法中执行的任何计算步都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成

算法分类: 基本算法,数据结构算法,数论与代数算法,计算几何算法,图论算法,动态规则与数据分析,加密算法,排序算法,检索算法,随机化算法,并行算法

7. 复杂度

算法的复杂度可以使用 时间复杂度 和 空间复杂度 来衡量。

时间复杂度:算法的时间复杂度是指算法需要消耗的时间资源

空间复杂度: 算法的空间复杂度是指算法需要消耗的空间资源

8.数据的物理结构

数据的物理结构(Physical Structure) 又称为 存储结构,是数据在计算机中的表示和存储,包括数据元素的表示和存储以及数据元素关系的表示和存储。

数据结构存储分为:(1)顺序存储结构.(2)链式存储结构

顺序存储结构:通过数据元素在计算机存储器上的相对位置来表示数据元素的逻辑关系,一般把逻辑相邻的数据元素存储在物理位置相邻的存储单元中。

C# 中的数组结构就是典型的顺序存储结构方式。

链式存储结构:相邻元素不需要在物理存储位置单元相邻,它们而是通过存储相邻数据元素的地址来维护关系。地址我们通常称之为为引用(Reference)

备注:此篇文章只是总结了数据结构方面的一些概念,我们在学习编程的时候经常说数据,复杂度等等这些概念,至于这数据,复杂度等等到底是什么东西我们也没有去研究过,这里总结了一些知识点可以帮助大家理解这些概念。

标签:C#,数据结构,算法
0
投稿

猜你喜欢

  • 详细分析android的MessageQueue.IdleHandler

    2023-06-23 19:12:10
  • Spring Boot 读取静态资源文件的方法

    2023-08-25 02:53:07
  • 基于Java数组实现循环队列的两种方法小结

    2023-06-30 16:09:01
  • C#判断一天、一年已经过了百分之多少的方法

    2022-07-16 15:23:11
  • LZ77压缩算法原理的理解

    2023-01-16 17:48:02
  • c#可空类型的作用说明

    2021-12-24 18:00:49
  • SpringBoot+Mybatis项目使用Redis做Mybatis的二级缓存的方法

    2021-06-17 20:09:50
  • 利用Matlab复刻羊了个羊小游戏

    2021-10-10 17:13:05
  • Android App中使用Gallery制作幻灯片播放效果

    2022-04-03 21:53:37
  • Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)

    2023-11-27 11:02:17
  • C#中String StringBuilder StringBuffer类的用法

    2023-05-21 02:35:50
  • PowerManagerService之唤醒锁的使用获取创建示例解析

    2021-09-29 06:42:22
  • 教你安装配置Android Studio

    2023-07-09 03:26:17
  • Android 遍历SDCARD的文件夹并显示目录信息

    2021-06-01 21:49:04
  • gradle使用maven-publish发布jar包上传到私有maven配置

    2022-11-22 07:07:54
  • Java中的this和super实例浅析

    2023-03-03 13:24:09
  • 掌握Android Handler消息机制核心代码

    2023-11-29 18:29:23
  • C#中var关键字用法分析

    2022-02-11 15:01:43
  • java模拟微信抢红包的实例代码

    2021-12-08 19:51:21
  • java泛型详解

    2023-06-07 23:54:47
  • asp之家 软件编程 m.aspxhome.com