参考来源
java计算机二级内容总结
百度图片
C/C++版数据结构之树<一>
线性结构
如果一个数据满足下面两个条件:1)有且只有一个根节点;2)每一个节点最多有一个前件,也最多有一个后件,则称该数据为线性结构。线性结构又叫线性表
常见的线性结构包括:串(字符串)、队列、链表和栈等
非线性结构
树形结构
树形结构中的数据元素之间存在一种一对多的层次关系,每一个元素最多有一个前驱,能够有多个后继
图状结构
该结构的数据元素之间存在着多对多的任意关系,图状结构也称为网状结构
集合结构
数据元素之间除了同属一个集合外,不存在其他关系。
其他结构
常见的非线性结构包括:广义表,树结构,图结构,多维数组等。
存储结构
存储结构主要分为顺序存储、链式存储、索引存储和散列(哈希)存储。一个完整的存储结构必须能够存储数据元素,以及元素之间的逻辑关系
顺序存储
顺序存储为线性结构
数据被存储在一组连续的存储单元中,其数据间的逻辑关系和物理关系是一致的。特点:易查难插(删)
链式存储
线性结构
借助元素地址指针表示数据的逻辑结构,每一个元素都会包含指向下一个元素的指针,这种结构须要在节点上附加一个指针项,指出后继节点的位置,即每一个节点存储单元包含两个部分:[数据项,指针项]。特点:易插(删)难查
索引存储
非线性结构
存储在数据元素信息的同时还建立附加的索引表。索引表中的所有索引项是有序排列的。特点:查找效率高,但额外增加了空间的开销。
散列存储(哈希表)
非线性结构
根据元素的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该元素的存储地址。特点:查找速度快。
数据的运算
算法
一个算法就是对特定问题求解步骤的一种描述
算法规定了求解给定类型问题所需的全部处理步骤以及执行顺序,使得问题能在有限时间内机械的求解,再具体一点,算法是一段有穷的指令序列,算法必须能使用某种语言描述
算法特性
1.有穷性:指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成;
2.确定性:算法的每一步骤都具有确定的含义,不会出现二义性;
3.可行性:算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成;
4.输入:是指算法具有零个或多个输入;
5.输出:是指算法至少有一个或多个输出;
算法的分类
冒泡排序
简介
时间复杂度
代码
选择排序
简介
时间复杂度
代码
插入排序
简介
时间复杂度
代码
希尔排序
简介
时间复杂度
代码
归并排序
简介
时间复杂度
代码
快速排序
简介
时间复杂度
代码
堆排序
简介
时间复杂度
代码
算法的性能
算法的效率作为判断算法优劣的标准。一个算法的优劣往往通过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度两个方面。
时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。
时间复杂度
即通常所说的算法执行所需要耗费的时间,时间越短,算法越好。
算法的时间度量,记作:T(n)=O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。
常见的时间复杂度量级有
一般而言,常常以算法执行时间作为算法优劣的主要衡量指标
空间复杂度
对一个算法在运行过程中临时占用存储空间大小的量度
常见的数据结构
数组
链表
概述
链表是一种顺序结构,这种存储结构具有在物理上存在非连续的特点,链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。
链式存储方式既可用于表示线性结构,也可用于表示非线性结构。
链表分类
单链表
只能沿正向遍历项目
双链表
可以在前进和后退方向上遍历项目。节点由一个称为上一个的附加指针组成,指向上一个节点
循环链接列表
静态链表
静态链表可以不依赖指针保存数据 可以用数组下表模拟指针 保存数据的地址;
栈
概述
栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照"后进先出"或“先进后出”的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈中没有数据时,称为空栈。
栈的顺序存储及其运算
栈的基本运算有3种:入栈、退栈与读栈顶元素。
入栈运算:在栈顶位置插入一个新元素;
退栈运算:取出栈顶元素并赋值给一个指定的变量;
读栈顶元素:将栈顶元素赋值给一个指定的变量;
队列
概述
队列是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。
队列操作
进队:将元素插入队列的末尾。
出队:从队列的开头删除元素
树
概述
树是典型的非线性结构,在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。
树的相关概念
父节点:每一个节点都只有一个前件,称为父节点,没有前件的节点只有一个,称为根节点;
子节点:每一个节点可以有多个后件,称为该节点的子节点,没有后件的节点,称为叶子节点;
度:一个节点所拥有的后件个数称为该节点的度,所有节点中最大的度称为树的度;
深度:树中结点的最大层次数称为树的深度或高度;
结点的度:一个结点拥有的子树数目称为该结点的度。
树的度:一棵树中最大的结点度数。
结点的层次(Level):从根结点开始定义根为第一层,它的孩子为第二层,依此类推
有序树:树中的各子树自左向右有序的称为有序树。
祖先:是指从根结点到该结点之间所有的结点。
A是根结点,A结点的度是3,D结点的度是3;因为3是结点的度的最大值,所以这棵树的度是3;E、G、H、I、K、L和M是叶子结点。A在树的第一层,B、C、D在树的第二层,E、F、G、H、I、J在树的第三层,K、L、M在树的第四层;树的深度是4。树从左往右是有序的,这是一棵有序树;E结点的祖先是A、B。
二叉树的性质
每个结点最多只有两个子结点,可以没有或者只有一个。左子树和右子树是有顺序的,次序不能任意颠倒。
二叉树的遍历
(1)先序遍历(先根遍历)
-
访问根结点
-
先序遍历左子树
-
先序遍历右子树
(2)中序遍历(中根遍历)
-
中序遍历左子树
-
访问根结点
-
中序遍历右子树
(3)后序遍历(后根遍历)
-
后序遍历左子树
-
后序遍历右子树
-
访问根结点
例
对于上图遍历结果:
先序遍历:ABDECFG
中序遍历:DBEAFCG
后序遍历:DEBFGCA
树的种类
无序树
树中的各子树自左向右无序的称为无序树
有序树
树中任意节点的子结点之间有顺序关系,这种树称为有序树
二叉树
二叉树又叫二分树,它的特点是每个结点最多只有二棵子树,也就是二叉树中没有度大于2的结点。二叉树的子树有左右之分,严格区分左孩子、右孩子,其次序不能颠倒。
完全二叉树
一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树
别人的理解:完全二叉树:对于一个树高为h的二叉树,如果其第0层至第h-1层的节点都满。如果最下面一层节点不满,则所有的节点在左边的连续排列,空位都在右边。这样的二叉树就是一棵完全二叉树。
或
除最后一层外,每一层上的结点数都达到最大值,在最后一层上只缺少右边的若干结点。满二叉树也是完全二叉树
满二叉树
一棵深度为k且有2k-1个结点的二叉树称为满二叉树。
除最后一层(叶子节点)外,每一层上的所有结点都有两个子结点。
平衡二叉树
特点
1.它必须是二叉查找树。
2.每个节点的左子树和右子树的高度差至多为1。
AVL树的查找、插入、删除操作在平均和最坏的情况下都是O(logn)
二叉查找树
若它的左子树不为空,则左子树上所有节点的值均小于它的根节点的值;若它的右子树不为空,则右子树上所有节点的值均大于它的根节点的值;它的左、右子树也分别是二叉排序树。说明它是一颗有顺序的树,左子树节点的值小于根节点的值,右子树节点的值大于根节点的值。
红黑树
特性
1.根节点必须是黑色。
2.任意从根到叶子的路径不包含连续的红色节点。
3.任意从根到叶子的路径的黑色节点总数相同。
堆
特点
根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构
堆的应用
可以在O(log n)时间内使用堆来实现队列功能。
用于查找给定数组中k个最小(或最大)的值。
用于堆排序算法
图
概述
图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系。
有向图
一个图结构中,边是有方向性的,那么这种图就称为有向图
无向图
如果一个图结构中,所有的边都没有方向性,那么这种图便称为无向图
程序设计基础
软件工程基础
数据库设计基础
java语言程序设计
Java图形用户界面
https://blog.csdn.net/xiaoxianer321/article/details/120407071
todo
整理算法分类,和时间复杂度