数据结构与算法概要
算法,对于数据结构与算法这门课程来说至关重要!在我的理解中算法就是 一条条指令的一个集合,其中的每一条指令又表示着一个或者多个操作,而算法又具有五个重要的特性:
1、有穷性:算法包括有限的操作步骤,在执行若干个算法之后要有结束的操作;
2、确定性:算法中的每一步都要有确切的含义,不能存在二义性;
3、可行性:算法中的每一个步骤都要能有效的执行;
4、算法中必须要有输入的一个或者多个值;
5、算法中必须要有输出的一个或者多个值;
除此之外,算法设计还必须满足以下要求:
1、 正确性:算法对于一切输入的合法的值都能得到满足要求的结果;
2、 可读性:人们对于算法的理解的难易程度,可读性好使算法更好理解;
3、 健壮性:对于非法的输入的值,算法能给出相应的响应;
4、 效率和低存储量:算法的时间复杂度和算法的空间复杂度;
说完算法,再来说说其他部分
一、线性表:
线性表又分为两个部分:顺序表、链表
顺序表:每个元素都前后有序、整整齐齐地站在一起,插入和删除都需要移动元素
链表:不是地址连续的空间,他的插入和删除不需要移动元素,它看到内存有空余地址就可以毫无顾忌地挤进去;
二、堆栈和队列
其实堆栈和队列最大的全部就在于内部因素的出入的顺序先后!
堆栈的特点是”后进先出“,而队列的特点与之相反是”后进后出“!
三、字符串:
字符串是由零个或多个字符组成的有限序列,并且拥有自己的基本算法!
字符串的操作大致可以分为以下几种:1、初始化;2、赋值;3、求长度;4、比较(比较字符串的内容是否相等,而不是结果);5、插入;6、删除;7、取子串;8、查找子串;
9、替换子串;
四、数组与矩阵
数组:有序的元素序列,既多个元素的集合(数组又包括一维数组、二维数组等等)
矩阵:一个按照长方阵列排序的复数和实数集合
五:树模型:
树型结构是由于n个节点组成的有限集合,能够有效反映出元素与元素之间的层级关系;
而二叉树又是树型结构中最经典,最常用的的结构!当我们需要二叉树中的某个元素时可以采用遍历的方法,虽然遍历二叉树规定要先遍历左子树,再遍历右子树,但遍历的次序却又可以分为三种:先根遍历、中根遍历、后根遍历;
先根遍历:先拜访根节点,再到左子树,再到右子树;
中根遍历:根放在中间,顺序为左子树->根->右子树
后根遍历:先左子树,再到右子树,根节点在最后;
六、图
图结构是一种比树结构更复杂的非线性结构,任意一个节点都可以存在多个前驱和后继;而图的遍历又与树的遍有所不,图的遍是从某一顶点出发,遍历其余顶点,且使每个顶点仅被动访问一次!遍历的方法又分为深度优先搜索(DFS)、广度优先搜索(BFS)两种;
七、查找
1、静态查找
静态查又分为顺序查找(按照顺序依次进行比较查找)、二分查找(只适用于对有序顺序表进行查找,每次查找要么成功,结束查找,要么失败,范围缩小一半再进行查找)、分块查找(又称索引顺序查找,是一种介于顺序查找与二分查找之间的查找方法)
2、动态查找:动态查找的特点是表结构本身是在查找中动态生成,如表中存在则查找成功,包吃住则在适当位置插入!
3、哈希查找:以每个记录的的关键字K为自变量,通过一种函数H(K)计算出一个函数值,这个值作为连续存储空间的单元地址(既下标),将该记录存储到这个单元中!