20172325 2018-2019-1《程序设计与数据结构》课程总结
每周作业链接汇总
第一周作业:初步了解数据结构相关知识,软件质量、数据结构、算法分析、时间复杂度分析等;
第二周作业:学习第一种数据结构——栈,包括栈的原理,栈的结构,以及用链表和数组两种实现栈的方法;
第三周作业:学习第二种数据结构——队列,包括队列的原理,队列的结构,以及两种实现队列的方法,这周还加上了队列与栈的区别与优劣;
第四周作业:列表的一些基本知识和方法,无序线性表与有序线性表的区别,以及两种线性表的三种操作的具体实现方法;
第五周作业:查找和排序——查找(静态查找、泛型查找、线性查找、二分查找),排序(选择排序、插入排序、冒泡排序、快速排序、归并排序);
第六周作业:学习第一种非线性数据结构——树,包括树的原理、树的分类、树的实现策略、树的四种遍历方法以及简单二叉树;
第七周作业:深入学习二叉树,主要是AVL树和红黑树的相关知识;
第八周作业:堆得学习,包括堆得原理和用链表和数组实现堆;
第九周作业:图的相关知识,包括网络、最小生成树、图的遍历(深度优先和广度优先搜索);
自认为写得最好一篇博客是?为什么?
- 自认为写得最好的一篇是第六周博客,因为那一周有很多时间用来学习相关知识,于是在知识的广度和深度方面相较于其他博客会更加具体详细一些。
作业中阅读量最高的一篇博客是?谈谈经验
我的博客其实都差不太多,阅读量最高的应该是第一周博客。经验?!
- (1)第一:抓住刚开学老师、同学们的学习积极性,他们会积极查阅博客;第二:抓住时间的尾巴,时间越长,阅读量越高。
- (2)第一条纯属瞎扯,阅读量要高博客一定要有东西才行,客观来说你要有足够充实的知识,主观来讲,你要有自己的见解和思考。
实验报告链接汇总
实验一 :对链表和数组的操作进行实践学习,要求实现插入、删除、输出等操作;
实验二 :对树的知识进行相关实践,要求掌握实现二叉树、决策树、二叉查找树、红黑树等;
实验三 :对查找和排序等知识进行进一步的学习和掌握,回顾一学期的数据结构的知识;
团队项目报告链接汇总
团队作业--第一次:
-团队展示
-团队选题:
- 确定选题 ;
- 初步制定完成计划;
- 向有经验的学长采访问答,得到有益的帮助;
- 需求规格说明书
团队作业--第二次
需求规格说明书的改变
编码规范
数据库设计与ER图
后端架构设计
确定团队分工
组员在上述任务中的分工和工作量比例。
选择困难症的福音——团队Scrum冲刺阶段-Day 1领航
选择困难症的福音——团队Scrum冲刺阶段-Day 2
选择困难症的福音——团队Scrum冲刺阶段-Day 3
选择困难症的福音——团队Scrum冲刺阶段-Day 4
选择困难症的福音——团队Scrum冲刺阶段-Day 5
选择困难症的福音——团队Scrum冲刺阶段-Day 6
选择困难症的福音——团队Scrum冲刺阶段-Day 7
代码托管链接:
给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
- 这学期的目标已顺利达到。
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- 理解的最好方式是实践。在我看来,之所以不懂,是因为不是自己创造编写的,这个时候,通过适当的改动,去看运行或者输出的结果有何变化,通过差别来发现实际的作用的意义是最为简单有效的理解方式,之后可以通过添加适当的注释,或者在命名的时候稍加解释会起到行之有效的理解效果。
积极主动敲代码做到没?教材实践上有什么经验教训?
- 这个学期在代码的实践上和上个学期相比较有略微的退步,可能由于缺乏新鲜感和惰性的原因导致了这个结果,更多的通过阅读理解教材来学习知识解决问题,在这个过程中我发现自学真的很重要,自学也很讲究方式方法,要学会自己主动的查阅教材外的信息,教材上的知识在很大程度上只起到讲解基础的作用,也就是“师傅领进门,学成靠自身。”
课堂项目实践
时间复杂度分析:时间复杂度分析,用大O记法写出时间复杂度。
ArrayStack的实现和测试: 完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。
链表实践:链表练习,要求实现链表的插入、删除、输出等功能。
第四章代码:运行PP28,PP28页的程序
LinkedStack补全: 给出size、isEmpty和toString等方法的定义,以完成LinkedStack类的实现。
凯撒密码: 代码检查'凯撒密码程序。
第六章代码检查: 运行PP6.8和PP6.11的程序
线性表实践: 定义一个商品类Product,需要包括商品名称、价格等信息,使用链式存储结构实现一个线性表,存储商店中的商品。支持插入、删除、选择排序、查找等功能,并进行简单测试。
ASL测试: 已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少?
输出后缀表达式。三种查找算法练习
哈希冲突处理实践: 把自己的学号加21,例如学号为1,把22添加到序列后面,使用链地址法,解决冲突。编程实现,并测试。
希尔排序测试:
树计算题
中序和先序计算二叉树结构:若已知中序和先序序列,计算二叉树结构
堆排序测试: 根据关键字序列:36,30,18,40,32,45,22,50,利用数组构造一颗大顶堆,并排序。
十一链表练习: 画出十一链表结构。
最小生成树:
1.画出Prim算法的最小生成树的生成过程
2.画出Kruscal算法的最小生成树的生成过程
3.计算最小权值Dijkstra(迪杰斯特拉)算法测试:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。
AOE练习:
1、求关键路径,v1和ve的值并写出具体步骤
2、画出图一可能的拓扑序列
3、画出图二所示无向图的邻接矩阵、邻接链表,并列出深度优先和广度优先遍历图所得的顶点序列。
4、写出图三的邻接矩阵,并用prim算法求最小生成树,画出产生过程哈夫曼测试:
(1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
(2)构造哈夫曼树
(3)对英文文件进行编码,输出一个编码后的文件
(4)对编码文件进行解码,输出一个解码后的文件
课堂实践对提高应用能力有帮助吗?
- 个人觉得有一定的帮助,但是更多的是检测学习的结果,对于能力的提升作用不大,因为在课堂上有限的时间内不能够得出既实现目的得方法,又简洁有效的编程思路。
课堂实践上自己有什么经验教训?
- 我的经验是课前课上一定要熟练掌握所学知识,这样才能事半功倍。
课堂实践上对老师有什么教学建议?
- 我建议课堂实践可以更改为课后实践,在课后紧接着给定有限的时间用于实践,这样一来能够即起到学完马上巩固,有给了足够的时间让有疑问或者不太明白的同学进一步学习的时间。
课程收获与不足
- 收货:本学期的学习让我对数据结构有了基础的了解和运用,在编程的思路和操作上更进一步;
- 不足:这学期的学习没有上一学期积极,代码量不太够,可能在一些方法的掌握上还存在不小的漏洞。
自己的收获
- 经过又一学期的学习,我更加坚信投入的时间和精力与自己所得的收获是成正比的,尤其发现效率是学习至关重要的因素,在有限的时间内投入更多的精力与思考能够学的更多更好。
自己需要改进的地方
- 学习效率还在不够高,积极主动敲代码做的还不够好。
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 贯彻的不错,在有一个人懒惰或有疑问的时候,结对伙伴能够及时的起到监督和帮助的作用。
问卷调查
你平均每周投入到本课程有效学习时间有多少?
10个小时
每周的学习效率有提高吗?你是怎么衡量的?
学习效率起伏不定,我衡量的方法是在熟练掌握运用知识的前提下,花费更少的时间则效率更高。
蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
我觉得有,但是我觉得在时间的控制上可以再稍加斟酌,毕竟有的时候自学时间会比较多,但有的时候还有其他科目的学习任务。
你觉得这门课老师应该继续做哪一件事情?
课堂实践
你觉得这门课老师应该停止做哪一件事情?
博客,这能是博客,造福于学弟学妹
给出你的总结中涉及到的链接的二维码
第一周作业:
第二周作业:
第三周作业:
第四周作业:
第五周作业:
第六周作业:
第七周作业:
第八周作业:
第九周作业:
实验一:
实验二:
实验三:
团队作业一:
团队作业二:
时间复杂度分析:
ArrayStack的实现和测试:
链表实践:
第四章代码: