数据结构
定义
什么是数据结构呢,其实这并没有一个统一的定义。
在《数据结构(C语言版)》中是这样定义的:
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科。
在老师给的PPT上的定义:
数据结构是一门讨论“描述世界实体的数学模型(非数值计算)以及其上的操作在计算机中如何表示和实现”的学科。
而MOOC上的《数据结构》课程则是这样说的:
数据对象在计算机中的组织方式分为逻辑结构、物理存储结构。
数据对象必定与一系列加在其上的操作相关联在数据结构中通常使用抽象数据类型
数据类型分为数据对象集、数据集合相关联的操作集
抽象:描述数据类型的方法不依赖于具体实现
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”这个问题。
这段话还蛮绕的,在我看来吧,数据结构一来是让我们学习一种解决问题的思想,主要是数据的创建、删除、插入、查找、释放。这门课并不涉及具体的代码实现;二来是教我们如何为解决一个问题而为问题中的数据构造一种结构模型,比如线性表、图、树、队列、栈之类的。(说的有失偏颇,可以跳过这段。。。不过学习过程中的确有这样的感觉)
解决问题方法的效率,和数据的组织方式有关。
就比如,现在有一组数据,要求你查找某一个数据在该数据集中的位置。
如果这组数据是随便放的,你查找起来会很麻烦吧。
如果这组数据是按照从小到大的顺序排放的,那查找起来就会简单许多了。
这组数据的放置方式就是数据的组织方式。
解决问题方法的效率,和空间的利用效率有关。
例如,写一个程序实现函数PrintN,使得传入一个正整数为N的参数后,能顺序打印从1到N的全部正整数
循环实现
void PrintN(int N){
int i;
for(i=1;i<=N;i++)
printf("%d\n",i);
}
递归实现
void PrintN(int N){
if(N){
PrintN(N-1);
printf("%d\n",N);
}
}
使用递归的话很占空间内存,因为每递归一次都要开辟新的空间来存储递归前的函数
而循环则是一开始就固定了空间。
当我输入100000时,用递归时编译器就不堪重负,罢工了。
输入完就没了
而循环则没有这个问题。
(只截取了结尾处 )