数据结构与算法概述

来源:互联网 发布:php header用法 编辑:程序博客网 时间:2024/05/22 00:25

什么是数据结构:

数据结构是计算机存储、组织数据的方式。

数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。

记为:Data_Structure=(D,R)
其中D是数据元素的集合,R是该集合中所有元素之间的关系的有限集合。

所以总结为:
数据结构由两部分组成
1.数据集合
2.数据之间的关系

数据结构涉及知识点

线性表(顺序表、链表)
栈、队列
数组
树(二叉树、赫夫曼树、B树、B+树、森林等)
图(最短路径问题)
查找算法
排序算法

概念认识

物理结构(存储结构or映像):数据结构在计算机中的表示。
结点(元素):若干bit组成的一个数据元素。
元素之间的关系:顺序映像(借助元素的相对物理位置表示元素之间的逻辑关系)、非顺序映像(c中需要指针,java需要引用)。

算法

概念:

特定问题求解步骤的描述,指令是有限序列,每条指令包含一个或多个操作。

特性:

有穷性、确定性、可行性、输入、输出。

要求:正确性、可读性、健壮性、效率(时间)与低存储量需求

效率取决因素:

1、算法策略
2、问题规模
3、编程语言(越高级效率越低)
4、机器代码质量
5、机器执行指令速度(电脑好不好)

一个算法由控制结构(顺序、循环、分支)和原操作构成

算法复杂度的表示

1、时间复杂度(T(n)表示)
T(n)=O(f(n))
2、 空间复杂度(S(n)表示)
要会计算常见算法的时间复杂度和空间复杂度(比如递归、排序等)

最后,我想引用一段话作为概述的结尾:

作者:涛吴
链接:https://www.zhihu.com/question/20012022/answer/13688683
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

如果说 Java 是自动档轿车,C 就是手动档吉普。数据结构呢?是变速箱的工作原理。你完全可以不知道变速箱怎样工作,就把自动档的车子从 A 开到 B,而且未必就比懂得的人慢。写程序这件事,和开车一样,经验可以起到很大作用,但如果你不知道底层是怎么工作的,就永远只能开车,既不会修车,也不能造车。如果你对这两件事都不感兴趣也就罢了,数据结构懂得用就好。但若你此生在编程领域还有点更高的追求,数据结构是绕不开的课题。

Java替你做了太多事情,那么多动不动还支持范型的容器类,加上垃圾收集,会让你觉得编程很容易。但你有没有想过,那些容器类是怎么来的,以及它存在的意义是什么?最粗浅的,比如ArrayList 这个类,你想过它的存在是多么大的福利吗——一个可以随机访问、自动增加容量的数组,这种东西 C是没有的,要自己实现。但是,具体怎么实现呢?如果你对这种问题感兴趣,那数据结构是一定要看的。甚至,面向对象编程范式本身,就是个数据结构问题:怎么才能把数据和操作数据的方法封装到一起,来造出 class / prototype 这种东西?

此外,很重要的一点是,数据结构也是通向各种实用算法的基石,所以学习数据结构都是提升内力的事情。

有人说过学习的三个层次:

知其然、知其所以然、造其所以然

想要造轮子吗?

让我们开始数据结构和算法的征程吧!

0 0