20172323 2018-2019-1《程序设计与数据结构》课程总结
每周作业链接汇总
-
第一周作业:软件质量与算法分析
-
第二周作业:集合概述——栈、链式结构——栈
-
第三周作业:队列以及实现队列的几种方式
-
第四周作业:列表以及实现列表的几种方式
-
第五周作业:排序与查找
-
第六周作业:树、实现树的策略、树的遍历
-
第七周作业:二叉查找树及实现二叉查找树的几种方式(AVL树、红黑树)
-
第八周作业:优先队列与堆
-
第九周作业:图、图的几种算法和实现策略
-
自认为写得最好一篇博客是?为什么?
自认为写得最好的一篇博客,应该是第七周这篇吧。读到这个问题时脑子里第一反应就是这篇,倒不单单因为写得多,如果拼字数的话,教材学习内容总结多抄一些教材上的知识点上去就好了,在写博客这方面字数的量变很难引起质变,抄一堆又臭又长的东西马虎了事,很难说对自己能有什么帮助。选这篇的原因正是因为我在学习并进行总结写博客的时候真正领会到了一些东西,尤其是红黑树那一部分,好像是抽风了一样的就特别想把那一部分搞懂,一开始没有读懂书上的意思,结合其他资料也不能完全理解,然后就在博客上留下一堆未完成的学习总结,每隔一天就拿出来顺着思路重新理解,每天都多理解透了一点,直到最后差不多理解完全了,又结合书上的例子自己画图将红黑树的构造方法画了几次贴在博客上。好像在我的学习过程中很少有这样钻牛角尖的狠劲,所以记忆犹新,自认为最好。 -
作业中阅读量最高的一篇博客是?谈谈经验
如果没看错的话是第六周这一篇,很重要的一点就是早发博客!如果在作业发布的瞬间就将作业提交上去,别的同学在看作业的时候就会看到你已提交,自然而然的就会点进去帮你刷阅读量了。当然这篇博客阅读量高我认为很重要的一个原因就是其中关于printTree方法的理解吧,当时理解这个方法的人并不多,我也是在读了大佬的博客之后才有所顿悟,于是一边理解这个方法一边写下自己的理解,算是对这个方法有稍详细的解读,进而对别人也有帮助,所以阅读量高吧。正经的经验就是,把博客写好,自然而然会有人来看!
实验报告链接汇总
- 实验一:线性结构之链表、线性结构之数组
- 实验二:实现构造二叉树、决策树、表达式树以及红黑树分析
- 实验三:查找与排序练习
- 课堂测试一:建立链表以及实现链表添加、删除、排序操作
- 课堂测试二:ASL测试
- 课堂测试三:三种算法查找练习
- 课堂测试四:哈弗曼编码测试
团队项目报告链接汇总
- 第一周:团队展示 团队选题 需求规格说明书
- 第二周:完善需求规格说明书、制定团队编码规范、通过团队项目数据库设计
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 1-领航
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 2
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 3
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 4
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 5
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 6
- 奔跑吧DKY——团队Scrum冲刺阶段-Day 7
代码托管链接
-
给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
其实Android Studio上团队编程还有修修改改几千行代码,两学期一万行的代码肯定是达到了。 -
加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
记得之前有一次的实验给了一个博客链接,里面就提到说,参照别人的代码未尝不是一件好事。因为别人已经写出了一个优质代码,理解他是怎么实现的有时候比自己费一整天劲写一个不咋样的代码收获更多。这学期有很多项目都是这样,自己写的代码很容易陷入桎梏之中,不能跳出某个圈子,反而借鉴他人的代码,能提供很多新鲜的思路,更能给人启发,同时也提高了学习的效率。 -
积极主动敲代码做到没?教材实践上有什么经验教训?
基本上是完成了积极主动敲代码了,教材实践的经验教训就是要回归教材知识,但又同时不局限于教材,要学会借鉴别人的代码,但不是抄袭别人的代码
课堂项目实践
-
实践一:时间复杂度分析
(1)for(i=1;i<=n;i++) for(j=1;j<=i;j++) for(k=1;k<=j;k++) (2)void fun(int n) { int i=l; while(i<=n) i=i*10; } (3)int i, j,sum; i=0; j=0; sum = i+j; (4)void fun (int n){ int i=0; while(i*i*i<=n) i++; }
-
实践二:完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。
public T peek() throws EmptyCollectionException { } public boolean isEmpty() { // To be completed as a Programming Project } public int size() { // To be completed as a Programming Project } public String toString() { // To be completed as a Programming Project }
-
实践三:写出链表中节点插入的操作代码(伪代码)
public static void InsertNode(Student2 Head, Student2 node){ }
-
实践四:链表练习,要求实现下列功能
- (1)通过键盘输入一些整数,建立一个链表
- (2)实现节点插入、删除、输出操作
- (3)使用冒泡排序法或者选择排序法根据数值大小对链表进行排序
-
实践五:运行PP28,PP28页的程序
- 根据个人学号输入后缀表达式并计算。(例如,学号172301,输入1 7 + 2 3 0 1 - + *)
-
实践六:给出size、isEmpty和toString等方法的定义,以完成LinkedStack
类的实现。
- 1.能够运行
- 2.需要测试各个方法
- 3.把代码上传到码云,并将关键代码和运行结果截图加水印(学号)上传。
- 实践七:代码检查P72-P73
- 凯撒密码程序。
- 把结果截图,加学号水印,上传到蓝墨云。
- 实践八:使用循环队列输出杨辉三角
- (1)用数组实现循环队列(要考虑扩容问题,否则不加分)
- (2)输出杨辉三角
- (3)代码运行结果添加学号水印,并上传;代码传到码云,附上码云链接。
-
实践九:栈队列测试题
-
实践十:运行PP6.8和PP6.11的程序,
-
实践十一:定义一个商品类Product,需要包括商品名称、价格等信息,使用链式存储结构实现一个线性表,存储商店中的商品。支持插入、删除、选择排序、查找等功能,并进行简单测试。需要使用的知识点:
- 1.泛型 - 2.实现Comparable接口中的方法 - 3.链式存储结构
-
实践十二:已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92} 如果使用折半查找法,ASL是多少?
-
实践十三:画出存储形式和asl的计算
-
实践十四:把自己的学号加21,例如学号为1,把22添加到序列后面,使用链地址法,解决冲突。编程实现,并测试。
- 要求计算asl,输出冲突次数。
- 1.有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?
- 2.高度为h的完全二叉树至少有多少个结点?至多有多少个结点?
- 3.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点?
-
实践十七:参考下面叶子节点计算的伪代码,计算课本中背部疼痛诊断器中决策树的叶子节点个数?
int CountLeaf ( BiTree T, int &count ) { if ( T ) { if ( (!T->lchild) && (!T->rchild) ) count++; // 对叶子结点计数 CountLeaf( T->lchild, count); CountLeaf( T->rchild, count); } }
-
实践十八:若已知中序和先序序列,计算二叉树结构
- 例:已知一棵二叉树的先序序列和中序序列分别为ABDGHCEFI 和 GDHBAECIF,试确定二叉树结构。
- 根据课堂介绍的递归树深度计算算法,计算决策树的深度。
- 实践十九:使用递归实现层次遍历背部疼痛决策树,并按照层次顺序输出每个节点内容。
- 非递归的层次遍历法算法如下:
- 根结点入队;从队头取元素,并执行如下3个动作:
- (1)访问该结点;
- (2)如果该元素有左孩子,则左孩子入队;
- (3)如果该元素有右孩子,则右孩子入队;
- 重复执行上述过程,直至队列为空。此时,二叉树遍历结束。按照上述算法,编程实现层序遍历,按照层序的方法,遍历并依次输出每个节点内容。(3分)
-
实践二十:根据关键字序列:36,30,18,40,32,45,22,50,构造一颗小顶堆,并排序?画出构造堆过程(树+数组)
-
实践二十一:根据关键字序列:36,30,18,40,32,45,22,50,利用数组构造一颗大顶堆,并排序。
要求:
- (1)输出构造好的大顶堆序列(层序)
- (2)输出每轮排序的结果(数组的结果)
- 把结果截图并加学号水印上传到蓝墨云,代码上传到码云。
- 实践二十二:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。
- (1)写出V1到各个顶点的最短路径
- (2)要求写出最短路径计算过程(类似于图2)
- 实践二十三:AOE练习
- 1、求关键路径,v1和ve的值并写出具体步骤
- 2、画出图一可能的拓扑序列
- 3、画出图二所示无向图的邻接矩阵、邻接链表,并列出深度优先和广度优先遍历图所得的顶点序列。
- 4、写出图三的邻接矩阵,并用prim算法求最小生成树,画出产生过程
- 实践二十四:哈夫曼编码测试
- 设有字符集: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)对编码文件进行解码,输出一个解码后的文件
- (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云
-
课堂实践对提高应用能力有帮助吗?
有一定的帮助,主要是运用教材学到的知识去解决一些问题,既巩固了课上学到的知识,同时又拓展了一些课外的知识 -
课堂实践上自己有什么经验教训?
课堂实践的一点经验教训就是要认真读题,很多时候实践的丢分都是因为读题不够仔细,会错了意。 -
课堂实践上对老师有什么教学建议?
希望老师更多的抓住同学们的疑难问题进行讲解,同时也可以适当的讲解一下教材实践如何编写,也就是能评讲一下作业,提供一些比较优秀的解答 -
课程收获与不足(不要抄上学期的,否则会扣分)
这学期主要学习的是数据结构方面的知识,就这方面来说肯定是有极大的收获。最大的不足就是我竟然一时说不出我的收获是什么,直知道学习了数据结构,具体的收获是什么,真还想不起来啥。最近的团队合作项目倒是让我收获了很多关于安卓方面的知识,特别是关于界面设计的一些玩意儿。 -
自己的收获(投入,效率,效果等)
我自认为这学期比上学期更加投入,虽然没有像上学期那样总是熬夜写代码,但是对于平常的各种项目、作业包括博客都是很投入的在做、在学,可是效果似乎也不是多么好,至少在成绩上并没有很明显的提高,甚至还有些下降的趋势。同时学到的东西也总是容易忘记,效果也不算好,在需要用到知识的地方总是很难举一反三,灵活运用到。 -
自己需要改进的地方
就是学以致用的方面做得不好,正如上一段回答说到的那些。敲代码也需要更加积极主动 -
结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
接受小组成员的帮助更多一点吧,毕竟成绩在小组几个中算是最差劲的了。比如博客的问题怎么写,编写代码时遇到的很多问题,以及平常测验的纠错,很多都是在与小组成员的讨论中得到的正确答案。没有给老师的参考建议。
问卷调查
-
你平均每周投入到本课程有效学习时间有多少?
十个小时左右 -
每周的学习效率有提高吗?你是怎么衡量的?
我觉得每周的学习效率都在前一周的基础上有一定的提高,衡量的标准可以有很多,比如这一周的任务有没有按时或者提前完成,或者在同样一周的时间内有没有掌握更多的知识,弄明白了多少个难点等等 -
蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
只能说帮助有限,因为学习资源我更偏向于在网上自己搜索,所以班课上的资源并不常用。但是测验之类在班课上进行还是比较方便直观。建议就是与通过班课与老师和助教的交流不太方便,希望能改进一下。 -
你觉得这门课老师应该继续做哪一件事情?
继续做的事情就是团队编程项目,我觉得这样能充分调动每个同学的积极性,并且很好运用、巩固课上学到的知识,同时也能使我们主动学习课外的知识 -
你觉得这门课老师应该停止做哪一件事情?
暂时没有想好有什么不太适合本课程的事情。 -
最后总结的说一下两学期的学习的一些感受,虽然具体的说不上来收获到底有哪些,但确实一年的学习让我有了一种十足的收获感,至少我能更真切的了解做中学、自主学习是怎样的一种学习方式。这些对以后其他计算机方面课程的学习也肯定能起到不小的帮助。
链接的二维码
码云项目链接:
第一周博客:
第二周博客:
第三周博客:
第四周博客:
第五周博客:
第六周博客:
第七周博客:
第八周博客:
第九周博客:
...
实验一 :
实验二:
实验三:
课堂测试一:
课堂测试二:
课堂测试三:
课堂测试四:
第一周:
第二周:
奔跑吧DKY——团队Scrum冲刺阶段-Day 1-领航:
奔跑吧DKY——团队Scrum冲刺阶段-Day 2:
奔跑吧DKY——团队Scrum冲刺阶段-Day 3:
奔跑吧DKY——团队Scrum冲刺阶段-Day 4:
奔跑吧DKY——团队Scrum冲刺阶段-Day 5:
奔跑吧DKY——团队Scrum冲刺阶段-Day 6:
奔跑吧DKY——团队Scrum冲刺阶段-Day 7:
实践一:
实践二:
实践三:
实践四:
实践五:
实践六:
实践七:
实践八:
实践九:
实践十:
实践十一:
实践十二:
实践十三:
实践十四:
实践十五:
实践十六:
实践十七:
实践十八:
实践十九:
实践二十:
实践二十一:
实践二十二:
实践二十三:
实践二十四: