数据结构到底是什么?

论坛 期权论坛 股票     
期权匿名问答   2023-2-12 17:10   5553   5
数据结构到底是什么?
分享到 :
0 人收藏

5 个回复

倒序浏览
2#
期权匿名回答  16级独孤 | 2023-2-12 17:11:37 发帖IP地址来自 北京
什么是数据结构?

官方解释:数据结构是一门研究非数值计算的程序设计问题中的额操作对象,以及他们之间的关系和操作等相关问题的学科。
大白话数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据
什么是算法?

官方解释:算法是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。
大白话:根据一定的条件,对一些数据进行计算,得到需要的结果
数据结构的分类

传统上,我们可以把数据结构分成逻辑结构和物理结构两大类。
逻辑结构分类:
逻辑结构市场ongoing具体问题中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系分类。这是学习需要重点关注的部分。
a. 集合结构:集合结构中数据元素除了属于同一个集合外,它们之间并没有其他的关系。


b. 线性结构:线性结构中的数据元素之间存在一对一的关系。


c. 树形结构:树形结构中的数据元素之间存在一对多的层次关系


d.图形结构:图形结构的数据元素是多对多的关系。


物理结构分类

逻辑结构在计算机中真正的表达方式(又称为映像)称为物理结构,也可以叫做存储结构。常见的物理结构有顺序存储结构、链式存储结构。
顺序存储结构:
把数据元素放到地址连续的存储单元里面,其数据间的逻辑关系和物理关系是一致的,比如我们常用的数组就是顺序存储结构。


顺序存储结构存在一定的弊端,就像生活中排队时候也会有人插队,或者因为特殊情况离开,这个时候整个结构都处于变化中,这里就需要链式存储结构。
链式存储结构:
是把数据元素存储放在任意的存储单元里面,这组存储单元可以是连续的也可以是不连续的。此时,数据元素之间并不能反映元素间的逻辑关系,因此在链式存储结构中引进了一个指针存放数据元素的地址,这样通过地址就可以找到相关联数据元素的位置。


为什么要学数据结构和算法

是不是觉得数据结构和算法,跟OS、计网一样,属于脱离实际的屠龙术?除了面试基本用不上?
—— 大部分业务开发都是利用封装好的API堆砌,转译业务逻辑,看似无需自行实现算法。
就算不需要自己实现 不等于 不需要了解
若不知道这些类库背后的原理,不懂得时间、空间复杂度分析,你如何能用好、用对它们?
存储某业务数据时,你如何知道应该用ArrayList,还是LinkedList?
调用某方法后,你如何评估代码的性能和资源消耗?
业务开发用到的各种框架、中间件和底层系统,如MySQL、Spring、MQ和Redis等。这些基础组件中,其实都内置了很多基础算法思想。
如Redis中,有序集合用什么数据结构实现?为什么要用跳表?为什么不用二叉树?
若能清晰这些底层原理,就能更好利用它们。即便出现问题,也方便定位。
实际工作中的算法应用到处可见,如何实时地统计业务接口的99%响应时间?
你可能想,每次查询时,从小到大排序所有的响应时间,若总共有1200个数据,那第1188个数据就是99%的响应时间。
每次用这个方法查询的话都要排序,效率太低。但若你知道“堆”数据结构,用两个堆即可高效解决。
现在开源的技术文章、架构、项目很多,照猫画虎做一套基础框架并不难。
就拿RPC框架举例:
不同人做出的RPC框架,架构设计思路其实都差不多,所实现的功能也相差无几。但就是有人做的框架,Bug很多、性能一般、扩展性也不好,只能在自己公司仅有的几个项目里面玩一下。
而有人的框架就能开源到GitHub,甚至被Apache收录。
3#
期权匿名回答  16级独孤 | 2023-2-12 17:12:33 发帖IP地址来自 北京
先解释一下什么是计算机软件中的数据:
计算机做的是数据处理的工作,所以,核心在数据。

软件由代码和数据组成。以知乎为例,使用知乎是使用知乎这个APP,知乎APP由代码构建;使用知乎主要是看知乎里面的问答和文章,这些都是知乎的数据。比如APP升级后,消息页面内容被重新组织了,这是代码的变更;实际上消息(数据本身)是没有变化的。只要知乎愿意,改一下代码,恢复成上一个显示样式很容易------ 但是,如果你把消息删除了,不管怎么升级软件,怎么改写代码,被删除的消息(数据)就不能显示了。
所以,所谓软件,一直在做两件事。一,编写代码实现人想要的功能;二,组织数据,支持代码对数据的处理,以便于人驱动计算机更好的采集、存储、处理和使用数据。
再以知乎为例,知乎这个APP重要,还是知乎里面的内容重要?
知乎最近有做知乎图书的事,就是在把知乎的内容(数据)再加工,以更好的发挥知乎的价值。

关于数据在计算机的存储,我另一个回答里的通俗解释:
计算机的存储技术里面有个基本操作:写入,读取。

写,就是把知识写入计算机的存储器里,相当于我们学习知识。
读,就是把知识从计算机的存储器里读出来,用于后续的显示、计算等等。
在计算机的世界里,如何写决定了如何读,如何读决定了如何写。
有点儿拗口,我试着举个生活的例子。下面这张图片里,标识出来了三种书本的存放方式。


书本的三种存储方式,决定了取书的方式也有三种。
三种方式存放的时候方便程度是不一样的,三种方式获取的时候方便程度也是不一样的。
我们用第一种方式来存书,就只能按照第一种方式来取书。
如果你希望取书的时候最方便(不去翻动其它书),你在放书的时候就要用立式存书的方式。
计算机的世界了,所有数据存储的目的都是为了读取,所以,从计算机里面的海量数据里精准的获取到特定数据,是计算机设计要解决的主要问题。

为此,计算机科学家们设计了数种数据存放方式,以获取最合适的读取效率
计算机前辈们设计的种种数据存放方式就是数据结构:数组、集合、链表、树和图....
为了便于我们这些普通人使用这些数据结构和用这个数据结构组织的数据,前辈们还附送了如何构建这个数据结构的算法(写入)和如何获取这个数据结构中数据的方式(读取)。
所以,大学里《数据结构》这门课的参考书是《数据结构和算法》。
当然,因为数据结构有点儿抽象,所以,学计算机的朋友通常在学完《数据结构》这门课程后发现,自己会写里面的所有算法了,依然搞不清楚什么是数据结构。数据结构就是算法吗?为什么这么不叫算法?说数据结构不是算法?那为什么全书都在讲算法.....
那希望这个回答能帮助你理解数据结构和算法。

附送一点儿:
那么数据结构和数据库技术,都是在说数据存储,他们有什么区别?
数据结构是关于数据在计算机的内存里面时数据如何被组织的,如何组织数据以便于软件高效的获取数据,包含了数据在内存中的存储方式,写入算法和读取算法。
而数据库技术,传统上,是关于数据在计算机的外部存储是数据如何被组织,包含了数据在硬盘上存储时的写入算法和读取算法。
因为两者存取的数据的量和访问效率的要求不一样,两者使用的技术也不一样。而在教给学生时,两者的方式也不一样。内存数据要求高效,所以,需要新程序员能够通过直接构建数据结构的方式访问数据;而外存储的数据访问时效相对长,新程序员可以通过封装(不了解数据库的数据存储方式)的前提下来访问数据。
随着内存的增加以及内存数据量和复杂度的增加,也衍生了内存数据库技术。就是说,因为数据量大了,数据的复杂度增多了,把数据库技术用于内存数据的访问---- 却并非是直接搬用硬盘数据库技术,因此,诞生了内存数据库技术。

相关文章和回答:
许晓风:大学里与计算机相关的专业有什么区别?孩子问「科技那么发达,为什么不能把书上的知识通过技术直接放到大脑里呢?」,你会如何回答呢?
最后,依然是申明:
这篇文章为了易懂,有些地方说的肯定是不够准确的。如果你懂数据结构,应该能看出来,也就不会被误导;如果你还没懂数据结构,也就看不出来这里面的瑕疵,却能看得懂全文,那我的目的也就达到了--- 请务必以专业的《数据结构》内容为准来学习数据结构。
当然我对数据结构和数据库技术的理解还是20年前学的,如果最新理论里有重大变更,多谢评论区指正,我好学习修改。
4#
期权匿名回答  16级独孤 | 2023-2-12 17:12:44 发帖IP地址来自 北京
数据结构就是数据的组织形式,数据和数据的关系
5#
期权匿名回答  16级独孤 | 2023-2-12 17:13:19 发帖IP地址来自 北京理工大学
数据结构,我们从字面上来看,可以把它分为数据和结构两个部分,数据我们可以理解为信息,比如说我们的姓名,性别啊等等。我们需要把这些信息存储到计算机当中去,我们该如何去存储这些数据呢?我们需要用到不同的结构去存储这些数据。有人可能会问为什么要用不同的结构呢?答案是因地制宜,合适的才是最好。我们为什么要使用计算机,就是因为计算机能够提高我们的效率,而使用不同的数据结构可以提高我们的效率,所以我们对于不同的数据,不同的用途采用不同的数据结构。
上面我们说到了数据结构就是数据在计算机中存储的形式,以及为什么我们要使用不同的数据结构。今天我们所学的数据结构都是前人根据实践而总结出来的对于某些数据存储的一些比较好解决方案。
说起来可能比较抽象,我们用一个例子来说明这个问题。想想我们高中每次考试的排名表,从第一名到最后一名,按顺序排列下来。其实这就是一种数据结构,叫做顺序表。那么为什么我们要采用这种数据结构呢,因为它便于查找。比如我们想看看全班第23名是谁,我们直接看看标号23是谁就行了,是不是很快很简单。那么顺序表是不是完美无缺呢?那是不可能的。就像我们之前说的,数据结构之所以出现就是为了因地制宜,没有那哪一种数据结构可以说完美无缺。没有完美的数据结构,只有最合适的数据结构。我们再次回到线性表,假如之前漏掉一个同学,后来发现了,我们肯定要把这个同学加到我们的表上来,再假设那位同学刚好成绩比表上了23名分数高比22分数低,说明他才是第23名,那我们要怎么办呢,我们把他插到表里面去,把他标为23名,之前的23改为24,24改为25,依次类推,假如这是年级大表,可能有几百人要改,是不是很麻烦。顺序表的劣势就显现出来了。顺序表它的优势是查找,它的劣势是增,删,改。
如果我们的数据需要经常进行查找操作,我们可以优先考虑顺序表,如果经常需要,插入,删除数据我们应该使用什么数据结构呢?我们可以使用一种叫做链表的数据结构。之后还有栈,队列 ,树和图,这些结构都不相同,有一点是共同的,那就是因地制宜。
6#
期权匿名回答  16级独孤 | 2023-2-12 17:13:45 发帖IP地址来自 北京
数据结构是指计算机存储和组织数据的一种的结构,常见的数据结构有数组、链表、队列、哈希表、树等,比如你的这条提问数据,在知乎的服务器上如果是使用mysql数据库来存储的话,那么其实在底层应该就是使用B+树这种数据结构来存储的。总的来说,数据结构就是一种存储数据的逻辑结构。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:400157
帖子:80032
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP