中级——003 数据结构与算法
数据结构的概念
数据结构是指数据元素的集合及元素间的相互关系和构造方法,结构就是元素之间的关系,在数据结构中,元素之间的相互关系是数据的逻辑结构。
按照逻辑关系的不同将数据结构分为线性结构和非线性结构,其中,线性结构包括线性表、栈、队列、串。
非线性结构主要包括树和图。数据元素及元素之间关系的存储形式称为存储结构,主要有顺序存储和链式存储两种基本方式。
线性表
线性表是指一个序列,常采用两种存储方法,顺序存储和链式存储,主要的基本操作是插入、删除和查找。
定义:存在唯一的第一元素和最后元素,除第一元素,每一个元素都只有一个直接前驱,除最后一个元素外,每个元素只有一个直接后继。
顺序存储
优点:可以随机存取表中的元素,按序号查找元素的速度很快
缺点:插入和删除操作需要移动元素

链式存储
优点:插入和删除操作不需要移动元素
缺点:只能顺序访问元素,不能对元素进行随机存取

双向链表:每个结点包含两个指针,分别指明当前元素的直接前驱和直接后继信息,可在两个方向上遍历链表中的元素。
循环链表:表尾结点的指针指向表中的第一个结点,可从表中任意结点开始遍历整个链表。
静态链表:借助数组来描述线性表的链式存储结构。
栈
栈和队列的逻辑结构与线性表相同,其特点在于运算受到了限制:栈按“先进后出”的规则进行修改,队列按“先进先出”的规则进行修改。
栈的顺序存储:用一组地址连续的存储单元一次存储自栈顶到栈底的数据元素,同时附设指针指示栈顶元素的位置。
栈的链式存储:克服顺序存储的栈可能存在上溢的不足,可以用链表存储栈中的元素。用链表作为存储结构的栈也称为链栈。由于栈中元素的插入和删除仅在栈顶一端进行,因此不必设置头结点,链表的头指针就是栈顶指针。
栈的应用:表达式求值、括号匹配,将递归过程转变为非递归过程等
队列
队列是先进先出的线性表,只允许在表的一端插入元素,而在表的另一端删除元素。允许插入元素的一端称为队尾,允许删除元素的一端称为队头。
队列的顺序存储:利用一组地址连续地存储单元存放队列中的元素。元素入队时,只修改队尾指针,元素出队时,只修改对头指针

队列的链式存储:可以给链队列添加一个头结点,并令头指针指向头结点,队列为空的判定条件是头指针和尾指针的值相同,且均指向头结点。
队列的应用:打印任务的打印队列、离散事件的计算机模拟等

串
串的定义:仅由字符构成的有限序列,是取值范围受限的线性表。
串的顺序存储结构:用一组地址连续的存储单元来存储串值的字符序列。
串的链式存储结构:每个结点中可以存储一个字符,也可以存储多个字符。

数组
一维数组是长度固定的线性表,数组中的每个数据元素类型相同。
数组结构的特点
数据元素数目固定
数据元素具有相同的类型
数据元素的下标关系具有上下界的约束且下标有序
取值操作,给定一组下标,读其对应的数据
赋值操作:给定一组下标,存储或修改其相对应的数据元素
数组的顺序存储:数组一般不作插入和删除运算,因此数组适合采用顺序存储结构。
矩阵
树
树是n个结点的有限集合。

二叉树的定义:是n个结点的有限集合,一个根结点不相交、分别称为左子树和右子树的二叉树所组成。

二叉树的顺序存储结构:对于完全二叉树而言简单且节省空间,对于一般二叉树不适用

二叉树的链式存储结构:

二叉树的遍历:遍历是按某种策略访问树中的每个结点,且仅访问一次。
图
图的存储结构:用邻接矩阵和邻接表

常用算法
算法的概念:有穷性、确定性、可行性、输入、输出
算法的优劣:正确性、可读性、健壮性、效率
算法与数据结构
算法的实现是建立在一定的数据结构基础之上的。
算法的描述
流程图


N/Y盒图

伪代码
决策表

算法效率
每个算法在计算机上执行时,都要消耗时间(CPU执行指令的时间)和使用存储空间资源,设计算法时需要考虑算法运行时所花费的时间和所使用的空间,以时间复杂度和空间复杂度表示。
排序:排序的稳定性、内部排序和外部排序
排序算法
1、简单排序
2、冒泡排序
3、简单选择排序
4、希尔排序
5、快速排序
6、堆排序
7、归并排序
8、外部排序

浙公网安备 33010602011771号