一、什么是数据结构?
数据结构事实上是这个样子的:
—— 程序设计 = 数据结构 + 算法
—— 再简单的来说数据结构就是关系,没错,就是数据元素之间存在的一种或者多种特定关系的集合。
(比如说人与人之间就有剪不断理还乱的关系。)
二、逻辑结构和物理结构
逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。
- 集合结构:
- 线性结构
- 树形结构
- 图形结构
物理结构:是指数据的逻辑结构在计算机中的存储形式。
实际上研究的就是如何把数据元素存储到计算机的存储器中。
存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。
三、数据元素的存储形式
数据元素的存储结构形式有两种:顺序存储和链式存储。
顺序存储:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。(比如数组)
链式存储:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
相对于顺序存储结构,链式存储结构不仅要存数据还要存一个指向下一个元素的指针。
四、什么是算法?
打个比方,其实数据结构和算法的关系就比如像好基友一辈子的关系。
事实上,数据结构和算法也有类似的关系。只谈数据结构,我们可以在很短的时间内就把几种重要的数据结构介绍完。不过听完后,你可能会没有什么感觉,不知道这些数据结构有啥用处。
现在从一个有关从1加到100的小故事作为开端:
int i, sum=0, n=100;
for(i=1; i<=n; i++)
{
sum = sum +i;
}
printf("%d",sum);
对比下,用高斯算法,我们可以这样写:
int i, sum=0, n=100;
sum = (1+n)*n/2;
printf("%d",sum);
可能以计算机的神速,两个算法都可以秒杀解决掉!但是,如果我们把条件换成1加到1千万,或者1加到1千亿,差距就可想而知了,甚至人脑都可以比电脑算得快。所以一个好的算法是多少的伟大!
所以什么是算法?
——简单说,算法就是你泡妞儿的技巧和方式。
五、算法的特性
- 输入
——算法具有零个或者多个输入 - 输出
——算法至少有一个或者多个输出 - 有穷性
——每个步骤在可接受的时间内完成 - 确定性
——算法每个步骤都具有确定的含义,不会出现二义性。 - 可行性
——算法的每一步都必须是可行的。
六、算法设计的要求
尽管算法不唯一,但我们要学习掌握一些好的算法,对我们解决问题都很有帮助!
- 正确性:
——算法程序没有语法错误。
——算法程序对于合法输入能够产生满足要求的输出。
——算法程序对于非法输入能够产生满足规格的说明。
——算法程序对于故意刁难的测试输入都有满足要求的输出结果。 - 可读性
- 健壮性
- 时间效率高和存储量低
好的算法犹如老婆,应该具备时间效率高和存储量低的特点。所以在设计算法的时候我们应该尽量思考这两个方面的问题。