【数据结构】什么是数据结构?

前端之家收集整理的这篇文章主要介绍了【数据结构】什么是数据结构?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
绪论

第一个很有意义,又没什么意义的问题:什么是数据结构??

其实,数据结构在计算机科学界至今没有标准的定义。个人根据各自的理解的不同而有不同的表述方法
  • Sartaj Sahni在他的《数据结构、算法与应用》一书中称:
       “数据结构是数据对象,以及存在于该对象的实例合组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
          他将数据对象(data object)定义为“一个数据对象是实例或值的集合”。
       
       
  • Clifford A.Shaffer在《数据结构与算法分析》一书中的定义是:“数据结构是 ADT(抽象数据类型Abstract Data Type) 的物理实现。”
  • 《算法导论》一书中定义:“数据结构是存储和组织数据的一种方式,以便于对数据进行访问和修改
其实,究竟什么是数据结构这个问题 真的并不是很重点。您将会在进一步学习它之后,有自己对它的一种理解。

我们更应该关心的是,学习数据结构 能为我们解决什么样问题?它给我们 带来什么样的好处

第一个问题,在程序里面,有一个家族,如果您知道一个人的名字,想知道他老爸是谁那么应该怎么做?
其中一个答案是,创建一个结构体,里面包含了本人的名字和他老爸的名字,这样,当我找到这个人的名字的时候,相应的就可以知道他老爸是谁了, 可是这样好像很浪费空间啊,每有一个老爸就要多一份存储名字的空间, 一个家族里面有很多的老爸啊,
那么我们可以换另外一种方法,我们不直接用老爸的名字,而是使用一个指向老爸包含名字的结构的指针,同样我们能够找到他老爸的名字,
如果您这样做了,那么您已经在使用数据结构了!

程序设计实际 = 好的结构 + 好的算法!
同样的问题,不同的设计方法,即使都能达到最后正确的结果,但是效果却很大的差别,有的可能只要一秒,有的可能需要几十秒,有的可能不需要太大的空间,有的可能很耗空间!


数据结构就是一门为您提供好的结构和好的算法的学科!

简单的讲,学习数据结构,您就可以编写更好的程序

数据结构相关的一些概念和术语:

  • 数据 :这个很好理解吧,所有计算机能处理的‘符号’都是数据。例如,整数、浮点数、图像、声音等;
  • 数据元素 :数据的基本单位,计算机对其作为整体看待的对象。例如,一本书(包括,书名、作者名等)
  • 数据项 :数据元素的最小单位,根据数据元素而定,对于书,书名是数据项。而对于名字这个数据元素,笔画是数据项;
  • 数据对象 :性质相同的数据元素的集合,是数据的一个子集。例如,整数数据对象是集合N= {...-2,-1,1,2...}
  • (数据)结构 :数据元素之间存在的关系;
  • 数据类型 :一个值的集合和定义在这个值集上的一组操作的总称;
  • 抽象数据类型:一个数学模型以及定义在该模型上的一组操作;

算法的设计要求:

  • 正确性:无可或非的应该把这个放在第一位!
  • 可读性:如果您的代码没有注释,没有缩进,还胡乱命名变量,如果我是老板,见一个开除一个;
  • 健壮性:指定是对错误输入的一个处理容忍的方法,而不至于导致程序异常
  • 效率:一般可以理解为算法执行的时间(时间复杂度);
  • 存储量:指算法执行过程中所需要的最大存储空间(空间复杂度);
推荐:《编程修养》,作为一个好的程序员,当然必须得有好的编程习惯!(PS:在我上传的资源里面有)
效率和存储量在一般情况下不好兼得,至于优先考虑哪个,要看具体的应用了。

要学会简单衡量(具体的在后面讨论):

  • 时间复杂度:简单的理解是,基本操作次数对应于问题规模n的函数,通常有O(1)、O(n)、O(n^2)....;
  • 空间复杂度:对于输入数据操作所需要的额外空间;

最后,我想说一句,数据结构真的不好学,就严蔚敏老师那本300页的数据结构(C语言版),都足足够看一两个月了。
但是,如果您想作为一名合格的程序员,相信我,学好的它吧,不管有多难!
在C++的STL中,很多数据结构已经实现了,例如:表list、堆stack、队列queue)
原文链接:https://www.f2er.com/datastructure/383043.html

猜你在找的数据结构相关文章