数据结构:相互之间存在关系的数据元素的集合,描述的是数据与数据之间的结构关系,数据元素之间的存在的关系会产生不同的结构,例如(数组、队列、树、图等结构),这个结构其实也就是相互之间存在关系数据元素的集合,因此也就是数据结构
算法:解决问题的步骤
一、总结:
1、程序 = 数据结构 + 算法 。数据是程序的中心。数据结构和算法两个概念间的逻辑关系贯穿了整个程序世界,首先二者表现为不可分割的关系。没有数据间的有机关系,程序根本无法设计。
2、数据结构与算法关系:数据结构是底层,算法高层。数据结构为算法提供服务。算法围绕数据结构操作。
3、解决问题(算法)需要选择正确的数据结构。例如:算法中经常需要对数据进行增加和删除用链表数据结构效率高,数组数据结构因为增加和删除需要移动数字每个元素所有效率低。
4、数据结构特点:每种数据结构都具有自己的特点。例如:队列:先进先出。栈:先进后出。等等
5、算法的特性:算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。
6、数据结构应用:数据结构往往同高效的检索算法、索引技术、排序算法有关
7、数据结构(逻辑数据结构)通过计算机语言来实现数据结构(存储数据结构)。例如:树型数据结构:通过计算机语言中的数组(节点)和指针(指向父节点)来实现。
8、存储结构:逻辑数据结构的实现。存储结构通过计算机语言实现。 例如:堆数据结构,堆是一棵完全二叉树,所以适宜采用顺序存储结构(顺序存储:数组),这样能够充分利用存储空间。
9、算法目的:算法是为数据结构服务。例如:数据结构通常伴随有查找算法、排序算法等
10、数据结构的优劣:一种数据结构的优劣是在实现其各种运算的算法中体现的。
二、数据结构:分为逻辑数据结构和存储数据结构两种
(1)顺序存储方法(顺序存储结构)
(2)链接存储方法(链式存储结构)
同一种逻辑结构可采用不同的存储方法(以上两种之一或组合),这主要考虑的是运算方便及算法的时空要求。
参考https://www.cnblogs.com/chenweichu/p/6394026.html
数据结构:相互之间存在关系的数据元素的集合,描述的是数据与数据之间的结构关系,数据元素之间的存在的关系会产生不同的结构,例如(数组、队列、树、图等结构),这个结构其实也就是相互之间存在关系数据元素的集合,因此也就是数据结构
算法是解决特定问题的有限求解步骤。
数据结构为算法提供服务。算法围绕数据结构操作
问题的求解,需要合适的数据结构,需要合适的算法,才能完美的将一个问题解决好。
所以,某位学者将“程序 = 数据结构 + 算法” 是有道理的。
四、为什么数据元素之间的存在的关系会产生不同的结构呢?
存储结构:逻辑数据结构的实现。存储结构通过计算机语言实现。
也就是说,数据结构之间存在的关系产生逻辑数据结构,逻辑数据结构的实现进而实现了物理数据结构。因此,数据结构之间存在的关系会产生逻辑数据结构和物理数据结构。
举个例子,逻辑结构中的线性结构中的线性表,有两种表示方式:顺序表和链表,实现之后就存在顺序表示和链接表示的两种物理结构。
五、什么是抽象数据类型?
数据结构操组的对象是数据元素,即他们有相同的属性(属性也取决于观察者的角度),它们之间的存在的关系会产生不同的结构,数据元素之间的关系+操作构成了数据类型,对已有的数据类型进行抽象就构成了抽象数据类型(ADT),就是封装了值和操作的模型。
举个例子,在C语言里面,我们要用链表,栈,都会定义链表、栈、线性表的类型,这些类型具有数据元素的关系和操作,其实这些类型就是抽象数据类型。
struct Node;
typedef struct Node * PNode; //结点类型
struct Node
{
int data;
PNode next;
};
typedef struct Node * List; //链表类型 ,这个是抽象数据类型
我们要使用单链表这个数据结构来解决问题的前提是首先得创建一个单链表数据结构。创建单链表数据结构,就得自定义个单链表的抽象数据类型,抽象数据类型只是对数据结构定义一组逻辑操作,没有具体的实现。在实际应用中,必须实现这个抽象数据类型,才能使用它们,而实现抽象数据类型依赖于数据存储结构。
六、抽象数据类型似乎有点像数据结构?
对,确实很像,但要在不同的角度上看,抽象数据类型角度来看,他是一个数据类型,从数据结构来看,他是一个数据元素的集合。例如,链表List,他是一个抽象数据类型,更相对于编程上面;他是链表结构,更相对于数据元素上面。
(以上仅个人理解,说的不对,请谅解并留言)