✅作者简介:大家好我是五维星空,目前是某国企的一名Java全栈程序员,热爱技术、喜欢代码,希望我的文章能给大家带来收获。
✅个人主页:五维星空的csdn博客
✅系列专栏:数据结构
✅如果觉得博主的文章还不错的话,请三连支持一下博主哦✅
本书笔记部分内容来源于中国大学MOOC:https://www.icourse163.org/course/ZJU-93001?tid=1466830443
1.基本概念
1.1 什么是数据结构
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。【摘选自百度百科】
例1:
书架上有一万本书,如果我们随便放,则会导致查找耗时久。较好的办法是按照科目或者书名首字母分类存放,以减少查找时间。
解决问题方法的效率, 跟数据的组织方式有关
例2:
写程序实现一个函数PrintN,使得 传入一个正整数为N的参数后,能顺序 打印从1到N的全部正整数
//效率高
void PrintN ( int N )
{
int i;
for ( i=1; i<=N; i++ ){
printf(“%d\n”, i );
}
return;
}
//递归效率低,N过大会死机。
void PrintN ( int N )
{
if ( N ){
PrintN( N – 1 );
printf(“%d\n”, N );
}
return;
}
解决问题方法的效率, 跟空间的利用效率有关
例3:
写程序计算给定多项式在给定点x处的值
//计算机做加法比乘除法快,乘法其实也是转换为加法做的。
//此算法乘法次数多,效率低
double f( int n, double a[], double x )
{
int i;
double p = a[0];
for ( i=1; i<=n; i++ )
p += (a[i] * pow(x, i));
return p;
}
上面的多项式可以转换成如下形式
//乘法次数少,效率高
double f( int n, double a[], double x )
{
int i;
double p = a[n];
for ( i=n; i>0; i-- )
p = a[i-1] + x*p;
return p;
}
解决问题方法的效率,跟算法的巧妙程度有关
数据对象在计算机中的组织方式
- 逻辑结构
- 物理存储结构
数据对象必定与一系列加在其上的操作相关联。
完成这些操作所用的方法就是算法。
抽象数据类型
- 数据对象集
- 数据集合相关联的操作集
抽象:描述数据类型的方法不依赖于具体实现
- 与存放数据的机器无关
- 与数据存储的物理结构无关
- 与实现操作的算法和编程语言均无关
只描述数据对象集和相关操作集“是什么”,并不涉及“如何做到”的问题。
例4:“矩阵”的抽象数据类型定义
下一小节我们来了解一下《什么是算法》,敬请期待~
五维星空 - 分享前后端技术!