20172322 2018-2019-1《程序设计与数据结构》课程总结
20172322 2018-2019-1《程序设计与数据结构》课程总结
每周作业链接汇总
- 第一次作业:什么叫高质量软件;学习教材1、2章节。
- 第二次作业:学习教材3、4章节,栈相关知识的学习,利用数组和链实现栈。
- 第三次作业:学习教材第5章,队列相关知识的学习;完成技能调查表。
- 第四次作业:学习教材第6章,列表相关只是的学习,有序列表、无序列表、索引列表等。
- 第五次作业:学习教材第9章,选择与排序相关知识的学习。
- 第六次作业:学习教材第10章,树相关知识的学习。
- 第七次作业:学习教材第11章,二叉查找树相关知识的学习。
- 第八次作业:学习教材第12章,堆相关知识的学习。
- 第九次作业:学习教材第15章,图相关知识的学习。
自认为写得最好一篇博客是?为什么?
- 自认为写的最好的是:第七次作业,原因如下:
- 它是我本学期唯一一篇加分的博客。
- 是本学期首次对博客的字体进行修改,使得博客整体看来更为美观。
- 博客图文并茂,在重点的地方加粗或改变颜色,使得博客轻重分明。
作业中阅读量最高的一篇博客是?谈谈经验
-
本学期阅读量最高的是第一次作业
-
经验:
- 想要阅读量高,博客一定要交的早,这样后面的同学就可以向着看一下别人写的博客,这样阅读量就上去了。
实验报告链接汇总
团队项目报告链接汇总
代码托管链接:
给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
- 代码量显然已经达到,甚至接近代码量目标的三倍。虽然在这14617行代码中,有效代码行数是9833行,这也接近目标的两倍。
- 虽说代码量这么多,但是由于这学期课程的原因,许多代码书上已经给出,需要自己实践的代码也就只有每周的PP项目和实验项目。
- 真正有用的代码我觉得跟上学期差不多,也就2000行左右甚至更少。经过接近一年的学习,自己对于各种方法的利用又有了一定的提升。
- 学无止境,或许IDEA的代码量会停留在这个值,但是我相信在之后的学习中我会更多的动手实践。
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- 在编程的智慧中提到“反复推敲代码”与“写简单代码”,经过近一年的学习我体会更深了,很多时候对于一个简单的实现有非常多种方法,也有非常多种数据结构可以利用,但是什么样的代码是最简单的代码呢?或许就如书上所说的时间复杂度比较低的代码运算较快,但是很多时候时间复杂度的较低是用空间复杂度的牺牲换来的,所以仅仅注重运算效率可能并不是最简单的代码。在我们现在的阶段,我们所学的知识,所能用到的方法与我们的储存相比很小,但是对于一些大项目来说,空间也是一个必须考虑的因素。路漫漫其修远兮,我们还有非常长的路需要走。
- “加点代码,改点代码是理解的最好方式”这句话在上学期时我有些抵触,但是在在这学期我完全改变了自己的看法,当自己没有思路去实现一些东西时,查查别人的想法,借鉴别人的代码再加以修改真的可以让自己一下子豁然开朗,不足就学,不要担心,我们现在只是入门阶段的新人,有优秀的代码帮组理解,何乐而不为呢?
积极主动敲代码做到没?教材实践上有什么经验教训?
- 对于本学期来说,基本做到了积极主动敲代码,布置作业就会去完成,但是有的时候还是有些松懈,“积极”便被放在一边了。
- “书本是一位好老师”,虽然这学期教材上的代码存在许多错误,或许这就是作者故意的呢?那些错误都不大,认真看看就能修改完成,但是如果你不修改的话就一直提示错误。这也让我养成了每次敲入教材代码后校对一遍的习惯。
课堂项目实践
-
时间复杂度分析:计算时间复杂度,用大O记法进行表示。
-
ArrayStack类的实现和测试:实现ArrayStack类中的peek、isEmpty、size和toString方法,并完成四个方法的测试。
-
链表插入:写出链表中节点插入的伪代码。
-
链表实践:通过键盘输入一些整数,建立一个链表;实现节点插入、删除、输出操作;使用冒泡排序法或者选择排序法根据数值大小对链表进行排序。
-
第4章代码检查:运行PP28,PP28的程序,根据个人学号输入后缀表达式并计算。
-
LinkedStack补全:实现size、isEmpty和toString等方法并进行测试。
-
第5章代码检查:运行课本P72-P73凯撒密码程序。
-
杨辉三角(选做题):使用循环队列输出杨辉三角。
-
栈队列测试题:完成第六题的分析。
-
第6章代码检查:运行PP6.8和PP6.11的程序。
-
线性表实践:定义一个商品类Product,需要包括商品名称、价格等信息,使用链式存储结构实现一个线性表,存储商店中的商品,同时支持插入、删除、选择排序、查找等功能,并进行简单测试。
-
ASL测试:已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,计算其ASL。
-
三种查找算法练习:画出三种算法的存储形式和并计算ASL。
-
哈希冲突处理实践:把自己的学号加21,例如学号为1,把22添加到序列{11,78,10,1,3,2,4,21}后面,使用链地址法,解决冲突,同时计算ASL,输出冲突次数。
-
希尔排序测试:当D2等于2时,写出第2趟排序结果。
-
树-计算题:计算下列三道题
- 1.有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?
- 2.高度为h的完全二叉树至少有多少个结点?至多有多少个结点?
- 3.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点?
-
树的深度和叶子个数计算:参考下面叶子节点计算的伪代码,计算课本中背部疼痛诊断器中决策树的叶子节点个数,并根据课堂介绍的递归树深度计算算法,计算决策树的深度。
-
中序和先序计算二叉树结构:已知一棵二叉树的先序序列和中序序列分别为ABDGHCEFI 和 GDHBAECIF,试确定二叉树结构。
-
层次遍历法实践:使用递归和非递归的方法实现层序遍历,遍历背部疼痛决策树,并按照层次顺序输出每个节点内容。
-
堆构造与排序:根据关键字序列:36,30,18,40,32,45,22,50,构造一颗小顶堆排序,并画出构造堆过程(树+数组)
-
堆排序测试:根据关键字序列:36,30,18,40,32,45,22,50,利用数组构造一颗大顶堆,并排序。
-
十字链表练习:依照图画出十字链表结构。
-
最小生成树:依照图完成下列操作
- 1.画出Prim算法的最小生成树的生成过程
- 2.画出Kruscal算法的最小生成树的生成过程
- 3.计算最小权值
-
Dijkstra(迪杰斯特拉)算法测试:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。要求:(1)写出V1到各个顶点的最短路径(2)要求写出最短路径计算过程。
-
AOE练习(加分):完成下图中四道题。
-
哈夫曼编码测试:设有字符集:S={a,b,c,d,e,f,g,h,i,j,k,l,m,n.o.p.q,r,s,t,u,v,w,x,y,z}。给定一个包含26个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树,并完成对英文文件的编码和解码。
-
课堂实践对提高应用能力有帮助吗?
- 课堂实践的内容都是一些比较简单的编程时间或者代码检查,对于知识的理解有帮助,对于应用能力的提高也有一定的作用。
-
课堂实践上自己有什么经验教训?
- 上课一定要认真听讲,特别是书上没有的知识,不认真听课上实践做起来有一些困难。
-
课堂实践上对老师有什么教学建议?
- 相较于上学期的课上实践,本学期的课上实践更加合理了,希望给学弟学妹们也以同样的方式教学。
课程收获与不足
自己的收获(投入,效率,效果等)
- 本学期对于这个课程来说投入的时间可能比上学期少了一些,但是效率我个人认为是提高了的,效果也是显著的,对数据结构的各种知识现在都有了一个清晰的认识。
自己需要改进的地方
- 遇到问题还是喜欢找理由,不习惯去直面问题。同时也有一些懒惰的心理。这都需要改进
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 我觉得是的,真正贯彻了。
- 我们在日常的学习会互相给对方讲对方没有听懂的知识,也会对对方的一些代码提出建议,对于一些大型的任务也会分工合作,真的很棒。
问卷调查
你平均每周投入到本课程有效学习时间有多少?
- 大概在8个小时左右,14-16周最多,因为在团队项目编程,因为学期中和学期初相对较低。这是有效学习时间,实际所用的学习时间肯定比这个多很多。
每周的学习效率有提高吗?你是怎么衡量的?
- 有提高,特别是在学期末和任务多的时间,有一句话很有趣“百分之八十的工作都是由百分之二十的时间完成的”,时间越紧,效率越高。
蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
- 有促进作用,但这学期蓝墨云的课上实践和实验在开始没有打分,导致同学们对于自己的分数不清楚。
你觉得这门课老师应该继续做哪一件事情?
- 博客、课堂实践、编程演示、算法讲解
你觉得这门课老师应该停止做哪一件事情?
- 我想不到了,我觉得本学期做的事都比较合理。
你觉得这门课老师应该开始做什么新的事情?
- 提供更多的答疑机会。
其他
百词斩的单词
- 这学期基本上每天都背了单词,只漏了一天。