2022-2023-1 20221318 《计算机基础和程序设计》第七周学习总结

作业信息
这个作业属于那个班级 https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP
作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK03
作业目标 学习《计算机科学概论》第八章
作业正文 https://i.cnblogs.com/posts/edit;postId=16777355

教材内容总结
在第八章“抽象数据类型与子程序”中,

  • 抽象数据类型:数据结构、容器
  • 栈:是一种抽象数据结构,只能从一端访问栈中的元素。可以在第一个位置插入元素,也可以删除第一个元素。另一种描述栈的访问行为的是删除的项总是在栈中时间最短的项目。
  • 队列:队列也是一种抽象结构,队列中的项目从一端入,从另一端出。另一种描述栈的访问行为的是删除的项总是在栈中时间最长的项目。
  • 列表:列表有三个属性特征:项目是同构的,项目是线性的,列表是变长的。
    列表也可以被形象化为链式结构————将数据项和找到下一项位置的信息保存到同一容器。
  • 树:1.二叉树:是一种抽象结构,每个节点后可以有两个后继节点
    2.二叉检索树
    (1)在二叉检索树搜索

    (2)构造二叉检索树

    (3)输出二叉检索树中的数据
  • 图:1.分类:有向图、无向图
    2.创建图
    3.图像法
    (1)深度优先搜索

    (2)广度优先算法

    (3)单源最短路搜索
  • 子程序:1.参数传递
    2.值参与引用参数

学习中遇到的问题
Q:数组和列表的主要区别有哪些?
A:1.列表list中的元素的数据类型可以不一样。数组array里的元素的数据类型必须一样;
2.列表list不可以进行数学四则运算,数组array可以进行数学四则运算;
3.相对于array,列表会使用更多的存储空间。

Q:如何理解值参数和引用参数?
A:一.值参数:
未用ref或out修饰符声明的参数为值参数。使用值参数,通过将实参的值复制到形参的方式,把数据传递到方法。方法被调用时,系统做如下操作。
* 在栈中为形参分配空间。
* 复制实参到形参。
值参数的实参不一定是变量。它可以是任何能计算成相应数据类型的表达式。

   我们用图来表示实参和形参在方法执行的不同阶段的值:
   在方法被调用前,用作实参的a2已经在栈里了。在方法开始前,系统在栈中为形参分配空间,并从实参复制值。 
   * 因为a1是引用类型,所以引用被复制,结果实参和形参都引用堆中的同一对象。
   * 因为a2是值类型,所以值被复制,产生了一个独立的数据项。
   在方法的结尾,f2和对象f1的字段都被加上了5。方法执行后,形参从栈中弹出。
   * 值类型,它的值不受方法行为的影响。
   * 引用类型,但它的值被方法的行为改变了。


二. 引用参数:
使用引用参数时,必须在方法的申明和调用中都使用关键字ref修饰符。实参必须是变量,在用作实参前必须被赋值。如果是引用类型的变量,可以赋值为一个引用或者null值。
同样,还是用图来阐明方法执行的不同阶段实参和形参的值。
* 在方法被调用前,用作实参的a1,a2已经在栈里了。
* 在方法的开始,形参名被设置为实参的别名。变量a1和f1引用相同的内存位置,a2和f2引用相同的内存位置。
* 在方法的结束位置,f2和对象f1的字段都被加上了5。
* 方法执行之后,形参的名称已经失效,但是值类型a2和引用类型a1所指向的对象的值都被方法内的行为改变了。

Q:我在看书是并不太理解什么是深度优先算法,我在网上查询相关资料后,了解到深度优先搜索(Depth First Search)简称深搜或者 DFS,是遍历图存储结构的一种算法,既适用于无向图(网),也适用于有向图(网)。所谓图的遍历,简单理解就是逐个访问图中的顶点,确保每个顶点都只访问一次。以下图为例:

初始状态下,无向图中的所有顶点都是没有被访问过的,因此可以任选一个顶点出发,遍历整个无向图。假设从 V1 顶点开始,由于不重复的原则,假设走的路径是如下图

和 V5 相邻的顶点有两个,分别是 V2 和 V8,它们都已经访问过了。也就是说,此时从 V5 出发,找不到任何未被访问的顶点了。
这种情况下,深度优先搜索算法会回退到之前的顶点,查看先前有没有漏掉的、尚未访问的顶点:
* 从 V5 回退到 V8,找不到尚未访问的顶点;
* 从 V8 回退到 V4,还是找不到尚未访问的顶点;
* 从 V4 回退到 V2,也还是找不到尚未访问的顶点;
* 从 V2 回退到 V1,发现 V3 还没有被访问。
于是,下一个要访问的顶点就是 V3,最终搜索的路线如下图所示:

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
第一周 0/0 3/3 20/20
第二周 105/105 2/5 20/40
第三周 150/255 2/7 20/60
第四周 210/465 2/9 20/80
第五周 280/745 2/11 20/100
第六周 320/1065 1/12 20/120
第七周 400/1465 1/13 20/20
posted @ 2022-10-15 20:23  倪怡丹  阅读(29)  评论(0编辑  收藏  举报