2019-2020-1 20191315《信息安全专业导论》第七周学习总结
教材学习内容总结
第八章学习了列表、栈、队列、树和图都是有用的抽象复合结构。每种结构都有自己特定的属性和确保这些属性的操作。所有抽象复合结构都有插人和删除元素的操作。列表和树还有在结构中查找元素的操作。列表和树有着同样的属性:元素可以被插人、删除和检索。元素可以被插人栈中,但是删除和返回的元素是最后一一个被插人栈中的元素,也就是在栈中停留时间最短的那个元素。元素可以被插人队列,但是删除和返回的元素是第一一个被放人队列的,也就是在队列中停留时间最长的那个元素。列表、栈、队列和树都仅仅是容器结构,但是图则更加复杂。一个丰富的数学算法可以被应用到图的信息中。我们已经探讨过其中的三种:广度优先搜索、深度优先搜索和单源最短路搜索。子程序声明使得子算法可以独立实现。- 一个子程序可能会有值返回,在这种情况下,子程序被调用的方式是用它的名字和参数的表达式。子程序也可能是没有返回值的(空),在这种情况下,调用程序用子程序的名字作为声明。子程序发送和接收到的数据通过使用参数列表来传输。
1、抽象数据类型(ADT):属性(数据和操作)明确地与特定实现分离的容器。应用(或用户层)是特定问题中的数据的视图。逻辑或抽象层是数据值域和处理他们的操作的抽象视图,实现层明确表示出了存放数据项的结构,并对操作码进行操作。每种ADT都具有特定的行为,称它们为容器是因为它们存在的唯一目的就是存放其他对象。
2、容器:存放和操作其他对象的对象
3、栈与队列
栈:是一种抽象复合结构,只能从一端访问栈中的元素,可以在第一个位置插入元素,也可以删除第一个元素。我们取走的第一个元素正是最后放入其中的那个元素。
栈的另一种描述方法:删除的项总是在栈中时间最短的项目,插入操作没有任何约束,整个LIFO行为都体现在删除操作上。栈是使元素以相反的顺序输出。
队列:队列中的项目从一端入,从另一端出。FIFO,先进先出,与栈不同。插入操作在尾部进行,删除操作在队列的头部进行。
队列的另一种说法:删除的总是在队列中时间最长的项目
4、列表
三个属性:项目是同构的,项目是线性的,列表是变长的。所谓线性则指的就是每个项目除了第一个都有一个独特的组成部分在它之前,除了最后一个也都有一个独特的组成部分在它之后。列表可被形象化为链式结构。
栈、队列、列表的不同:栈和队列对删除操作有全部的定义,列表通常提供插入一个项目的操作,删除一个项目的操作,检索一个项目是否存在以及报告列表中项目数量。所以列表中的项目必须要能够相互比较。列表不是数组,但他们三者本质上都是线性的,只模拟了一种数据关系
5、链式结构:一个将数据项和找到下一项位置的信息保存到同一容器的实现方法。
6、树:分层体系结构,通常说二叉树,即最多有两个子节点的树。一个节点至多只有一个指向它的节点
7、二叉树:二叉树是一种抽象结构,每个节点可以有0、1、2个后继节点,叫做子女。树的头部是一个起始节点,叫做根,他不是任何节点的子女,存放在节点左边的叫左子女,存放在右边的叫做右子女。如果一个节点没有子女,这个节点叫做树叶,称为叶节点。除了根节点外,每个节点只有一个父母节点,根节点还是树中其他所有节点的先辈。
8、二叉检索树:树类似于一个无序列表,搜索的依据可以记为:任何节点的值都要大于它的左子树中所有节点的值,都要小于它的右子树中所有节点的值。所以当你想要搜索一个在树中存在的数的话,先从源头找起,先看看和根相比,这个数字是大是小,大在右边,小在左边,然后继续与左子树或者右子树进行比较,直到找到所想要的数字。如果这个数字并不存在于其中,比较方式也很类似,仍然按照上面的方法但是会得出矛盾的结论。这样就可以证明这个数字是不存在于二叉树中的。
二叉检索树的搜索效率:其效率与树的形状有直接关系。树的形状是由项目插入树的顺序决定的。
9、如何输出二叉搜索树中的数字 : 按算法升序输出了二叉检索树中的项目
10、图
图:由一组节点和一组把节点相互连接起来的边构成的数据结构
顶点:图中的节点
边:表示图中两个节点的连接的顶点对
11、图的分类
无向图:其中的边没有方向的图
有向图:其中的边是从一个顶点指向另一个顶点(或同一个顶点)的图
加权图:有附加值的图
邻顶点 : 通过边连接起来的两个顶点
路径:连接图中两个顶点的一系列顶点
12、如何创建图:
(1)、在表格中添加一个顶点
(2)、在表格中添加一条边
(3)、在表格中添加一个权值
13、图算法
深度优先搜索、广度优先搜索、单源最短路搜索
深度优先搜索:检查第一个与起点相邻的顶点,如果是他就结束,如果不是他就检查所有与第一个顶点相邻的顶点
广度优先搜索:按照先后顺序进行搜索。让对头走,把与这个走了的人相邻的压进来
单源最短路搜索:这个计算比较复杂,加到最小即可
14、子程序:算法和子算法之间的计算
15、参数传递
参数列表:程序中两部分之间的通信机制
形参:列在子程序名后的括号中的标识符
实参:子程序调用中列在括号中的标识符
值参:由调用单元传入实参的副本
引用参数:由调用单元传入实参的地址的形参
教材学习中的问题及解决过程
- 问题一:如何构造二叉检索树?
- 问题一的解决过程:插入节点的整体流程:
1.把父节点设置为当前节点,即根节点。
如果新节点内的数据值小于当前节点内的数据值,那么把当前节点设置为当前节点的左子节点。如果新节点内的数据值大于当前节点内的数据值,那么就跳到步骤 4。
2.如果当前节点的左子节点的数值为空(null),就把新节点插入在这里并且退出循环。否则,跳到 while 循环的下一次循环操作中。
3.把当前节点设置为当前节点的右子节点。
4.如果当前节点的右子节点的数值为空(null),就把新节点插入在这里并且退出循环。否则,跳到 while 循环的下一次循环操作中。 - 问题二:对于链表了解的不够充分
- 问题二的解决过程:在博客园上查了相关资料,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。有链表的初始化、创建、元素的插入和删除、链表的遍历、元素的查询、链表的删除、链表的逆序以及判断链表是否有环等这些常用操作。
代码截图
学习思考感悟
学习过程是不断自主学习理解的过程,在完成题目中对教材内容有了更深的熟悉掌握,通过查资料了解更多的知识。