数据结构(第一章)

数据结构:数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。

“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”
——Sartaj Sahni 《数据结构,算法与应用》

“数据结构是ADT(抽象数据类型Abstract Data Type)的物理实现。”
——Clifford A.shaffer 《数据结构与算法分析》

“数据结构(data structure)是计算机存储,组织数据的方式。通常情况下,精心选择的数据结构可以带来最优效率的算法。”
——中文维基百科
数据结构是相互之间存在一种或者多种特定关系的数据元素的集合。
简单的理解就是数据之间的关系。
**数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。**数据不仅仅包括整型,实型等数值类型,还包括字符及声音,图像,视频,等非数值类型。
**简单的来说,我们这里所说的数据,其实就是符号。**必须具备以下两个前提。
1.可以输入到计算机中。
2.能被计算机程序处理。
数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。
数据项:一个元素可以由若干个数据项组成。
数据项是数据不可割分的最小单位
数据结构的分类
1.逻辑结构:是指数据对象中数据元素之间的相互关系。
可分为:
集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有任何其他关系。
线性结构:线性结构中的数据元素之间是一对一的关系。
树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。
图形结构:图形结构的数据元素是多对多的关系。
2.物理结构:是指数据的逻辑结构在计算机中的存储形式
可分为:
顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的
链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

描述数据结构,有一个很好的方法叫做抽象数据类型

数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。
在C语言中,按照取值的不同,数据类型可分为:
原子类型:是不可以再分解的基本类型,包括整型,实型,字符型等。
结构类型:由若干个类型组合而成,是可以再分解。例如,整型数组是由若干个整型数据组成的。
抽象数据类型:是指一个数学模型及定义在该模型的上的一组操作。
1.数据对象集。
2.数据集合相关联的操作集。
抽象:描述数据结构类型的方法不依赖于具体实现。
1.与存放数据的机器无关。
2.与数据存储的物理结构无关。
3.与实现操作的算法和编译语言无关。

总结
解决问题的方法的效率,跟数据的组织方式有关。
解决问题的方法的效率,跟空间的利用率有关。
解决问题的方法的效率,跟算法的巧妙程度有关。
说起数据结构,就不得不提起算法,因为数据结构和算法是不可分割的。
算法:是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或者多个操作。
1.一个有限的指令集。
2.接受一些输入(有些情况下不需要输入)。
3.产生输出。
4.一定在有限步骤之后终止。
5.每一条指令有充分的明确目标,不可以有歧义。
6.计算机能处理范围之内。
7.描述不依赖于任何一种计算机语言以及具体实现手段。
算法的特性
1.输入:算法具有零个或者多个输入。
2.输出:至少有一个或者多个输出。
3.有穷性:指算法在执行有限的步骤之后,自动结束,而不会出现无限循环,并且每一个步骤在可接受的时间内完成。
4.确定性:算法的每一个步骤都具有确定的含义,不会出现二义性。
5.可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限的次数完成。
算法设计的要求:
1.正确性:算法的正确性是指算法至少有应该具有输入,输出和加工处理无歧义性,能正确反映问题的需求,能得到问题的正确答案。
2.可读性:算法设计的另一目的是为了便于阅读,理解和交流。
3.健壮性:当输入的数据不合法时,算法也能做出相关处理,而不是产生异常或者莫名其妙的结果。
4.时间效率高和储存量低。
算法的复杂度
空间复杂度S(n)
根据算法写成的程序在执行时占用存储单元长度。这个长度往往与输入的数据的规模有关。空间复杂度过高的算法可能导致我们使用的内存超限,造成程序非正常中断。
时间复杂度T(n)
根据算法写成的程序在执行时耗费时间的长度。这个长度往往与输入的数据的规模有关。时间复杂度过高的算法可能导致我们在有生之年都等不到运行结果。
最坏情况复杂度Tworst(n)
平均复杂度Tavg(n)
Tavg(n) <=Tworst(n)
常见的时间复杂度所耗时间的大小排列:
O(1) < O(log(n)) < O(n) < O(nlog(n)) < O(n^2) < O(n^3) < O(2^n) < O(n!) <O(n^n)
最坏情况运算时间是一种保证,那就是运行时间将不会再坏了。在应用中,这是一种最重要的需求,通常,除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

发布了18 篇原创文章 · 获赞 0 · 访问量 447

猜你喜欢

转载自blog.csdn.net/JT518721/article/details/104263816