课程总结
20182302 2018-2019-1《程序设计与数据结构》课程总结
每周作业链接汇总
-
第一周作业:学习教材第一章,学习使用vim、命令行的使用。
-
第二、三周作业:学习教材第二、三章,数据和表达式,使用类和对象。
-
第四周作业:学习教材第四、五章,迭代器和编写类。
-
第五周作业:学习教材第八章,继承。
-
第六周作业:学习教材第九、十章,学习了多态和异常,用接口和继承实现多态,try-catch语句捕获异常。
-
第七周作业:学习教材第十二、十四、十五章,学习了算法分析,栈,队列。
-
第八周作业:学习教材第十三章,查找和排序,选择排序,插入排序,冒泡排序等。
-
第九周作业:学习教材第十六、十七章,树,二叉查找树。
-
第十周作业:学习教材第十九章,图 ,深度广度优先遍历,最小生成树,拓扑排序。
自认为写得最好一篇博客是?为什么?
-
自认为写的最好的是第七周作业,原因如下:
-
在编写这篇博客前我上课认真听讲并且做了笔记,本次博客开始详细记述了对本周学习内容的总结。
-
本次博客尝试使用MARKDOWN格式添加代码于随笔上。
-
本次博客为了方便以后理解当时所讲内容,还从网上找到冒泡排序动图插入。
作业中阅读量最高的一篇博客是?谈谈经验
-
本学期阅读量最高的一篇博客是第六周作业
-
经验:上传后发现编写的随笔格式存在问题,且存在链接未附上的问题,当时未能改正。
实验报告链接汇总
-
实验一:用vim进行编程,单步调试,git push到码云。
-
实验二:编写计算器及相应的测试代码。
-
实验三:封装、继承、多态,uml建模。
-
实验四:编写有理数,复数计算器,及和服务器有关的远程有理数、复数计算器。
-
实验五:Android Studio的Activity、UI、布局、事件处理测试。
-
实验六:建立并打印链表,并在Android上实现。
-
实验七:选择与排序。
-
实验八:链树和决策树的实现,实现中缀转后缀。
-
实验九:有向图,无向图,拓扑排序,最小生成树。
团队项目报告链接汇总
代码托管链接
给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
- 代码目标6000行,实际9127行,已达到目标
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
- 在编程的智慧中提到要反复推敲代码,的确代码编写需要长时间耐下心来研究。
- 好的程序员,他们删掉的代码,比留下来的还要多很多.而对于平时JAVA学习来说,学会改进要远比机械式地照抄要有用很多。能实现同样功能的代码,精炼的代码在运行效率上也要比数量多但不精炼的高很多。因此在JAVA学习过程中需要不断改进,不断总结。
- “写模块化的代码”、“写简单的代码”、“写直观的代码”这句话对我来说很重要。在学习JAVA初期我常存在因命名重复导致无法运行的问题,有些代码不够直观以至于在看的过程中把自己绕晕。许多大公司也有自己编码规范,方便与编码者能够高效共同编码,大概也是在符合这一原则
积极主动敲代码做到没?教材实践上有什么经验教训?
- 我认为我未能做到积极主动敲代码。我平时确实存在松懈,对老师布置任务之外的内容未主动去做。以上课内容为例,不能做到及时复习理解运用,也是我存在越来越到疑惑的原因之一。
- 教材上代码在实际运行过程中有时会出现错误,通过解决这些错误自己又可以从中获得一定知识,同时减少自己编码时存在错误。在对教材上所给内容进行编写时发现自己存在一定理解上的错误,同时也使我理解如何将编写代码的方法应用于实践。
课堂项目实践
-
Scanner&JDB练习:输入两个数,计算两个数的加、减、乘、除运算结果,并输出。
-
类的编写实践:编写一个Book类,其实例数据分别表示书名、作者、出版社以及版权日期。
-
Random和NumberFormat测试:生成-10~10之间的随机数,并格式化输出(0.###)
-
Interface实践:定义一个接口People,并定义另外一个Student类,实现该接口。
-
文件读写:学习字节流和字符流,实现创建文件,采用四种方法写入和读取文件
-
时间复杂度分析:计算时间复杂度,用大O记法进行表示。
-
ArrayStack类的实现和测试:完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。
-
后缀表达式求值:从命令行输出一个后缀表达式:7 4 -3 * 1 5 + / *利用栈计算该表达式的值。
-
链表插入:写出链表中节点插入的伪代码。
-
链表实践:通过键盘输入一些整数,建立一个链表;实现节点插入、删除、输出操作;使用冒泡排序法或者选择排序法根据数值大小对链表进行排序。
-
链栈补全(LinkedStack补全)size\isEmpty\toString\Push:实现size、isEmpty和toString等方法并进行测试。
-
CircularArrayQueue方法补全:PP15.2完成CircularArrayQueue类的实现,包括所有的方法。要求通过入队和出队操作,出现队空和队满的情况。
-
线性表实践(ArrayList、LinkedList):学习ArrayList和LinkedList类,并在Android平台上实现添加、删除、修改等操作(数据可以自己定义),并实现倒置。
-
查找及ASL作业(编程+计算):给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11。
-
二分查找(折半查找)实践:给Searching类添加二分查找算法的递归实现方法。创建驱动程序来演示这个实现机制。
(1)编程实现递归
(2)创建一个测试类,测试递归实现的二分查找是否正确。 -
快速排序测试(必须有中间过程):{49,38,65,97,76,13,27,49,55,04}快速排序第一趟的结果是?
-
选择排序最坏情况:用一个例子分析,为什么选择排序元素移动次数的最坏情况是3(n-1)次?
-
树-计算题:
1.有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?
2.高度为h的完全二叉树至少有多少个结点?至多有多少个结点?
3.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点? -
中序和先序计算二叉树结构:若已知中序和先序序列,计算二叉树结构
例:已知一棵二叉树的先序序列和中序序列分别为ABDGHCEFI 和 GDHBAECIF,试确定二叉树结构。 -
二叉树的建立和层序遍历法实践:(1)给定一个序列AB#CD###E#F##建立一颗树,根据“二叉树的生成”算法构造这颗树。
(2)使用层序遍历方法完成遍历并测试。 -
递归前中后序和非递归前中序遍历实践:
课堂中,给定一个序列AB#CD###E#F##建立了一颗树。
在此基础上,分别实现:
(1)递归方法实现前序遍历、中序遍历、后序遍历。
(2)非递归方法实现前序遍历和中序遍历。 -
堆排序过程测试:写出图中后续排序过程
-
二叉排序树实践
建立一颗二叉排序树,样例如附件所示。完成:
(1)创建二叉排序树
(2)查找一个元素,包含查找成功和失败的例子;
(3)插入2个元素,1个插入到左子树,1个插入到右子树;
(4)删除一个元素,要考虑不同情况。 -
哈夫曼编码实践:设有字符集: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个英文字母的文件,统计每个字符出现的概率,根据计算的概率构造一颗哈夫曼树。
并完成对英文文件的编码和解码。
要求:
(1)准备一个包含26个英文字母的英文文件(可以不包含标点符号等),统计各个字符的概率
(2)构造哈夫曼树
(3)对英文文件进行编码,输出一个编码后的文件
(4)对编码文件进行解码,输出一个解码后的文件 -
哈夫曼编码测试:哈夫曼编码测试,画出哈夫曼树,写出各个叶子节点的编码。
-
图实践:图的存储表示以及计算结点的度。
(1)定义有向图和无向图(把附件图中的箭头去掉)的顶点矩阵和邻接矩阵,并计算每个结点的入度和出度。
(2)定义有向图的带权临街表,并计算每个节点的出度
-
十字链表练习:画出十一链表结构
-
图的DFS和BFS测试:写出图的BFS和DFS遍历序列
-
考试安排冲突问题:画图
-
最小生成树测试:
1.画出Prim算法的最小生成树的生成过程
2.画出Kruscal算法的最小生成树的生成过程
3.计算最小权值
-
Dijkstra(迪杰斯特拉)算法测试:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。
图2是课堂介绍的示例。
要求
(1)写出V1到各个顶点的最短路径
(2)要求写出最短路径计算过程(类似于图2)
- AOE/AOV练习:
1、求关键路径,v1和ve的值并写出具体步骤
2、画出图一可能的拓扑序列
3、画出图二所示无向图的邻接矩阵、邻接链表,并列出深度优先和广度优先遍历图所得的顶点序列。
4、写出图三的邻接矩阵,并用prim算法求最小生成树,画出产生过程
-
拓扑排序实践测试:
编程实践:
(1)编写代码初始化有向无环图和有向有环图(见附件1和2),使用邻接表初始化图。
(2)使用堆栈实现拓扑排序算法,输出附件1图的拓扑排序序列且没有环,检测附件图2存在环。
-
课堂实践对提高应用能力有帮助吗?
- 课堂实践有对于知识点的检验和直接进行的实践检验,两者对应用都有所提升
-
课堂实践上自己有什么经验教训?
- 要认真听讲,反复琢磨,消化理解。
-
课堂实践上对老师有什么教学建议?
- 检验过后希望都能和目前一样有一定讲解,方便掌握不是很好的迅速弥补
课程收获与不足
-
自己的收获(投入,效率,效果等):
我学会了如何自主研究学习JAVA这门语言,如何总结收获。对于JAVA的基础知识结构有了一定的了解 -
自己需要改进的地方:
需要对知识点多复习,多应用实践,对每次测试有一定巩固练习。 -
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议。
贯彻了。在结对学习过程中互相交流,我和同伴理解了一些互相之间存在记忆不清的知识点,同时对一些内容稍作复习,做新的难题共同商讨,得出结论。
问卷调查
-
你平均每周投入到本课程有效学习时间有多少?
- 大概每周18小时吧,主要为老师布置作业实验的完成,其次有一些对课本上代码的尝试练习。
-
每周的学习效率有提高吗?你是怎么衡量的?
- 每周的学习效率有一定提高,课上开始逐渐学会记笔记,学会课下想他人请教课上未理解内容,增加了编码实践。
-
蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
- 有一定的促进作用,建议增加云班课上的开放交流提问,方便更多同学理解一个同学存在的疑惑的解答,使更多同学收益。
-
你觉得这门课老师应该继续做哪一件事情?
- 编码演示,实验布置,课本代码编写要求
-
你觉得这门课老师应该停止做哪一件事情?
- 课堂测试。通过自身学习感到有些地方难以理解掌握,依次来检验学习成果难以有很大收获,限制时间,从网上找翻译不是很方便,由于一些学科术语导致一些词得自己理解琢磨。
其他
- 我认为通过学习这门课我并非没有收获,它让我学会了如何自主研究学习JAVA这门语言,如何总结收获。虽然每次测试结果都不理想,但上课时我能感受到老师有内涵懂得东西很多,我理解消耗所讲精华需要一定时间,但还是很感谢老师的付出。
给出你的总结中涉及到的链接的二维码
-
第一周作业:学习教材第一章,学习使用vim、命令行的使用。
-
第二、三周作业:学习教材第二、三章,数据和表达式,使用类和对象。
-
第四周作业:学习教材第四、五章,迭代器和编写类。
-
第五周作业:学习教材第八章,继承。
-
第六周作业:学习教材第九、十章,学习了多态和异常,用接口和继承实现多态,try-catch语句捕获异常。
-
第七周作业:学习教材第十二、十四、十五章,学习了算法分析,栈,队列。
-
第八周作业:学习教材第十三章,查找和排序,选择排序,插入排序,冒泡排序等。
-
第九周作业:学习教材第十六、十七章,树,二叉查找树。
-
第十周作业:学习教材第十九章,图 ,深度广度优先遍历,最小生成树,拓扑排序。
-
实验一:用vim进行编程,单步调试,git push到码云。
-
实验二:编写计算器及相应的测试代码。
-
实验三:封装、继承、多态,uml建模。
-
实验四:编写有理数,复数计算器,及和服务器有关的远程有理数、复数计算器。
-
实验五:Android Studio的Activity、UI、布局、事件处理测试。
-
实验六:建立并打印链表,并在Android上实现。
-
实验七:选择与排序。
-
实验八:链树和决策树的实现,实现中缀转后缀。
-
实验九:有向图,无向图,拓扑排序,最小生成树。
-
团队作业第一周:完成团队展示、团队选题与规格需求说明书。
-
团队作业第二周:修改规格需求说明书,制定团队编码规范,ER图,后端构架设计,确定团队分工
-
实验记录博客:哈夫曼编码对文件进行加密解密