什么是数据结构?这个问题困扰了我很久。经过在互联网上的一顿查找操作,我目前收集到的情报有:
1.具体问题会涉及到大量不同类型的数据,为了更有效更合理地解决问题,人们开始对算法的研究。
2.怎么算好的算法呢?主流的评价标准是时间复杂度和空间复杂度。这些复杂度和计算机的物理特性息息相关,为了更好地研究算法,人们发觉应该建立某些特定的数据结构。在物理层面上为算法的实现提供基础。
我们先不说具体的数据结构有哪些,这些解释已经可以使一个非计算机专业的理工科学生(学过大计基)理解到一定程度了。但是我作为一个计算机萌新,还有一些疑问。
我需不需要知道数据结构是怎么实现的?算法与数据结构这门课程的关注点在哪里,它是编程问题还是数学问题?作为一个学生,我究竟应该以什么作为重点?这些问题将随着我的学习而弄清楚,不过我想先记下现在的已知情报:
1.一些重要的基本概念:
数据是任何能输入到计算机中的东西,都可以叫“数据”。这是一类总称,所以如果你把数据叫做“东西”也没问题。
数据项是最小的不可分割的数据。比如int 1 char a等。
数据元素是由一个或若干个数据项构成的数据的基本单位,虽然或许可以再分,但对于程序处理问题,只需要分到数据元素的层面就好了。
数据对象是性质相同的数据元素的集合,比如一堆数字、一堆字符,或者是一堆字符串。//在我写这篇文章的时候,并没有感觉到它的实际用途,所以就浅一点吧。
数据结构是存在关系的数据元素的集合。不过我不打算从这个角度理解,见下文。
2.从另一个角度看数据结构:
我打算从实际的角度看待数据结构。经过上方的各种概念,我们可以推断出一个关系图:
数据项→数据元素→数据结构;
虽然不是值得提倡的理解方式,但我还是想另一个角度说明我的理解:数据项是C++自带的,包括数据类型和数据本身。比如int 1 、char a之类,它们都是基本的数据项。
而数据元素,自然可以把一个数据项作为数据元素进行处理。但在很多实际问题中,数据元素作为数据项还是无法应付。因此,我们将一些数据项组合起来,构成自定义的数据元素。这样的数据元素就好像学校的某个学生信息,从姓名到成绩应有尽有。我们还可以定义一系列对该数据项的操作方法,实现对数据项更好的控制。比如,用Change_major(ID number,majorType &major)实现对我的转专业操作。
//值得一提的是,在定义数据元素的数据项和操作方法的过程中,为了方便处理数据,我们可以定义一批简单的类型。比如上文中的数据类型ID,以及专业类型majorType,或者可能存在的返回值类型。
但这些工作只能形成一个个单独分开的数据元素,你可以对它们进行各种操作,比如创建、赋值、删除、访问一个什么东西、改变一个什么数据项、内部搞点什么小动作。这固然很好,但是仍然过于细节。
所以,我们要把这些数据项组合成一个整体,就是所谓的数据结构。举两个例子:如果数据元素就是单个数字的话,那么数组或者向量就可以看做一种数据结构(其实就是一种数据结构)。再有,如果学生信息作为一个数据元素,他的姓名等就是数据项,而所有的学生信息填写到一张表格上,就可以组合成一种数据结构。不出意外的话,数据结构还可以再形成数据结构,也就是说,如果把一堆东西集合成一个叫做1层组合数的话,数据结构研究的是组合数大于等于2的数据。而非仅仅等于2.
这就是我对数据结构的一种理解,不过我还想再换个角度。
3.从class角度看待数据结构:
我莫名好奇一个问题:在我们创建了一个数据结构之后,我们用了多少class语句?
1.在定义各种类型的返回值的时候,可以用enum(相当于class)
2.在构建一种数据元素的时候,可以用class把它的数据项和彼此联系组合在一起。
3.在构建一种数据结构的时候,可以用class把它的数据元素和彼此联系组合在一起。
4.在构建一种数据结构的时候,可以用class把它的数据元素和彼此联系组合在一起。
............//然后又是各种套娃
在思考这些问题的时候,我们就已经理清了种种关系。上面的1234标号并不是在计数,而是在记录层数。事实上,层数不会很多,三层也就够用了。//大概,我不确定。
4.从使用的角度看待数据结构:
这个我还没想清楚,现在我饿了,留个坑,以后来补充吧。
本文深入浅出地介绍了数据结构的基础概念,如数据项、数据元素和数据结构的关系,以及如何通过类和实际应用场景来理解。强调了算法与数据结构课程的重点,并讨论了数据结构在编程中的重要性,包括时间复杂度和空间复杂度。同时,提到了数据结构的层次组合和实际操作示例,如数组、向量和学生信息表格。
1万+

被折叠的 条评论
为什么被折叠?



