一文带你秒懂数据结构与算法的三大要素、五大特征!

我叫《数据结构与算法》,是计算机世界的四大基石之一。

想来我应该是惹人怜爱的吧(认真脸),因为我仿佛听到了无数个初入计算机世界的同学的呐喊声(😏)。

我作为一门简单学科,看到有很多的在半途弃我而去,我很是痛心疾首。于是,委托这位靓仔将我蕴藏的知识传播出去,让更多的人享受学习数据结构与算法的快乐。

咳咳~言归正传……

基本概念

首先我来自我拆解一下。请跟我读:数据、结构、算法

没错,正是这三部分构成了我。这可能和你的认知不同,以为我是由数据结构和算法够成的吧?

别急,请听我细细道来。

  1. 何为数据?

数据,是构成我的基石,没有数据,我就没有用武之地。 更夸张的说,没有数据,整个计算机世界可能都没了用武之地。

因为,数据是信息的载体。人类能够识别的数据,放到计算机世界中,不经过输入设备的转换,是无法被识别的。这种能被计算机识别的信息就叫做数据

比如,在Mysql数据库中,存储着这样一张数据表。

姓名年龄性别
23
李四22

在我这里,诸如“姓名、年龄、性别”这样的表头属性被称作是数据项,而这些数据项构成了数据元素;最重要的是,数据元素是构成数据的基本单位

这里还有一个数据对象的概念,什么是数据对象?数据对象就是具有相同性质的数据元素的集合,且是数据的一个子集。那么在上述表格中就表示为“法外狂徒张三、23、男”和“李四、22、女”这样的集合。

当然,这些内容可以由更为简明的集合表示:

FdjiwJ

  1. 何为数据结构?

数据结构是数据相互之间存在的一种或者多种特定关系的数据元素的集合。

这么说你可能不是很明白,打个比方:

  • 一对恋人,他们就是一种一对一的关系,这是一种从逻辑上讲的关系,当然,排除海王这样的……
  • 教师与学生,明显是多对一的关系,一个老师可以教很多学生

上述的这两种情况,都是从逻辑上讲的,你肯定知道,还有其他种类的数据结构。

事实上,总共有三种数据结构,被我们称作是数据结构的三要素

  • 逻辑结构
  • 存储结构
  • 数据运算

数据结构三要素

  1. 数据的逻辑结构

    数据的逻辑结构,按照字面意思理解就是数据元素之间的逻辑结构。你可以这样想,逻辑结构就是一种表面上的结构,表示着表面上人与人的逻辑关系。比如说一对恋人,男对女,这就是一种逻辑结构。

    vcror6

逻辑结构分为两种关系:

  • 线性关系
  • 非线性关系

所谓线性关系,就是诸如一对情侣这种一对一的关系,在数据结构中,线性表、栈和队列、串、数组、广义表都属于这种一对一的线性关系。

非线性关系是如一对多、多对一、多对多等的这种关系。比如前面举的例子教师与学生,典型的一对多关系。满足这种关系的数据结构有:集合、树、图。你可能会说,明明集合既不是一对一,也不是一对多。

是的,集合比较特殊。我们认为,集合中的数据元素,除了同属于一个集合外就没有其他的任何关系了,所以这也是一种非线性关系。

aRBVlx

  1. 数据的存储结构

看到存储你会想到什么?硬盘、内存等存储介质,对吧?

实际上,存储结构说白了就是数据在计算机中的表示,即物理地址

包括数据元素的表示数据关系的表示

数据元素的表示,就是指数据在计算机中的地址;而数据关系的表示,就是表示数据之间有何种关系。

人们为了合理利用计算机的存储空间,研究出了四种存储方式:

  • 顺序存储
  • 链式存储
  • 索引存储
  • 散列存储

顺序存储是最简单的一种存储方式,你只需要了解:**数据元素的逻辑关系就是其存储关系。**最简单的例子是顺序表,顺序表是连续空间上的一组元素。也就是说,逻辑上相邻的两个数,在存储地址上也相邻。这种存储方式,优点和缺点都很明显:

  • 优点:能够实现随机存取,也就是说,存取可以任意指定位置,不必遍历
  • 缺点:只能使用相邻的一片存储空间,也就是说存储空间可能成为限制,也许会产生大量的数据碎片

链式存储最为典型的代表就是单链表吧,从逻辑上看,单链表就像是一个由表头拉着的长锁链,但是其数据元素的具体位置是随机的,全部由指针指示存储位置。

1gqA5O

  • 优点:不会出现碎片,能够充分利用所有存储单元
  • 缺点:每个元素因为存储指针而占用额外的存储空间,且只能实现顺序存取,即遍历

索引存储可能是最快的存储结构。我们可以把索引想象成PDF电子书的目录,有了目录,我们找相关内容肯定是十分简单的。索引存储是在存储数据元素的时候,同时建立数据元素的目录,这样就能快速检索了。

  • 优点:检索速度快
  • 缺点:附加索引表额外占用空间,增删数据时要修改索引表,花费更多时间

散列存储又称为哈希存储(HASH)。这种存储结构比较讨巧,是通过公式来计算数据真正的存储位置。比如说,我要存储数据1,公式是y=x+5,y表示存储地址,那么1就会被存放到位置6。当然,实际应用中计算公式肯定不会这么草率。

  • 优点:检索、增删结点的操作都很快
  • 缺点:若散列函数不好,则出现元素存储单元冲突(两个数据元素计算的地址一样),解决冲突会额外占用时间与空间
  1. 数据运算

数据运算包含两部分内容,即数据运算的定义和实现。

数据运算的定义是针对逻辑结构来讲的,指出了运算的功能。

数据运算的实现是针对存储结构来讲的,指出了运算的具体实现步骤。

数据运算这个时候是在是没啥可细说的,留待日后。

算法的五大特征

在说算法的五大特征之前,我们需要弄明白算法的定义:所谓算法,就是对特定问题的求解步骤的描述。

也就是说,算法是用来解决问题的,一个算法的执行,必然能够有结果,且这个结果符合我们预期的要求。

算法有五大特征,分别为:

  • 有穷性
    • 必须在执行有穷步骤后结束,且每一步都在有穷时间内完成。所以说,无限执行的算法是错误的,是不能被称作算法的。所以,写递归函数的时候千万当心。
  • 确定性
    • 每条指令必须有确切的含义,相同的输入只能得出相同的输出。即算法中不能出现含糊不清的表述,也不能出现两次相同输入,执行同一算法出现不同的结果的情况。
  • 可行性
    • 算法描述的操作都可以通过已经实现的基本运算执行有限次数实现。不能实现的算法要他何用?
  • 输入
    • 有零个或多个输入,注意,算法是可以没有输入的,但是必须有输出。
  • 输出
    • 有一个或多个输出,不能没有输出,没有输出的算法是错误的。

感谢各位阅读!以上就是这篇文章的全部内容啦!

写在最后

关注微信公众号:最高权限比特流。

1587813927260355

回复1001,获取《数据结构的三大要素、五大特征》的思维导图,据说思维导图很Diao哦!

eG0VF9

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
LVS(Linux Virtual Server)是一种基于 Linux 系统的负载均衡集群技术,它主要用于将网络流量分发到多个服务器上,以提高系统的可靠性、可扩展性和性能。 LVS 集群一般包括四个组件:调度器(LVS 调度器)、前端服务器(负载均衡器)、后端服务器(真实服务器)和存储服务器(用于共享数据)。首先,调度器接收来自客户端的请求,然后根据配置的调度算法(如轮询、加权轮询、最小连接数等)将请求分发到多个前端服务器。前端服务器接收到请求后,通过相应的负载均衡算法将请求转发到后端的真实服务器上进行处理。在整个过程中,存储服务器用于存放共享的数据,以确保所有的真实服务器都能获取到相同的数据,并提供一致的服务。 LVS 集群的优点是能够提高网站的稳定性和可靠性,当某一台服务器出现故障时,调度器会自动将请求分发到其他可用的服务器上,从而保证服务的连续性。同时,LVS 集群还能够通过增加前端服务器和后端服务器的数量来提高系统的性能和吞吐量,以满足不断增长的用户需求。 在实际应用中,LVS 集群需要合理配置,包括选择合适的调度算法、调整每台服务器的权重、选择适当的硬件设备等。此外,还需要及时监控集群的运行状态,及时发现和解决故障,以确保整个系统的正常运行。 总的来说,LVS 负载均衡集群是一种强大而高效的集群技术,能够帮助企业提高系统的可靠性和性能,是现代互联网应用中不可或缺的重要组成部分。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值