20182322 2018-2019-1《程序设计与数据结构》课程总结
-
(按顺序)每周作业链接汇总
- 预备作业:掌握Markdown格式的排版、注册博客园并加入班级、注册码云并加入班级、下载并注册蓝墨云并加入班级。
- 第一周作业:认真学习考核方式,理解成绩构成
认真学习课前准备,掌握学习方法
作业一定按教学进程中的模板提交 - 第二周和第三周作业:掌握Java数据类型(8种基本数据类型、对象、包装类等),理解封装概念,学会输入输出、条件、循环迭代等基本语句的使用。
- 第四周作业:学习类与对象、类之间的关系、修饰符、静态方法等。学会画UML类图。
- 第五周作业:继承机制(方法重写和方法重载、protected关键字、super方法、接口的多重继承),和抽象类的使用。
- 第六周作业:多态与后绑定。学习类通过继承和接口实现多态、异常和异常处理。
- 第七周作业:学习数据结构。学习计算算法效率、时间复杂度(可以用来检验程序设计得是否优质高效);线性集合和非线性集合;栈、链表、列表的实现。
- 第八周作业:总结整理排序与查找的各类方法并实现。
- 第九周作业:树的基本概念、树的实现、树的递归和非递归遍历实现。
- 第十周作业:图的基本概念、基于邻接矩阵、邻接链表的实现、计算出入度、遍历,带权图的最短路径和最小生成树。
-
自认为写得最好一篇博客是?为什么?
- 我自认为写的最好的是第九周作业,原因如下
- :这次是我这学期博客完成的最快的一次,花的时间少。但是,这里的快并不代表着内容粗糙、带有水分。而是代表这周我的学习积极性最高和时间安排的最为合理。
- :教材学习总结也很丰富形象。对于书中和课上的疑问,自己解决的也很全面。
- :博客的作用就是为了更好的总结和理解,我认为这周的博客是最符合这个意义的,所以自认为写的最好。
- 我自认为写的最好的是第九周作业,原因如下
-
作业中阅读量最高的一篇博客是?谈谈经验
- 预备作业
- 我认为这篇博客阅读量多应该在于我发表得比较早,所以吸引了很多读者。所以想要阅读量高,博客一定要交的早,这样后面的同学就可以向着看一下别人写的博客,这样阅读量就上去了。
-
(按顺序)实验报告链接汇总
- 实验一 Linux基础与Java开发环境:基于命令行和IDEA简易教程进行简单的JAVA程序编辑,编译,运行和调试
- 实验二 Java基础(数据/表达式、判定/循环语句)::编写计算器
- 实验三 面向对象程序设计:初步掌握单元测试和TDD,理解并掌握面向对象三要素:封装、继承、多态(自己去学!)
,初步掌握UML建模 - 实验四 Java Socket编程:实现socket通信,学习密码学相关知识,编写远程加密计算器
- 实验五 Android程序设计:Android Studio的使用
- 实验六 线性结构之链表:链表相关练习
- 实验七 查找与排序:查找与排序相关练习
- 实验八 树:树的相关练习,决策树,后缀表达式
- 哈夫曼编码测试:哈夫曼编码测试
- 实验九 图:图的相关练习
-
(按顺序)团队项目报告链接汇总
-
代码托管链接:
- 给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
- 部分代码:
- 达到了
- 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- :学会改代码是一个新手必须要掌握的,就比如,你做一个app软件,但是样例代码却看不懂。这时候就需要修改部分代码再运行样例程序,查看哪部分发生了什么变化,通过修改变量等方式了解代码的功能。然后将修改过的代码加上你自己的理解及注释,就会对你的代码阅读理解能力有大幅提升。
- :加代码,是对代码的优化,是对格式的规范。并不是最短的代码才是最好的。比如if语句的花括号不可以省略,else语句尽量写。条件判断和循环更加详细。
- :改代码,则是对代码的升华,是对思路的调整。我们的代码并不是无懈可击的,我们需要修改,臻于完美。
- 积极主动敲代码做到没?教材实践上有什么经验教训?
- :对于本学期来说,基本做到了积极主动敲代码,布置作业就会去完成。虽然有的时候还是有些松懈,但一个学期总的来说还是做到了积极敲代码。
- :教材实践刚开始能给我提供很多思路,我可以根据书上的例子来编写自己的程序。同样,尽信书则不如无书,教材中也是存在错误的,有时候往往实践才是检验真理的唯一标准。
-
课堂项目实践
-
课堂实践项目
- Scanner&JDB练习:输入两个数,计算两个数的加、减、乘、除运算结果,并输出。
- 类的编写实践:编写一个Book类
- Random和NumberFormat测试:生成-10~10之间的随机数,并格式化输出(0.###)
- Interface实践:定义一个接口People,并定义另外一个Student类,实现该接口。
并做简单的测试(StudentTest) - 复数/有理数计算器(接口):编写支持复数和有理数(分数)的计算器
- 文件读写:文件读写
- 期中测试
- 时间复杂度分析:时间复杂度分析,用大O记法写出下面各题的时间复杂度
- ArrayStack类的实现和测试:完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。
- 后缀表达式求值:从命令行输出一个后缀表达式:
7 4 -3 * 1 5 + / *
利用栈计算该表达式的值。 - 出门条-栈-数组实现栈:写下本次课学到的知识点和内容。
- 链表插入:写出链表中节点插入的操作代码
- 链表实践:链表练习,要求实现下列功能:
(1)通过键盘输入一些整数,建立一个链表;
(2)实现节点插入、删除、输出操作,3个知识点根据实际情况酌情扣分);
(3)使用冒泡排序法或者选择排序法根据数值大小对链表进行排序; - 链栈补全(LinkedStack补全)size\isEmpty\toString\Push:给出size、isEmpty和toString等方法的定义,以完成LinkedStack
类的实现 - CircularArrayQueue方法补全:完成CircularArrayQueue类的实现,包括所有的方法
- 线性表实践(ArrayList、LinkedList):在Android平台上实现添加、删除、修改等操作(数据可以自己定义),并实现倒置
- 查找及ASL作业(编程+计算):给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11。
- 二分查找(折半查找)实践:给Searching类添加二分查找算法的递归实现方法。创建驱动程序来演示这个实现机制
- 快速排序测试(必须有中间过程):{49,38,65,97,76,13,27,49,55,04}
快速排序第一趟的结果是? - 选择排序最坏情况:用一个例子分析,为什么选择排序元素移动次数的最坏情况是3(n-1)次?
- 树-计算题:计算
- 中序和先序计算二叉树结构:若已知中序和先序序列,计算二叉树结构
- 二叉树的建立和层序遍历法实践:(1)给定一个序列AB#CD###E#F##建立一颗树,根据“二叉树的生成”算法构造这颗树。
(2)使用层序遍历方法完成遍历并测试。 - 递归前中后序和非递归前中序遍历实践:给定一个序列AB#CD###E#F##建立了一颗树。
在此基础上,分别实现:
(1)递归方法实现前序遍历、中序遍历、后序遍历。
(2)非递归方法实现前序遍历和中序遍历。 - 堆排序过程测试:写出图中后续排序过程
- 二叉排序树实践:建立一颗二叉排序树,完成相关要求
- 哈夫曼编码测试:画出哈夫曼树,写出各个叶子节点的编码
- 图实践:图的存储表示以及计算结点的度
- 十字链表练习:画出十一链表结构
- 图的DFS和BFS测试:写出图的BFS和DFS遍历序列
- 考试安排冲突问题(画图):根据附件的题目,画出图
- 最小生成树测试:1.画出Prim算法的最小生成树的生成过程
2.画出Kruscal算法的最小生成树的生成过程
3.计算最小权值 - Dijkstra(迪杰斯特拉)算法测试:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径
- AOE/AOV练习:1、求关键路径,v1和ve的值并写出具体步骤
2、画出图一可能的拓扑序列
3、画出图二所示无向图的邻接矩阵、邻接链表,并列出深度优先和广度优先遍历图所得的顶点序列。
4、写出图三的邻接矩阵,并用prim算法求最小生成树,画出产生过程 - 拓扑排序实践测试:编程实践:
(1)编写代码初始化有向无环图和有向有环图(见附件1和2),使用邻接表初始化图
(2)使用堆栈实现拓扑排序算法,输出附件1图的拓扑排序序列且没有环,检测附件图2存在环
-
课堂实践对提高应用能力有帮助吗?
- 课堂实践对提高应用能力是有帮助的,在规定时间内迅速做出反应完成任务对于动手敲代码的能力要求,对于知识的熟悉程度的要求是很高的。
- 课堂实践的内容都是一些比较简单的编程时间或者代码检查,对于知识的理解有帮助,对于应用能力的提高也有一定的作用。
-
课堂实践上自己有什么经验教训?
- 上课一定要认真听讲,特别是书上没有的知识,不认真听课上实践做起来有一些困难。
- 还有课堂实践中若发现有不懂的地方,课下应花功夫研究学习弄懂。
-
课堂实践上对老师有什么教学建议?
- 建议老师在课后能够公布一个课堂实践的参考答案之类的,感觉课堂实践也就是每次在蓝墨云班课中提交了,提交之后便没有反馈了,我们不知道自己做的对错。也就是在过了很久之后才给了一个成绩,那个时候我们都已经忘记课堂实践的内容了。
-
-
课程收获与不足
-
自己的收获(投入,效率,效果等)
- 总结一下,本学期的收获分为一下几个方面:
-
第一,有关学习方法。
- 我在最开始就说过,我学习这门课程最希望的不是学到这门课中的知识,而是学到一些学习方法。总结一下本学期学到的学习方法:
- 阅读教材。
- 向老师,同学求助。
- 学会在网上查阅资料。
- 不清楚类和方法的使用时,查阅帮助文档。
- 以写博客的方式将自己所学记录下来。
- 有趣的编程模式——结对编程。
-
第二,写博客提高了写作能力。
- 本课程的学习成果都以写博客的方式体现出来,最初觉得这写博客特别形式主义,并没有多大用,不过现在回过头看来,写博客可以阶段性得复习,就在现在我回顾我本学期所写的博客的时候,就像小时候有段时间坚持写日记,回过头来读之前的日记的时候就会体会到的那种充实感。同时,自然也提高了我的写作能力。
-
第三,自然就是本学期所学到的丰富的知识了。这在之前博客中就有体现了,这里就不赘述了。
-
- 总结一下,本学期的收获分为一下几个方面:
-
自己需要改进的地方
- 遇到问题还是喜欢找理由,不习惯去直面问题。同时也有一些懒惰的心理。还有要在课上应更加认真听讲,提高课堂效率。
-
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
- 我觉得不是百分百贯彻,但相对来说还是贯彻了。
- 我们在日常的学习会互相给对方讲对方没有听懂的知识,也会对对方的一些代码提出建议,对于一些大型的任务也会分工合作,效果还可以。
-
-
问卷调查
- 你平均每周投入到本课程有效学习时间有多少?
- 我平均每周投入到本课程有效学习时间大约为10-12小时。后期团队项目这块的投入的学习时间会更多。
- 每周的学习效率有提高吗?你是怎么衡量的?
- 有提高。是从学习时间和学习效果两方面衡量的。
- 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
- 是有一定的促进作用的。蓝墨云班课能提醒我需要完成的学习任务,老师发布的资源也能很方便地随时查阅,课堂的签到、随机点人回答问题等都是很好的功能,有提交时间限制的“活动”功能使课堂实践更好地实现。
- 你觉得这门课老师应该继续做哪一件事情?
- 老师应继续使用蓝墨云班课教学,继续课堂实践。
- 你觉得这门课老师应该停止做哪一件事情?
- 建议老师弱化博客部分,更加强调代码的实际编写。
- 你平均每周投入到本课程有效学习时间有多少?
-
出你的总结中涉及到的链接的二维码
-
码云项目链接:
-
预备作业:
-
第一周作业:
-
第二·三周作业:
-
第四周作业:
-
第五周作业:
-
第六周作业:
-
第七周作业:
-
第八周作业:
-
第九周作业:
-
第十周作业:
-
实验一:
-
实验二:
-
实验三:
-
实验四:
-
实验五:
-
实验六:
-
实验七:
-
实验八:
-
哈夫曼编码测试:
-
实验九:
-
团队Day1:
-
团队Day2:
-
冲刺1:
-
冲刺2:
-
冲刺3:
-
-
结语