可爱的坏人

 

20172327 2018-2019-1《程序设计与数据结构》课程总结

20172327 2018-2019-1《程序设计与数据结构》课程总结

每周作业链接汇总


第一周作业:课本的第一章和第二章,分别讲了什么是软件,软件质量特征,数据结构,时间复杂度等。


第二周作业:对课本第三章和第四章的学习,学习了栈,集合结构的栈和链式结构的栈。


第三周作业:对课本第五章的学习,学习了队列,Java API中的队列,链表实现队列,数组实现队列等。


第四周作业:对课本第六章学习,学习了类的列表,了解列表的种类,列表内的方法。


第五周作业:对课本第九章的学习,学习了排序与查找,查找的多种方法和排序的多种方法。


第六周作业:对课本第十章的学习,学习了树的内容,包括树的遍历,树的实现,二叉树等。


第七周作业:对课本第十一章的学习,学习了二叉查找树,实现了用来链表实现二叉查找树和有序列表实现二叉查找树,还完成了平衡二叉树。


第八周作业:对课本第十二章的学习,学习了优先对列与堆,了解了最大(最小)堆的实现,堆的排序以及优先队列。


第九周作业:对课本第十三章的学习,学习了无向图,有向图,带权图和图算法。

The best and the most

  • 自认为写得最好一篇博客是?为什么?

    第五周博客,因为从那篇博,我认认真真的将所有的排序和查找方法都列了出来,并认真的讲解其过程,并配了图。

    • 作业中阅读量最高的一篇博客是?谈谈经验

      说实话,这学期这个问题依旧让人很纠结,因为我博客被阅读量最大的那篇团队作业一,我们团队的博客都是我一个人来写的,所以浏览量多其实只是别的同学来看我们团队的东西而不是我的博客,所以我就说我的第四周博客吧,我其实没觉得与众不同,也没就就觉得这篇和其他篇有啥区别,浏览量可能是我那一周交的早了点吧,哈哈。

      实验报告链接汇总


      实验一 实验名称:线性结构实验报告

      简要内容:对之前所学的数据结构进行熟悉和操作。

      实验二 实验名称:树实验报告

      简要内容:
      对于树这一种数据结构的深入学习,包括了如何去建立一颗二叉树,决策树,以及对于红黑树代码的分析以及算法的理解。

      实验三 实验名称:查找与排序
      简要内容:安装alibaba 插件,解决代码中的规范问题。完成重构内容的练习

      实验四 实验名称:哈夫曼树的编码实验

      简要内容:关于哈夫曼树的建立以及通过哈夫曼树进行编码并且对于一段文档进行加密的实现。

      团队项目报告链接汇总(消消乐)


      团队作业第一周

      • 团队介绍;
      • 团队任务立项;
      • 团队任务分配;
      • 团队项目经验;
      • 需求说明书;

      团队作业第二周

      • 修改完善《需求规格说明书》;
      • 制定团队的编码规范;
      • 使用Powerdesigner绘制ER图;
      • 项目的后端架构设计;
      • 团队分工;
      • TODOList及燃尽图;
      • 小组会议及交互总结;
      • 本次分工及工作量比例

      冲刺周-RSP小组——消消乐

      代码托管链接:

      20172327马瑞蕃

      statistic.sh的运行结果

      说明本学期的代码量目标达到没有


      代码量是达到了的,这学期知识点串联的比较紧,所以好多代码是有重复使用还和更改的,所以代码量其实并没有特别高,再合适的范围内吧。

      加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得。


      对于《编程的智慧》这篇文章,我读过之后有很多新的认识,这篇文章主要说的是编程过程中的很多重构优化的建议。对于一个对编程入门不久的新人来说,编程学习和代码的实现其实有时就会做的很麻烦,所以就需要更好的指导和更好的思维方式从而使你所实现的代码优雅可读好用。

      文章提到了反复的推敲代码,其实任何东西都应该有艺术性,当你的代码通过不断的推敲感悟,如同画家对于画作的不断修改,才能将最美的一面展现给大家。优雅的代码在我看来,就应该整整齐齐的放在一个一个的盒子中,而完美的逻辑就应该像树状结构,将每个盒子串起来。

      对于代码的可读性,真正优雅可读的代码,是几乎不需要注释的。如果我们充分利用了程序语言的表达能力,你完全可以用程序本身来表达它到底在干什么,而不需要自然语言的辅助。有少数的时候,你也许会为了绕过其他一些代码的设计问题,采用一些违反直觉的作法。这时候你可以使用很短注释。这可能对于现在的我们来说有点困难,但是我想,你在你代码中使用有意义的函数和变量名字,局部变量名字应该简短,简短的配合上下文,就可以简洁明了的表达代码逻辑了。

      这篇文章其实是非常实用的,对于以后的学习和交流,都有很多帮助。

      积极主动敲代码做到没?教材实践上有什么经验教训?


      这学期其实我并没有和上学期一样那么主动去敲代码,书本上的代码也没自己敲过,而且本学期的书中错误还是比较多的,这些是我这学期的不足,可能自己变懒了,或者这学期其他活动有些多,所以对于代码的态度有点懈怠。

      教材实践也没啥经验,跟随大流吧,多看看书,多看看示意图,多看看网上的博客,就会了解更多。

      课堂项目实践


      实践一 实验名称: 时间复杂度分析
      实践内容:

      • 时间复杂度分析,用大O记法写出所给出各题的时间复杂度。


      实践二 实验名称: ArrayStack的实现和测试
      实践内容:

      • 完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。


      实践三 实验名称: 链表插入
      实践内容:

      • 写出链表中节点插入的操作代码:
        public static void InsertNode(Student2 Head, Student2 node){

        }

      • 写出伪代码即可,需要逻辑正确。


      实践四 实验名称: 链表实践
      实践内容:

      • 通过键盘输入一些整数,建立一个链表(1分);
      • 实现节点插入、删除、输出操作(2分,3个知识点根据实际情况酌情扣分);
      • 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序(2分);


      实践五 实验名称: 第四章代码检查
      实践内容:

      • 运行PP28,PP28页的程序,根据个人学号输入后缀表达式并计算。
      • 例如,学号172301,输入1 7 + 2 3 0 1 - + *)
      • 把运行结果截图上传。


      实践六 实验名称:LinkedStack补全
      实践内容:

      • 给出size、isEmpty和toString等方法的定义,以完成LinkedStack类的实现。
      • 要求:1.能够运行
        2.需要测试各个方法
        3.把代码上传到码云,并将关键代码和运行结果截图加水印(学号)上传。


      实践七 实验名称: 第五章代码检查-凯撒密码
      实践内容:

      • 代码检查P72-P73,凯撒密码程序。
      • 运行代码并截图,添加学号水印,上传到码云。


      实践八 实验名称: 杨辉三角
      实践内容:

      • 使用循环队列输出杨辉三角(本题目是选做题,总分1分,计入加分。)。
        +(1)用数组实现循环队列(要考虑扩容问题,否则不加分);
        +(2)输出杨辉三角;
        +(3)代码运行结果添加学号水印,并上传;代码传到码云,附上码云链接。


      实践九 实验名称: 栈队列测试
      实践内容:

      • 完成第六题的分析


      实践十 实验名称: 第六章代码检查
      实践内容:

      • 运行PP6.8和PP6.11的程序,把结果截图,加学号水印,上传到蓝墨云。


      实践十一 实验名称: 线性表实践
      实践内容:

      • 定义一个商品类Product,需要包括商品名称、价格等信息,使用链式存储结构实现一个线性表,存储商店中的商品。
      • 支持插入、删除、选择排序、查找等功能,并进行简单测试。
      • 需要使用的知识点:
        1.泛型
        2.实现Comparable接口中的方法
        3.链式存储结构


      实践十二 实验名称: ASL测试
      实践内容:

      • 已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少?


      实践十三 实验名称: 三种查找算法练习
      实践内容:

      • 每种算法2分,包括画出存储形式和asl的计算。


      实践十四 实验名称:哈希冲突处理实践
      实践内容:

      • 把自己的学号加21,例如学号为1,把22添加到序列后面,使用链地址法,解决冲突。
      • 编程实现,并测试。
      • 要求计算asl,输出冲突次数。


      实践十五 实验名称: 希尔排序测试
      实践内容:

      • D2等于2时,第2趟排序结果是?


      实践十六 实验名称: 树计算题
      实践内容:

      • 1.有1023个结点的完全二叉树,其高度是多少?叶结点数是多少?(2分)
      • 2.高度为h的完全二叉树至少有多少个结点?至多有多少个结点?(2分)
      • 3.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶结点?(2分)


      实践十七 实验名称: 树的深度和叶子个数计算
      实践内容:

      • (1)参考下面叶子节点计算的伪代码,计算课本中背部疼痛诊断器中决策树的叶子节点个数?
        int CountLeaf ( BiTree T, int &count )
        { if ( T )
        { if ( (!T->lchild) && (!T->rchild) )
        count++; // 对叶子结点计数
        CountLeaf( T->lchild, count);
        CountLeaf( T->rchild, count);
        }
        }
      • (2)根据课堂介绍的递归树深度计算算法,计算决策树的深度。


      实践十八 实验名称: 中序和先序计算二叉树结构
      实践内容:

      • 若已知中序和先序序列,计算二叉树结构
      • 例:已知一棵二叉树的先序序列和中序序列分别为ABDGHCEFI 和 GDHBAECIF,试确定二叉树结构。


      实践十九 实验名称: 层次遍历法实践
      实践内容:

      • (1)使用递归实现层次遍历背部疼痛决策树,并按照层次顺序输出每个节点内容。(2分)
      • (2)非递归的层次遍历法算法如下:
        根结点入队;
      • 从队头取元素, 并执行如下3个动作:
        (1)访问该结点;
        (2)如果该元素有左孩子,则左孩子入队;
        (3)如果该元素有右孩子,则右孩子入队;
      • 重复执行上述过程,直至队列为空。 此时,二叉树遍历结束。
      • 按照上述算法,编程实现层序遍历,按照层序的方法,遍历并依次输出每个节点内容。(3分)


      实践二十 实验名称: [堆构造与排序](https://www.mosoteach.cn/web/index.php? c=interaction_homework&m=homework_result_list&clazz_course_id=8CE1 B708-B1CE-11E8-AA22-7CD30AD36C02&id=4AA7110F-42EA-FD15EDA5-EB1619076304)
      实践内容:

      • 根据关键字序列:36,30,18,40,32,45,22,50,构造一颗小顶堆,并排序?
      • 画出构造堆过程(树+数组)


      实践二十一 实验名称: 堆排序测试
      实践内容:

      • 根据关键字序列:36,30,18,40,32,45,22,50,利用数组构造一颗大顶堆,并排序。
        要求:
        (1)输出构造好的大顶堆序列(层序);
        (2)输出每轮排序的结果(数组的结果);
      • 把结果截图并加学号水印上传到蓝墨云,代码上传到码云。


      实践二十二 实验名称: 十字链表练习
      实践内容:

      • 画出十字链表结构


      实践二十三 实验名称: 最小生成树
      实践内容:

      • 1.画出Prim算法的最小生成树的生成过程
      • 2.画出Kruscal算法的最小生成树的生成过程
      • 3.计算最小权值


      实践二十四 实验名称: Dijkstra(迪杰斯特拉)算法测试
      实践内容:

      • 任务详情
        使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。
        图2是课堂介绍的示例。
        要求
        (1)写出V1到各个顶点的最短路径
        (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)撰写博客记录实验的设计和实现过程,并将源代码传到码云
        (6)把实验结果截图上传到云班课

      课堂实践对提高应用能力有帮助吗?

      当然有帮助,虽然和上学期相比,多了很多,也难了很多,但是与写博客相比,感觉要好的多。课堂实践有在课堂上完成的,也有在课下完成的,但基本上十贴合最近所学的内容,让我们加以练习的,在巩固所学内容的同时,也会给我们对于知识的一些拓展。手动与理论相结合,这才可以让知识为我们所吸收。

      课堂实践上自己有什么经验教训?

      首先,一定要及时完成实验,在规定时间内完成,如果被罚写博客,又会占用自己的其他时间,其次,在做实践的同时,我们会感觉到自己对这些知识的了解程度如何,如果不好,借此机会我们可以再复习一遍。

      课堂实践上对老师有什么教学建议?

      和上学期有所不同,我们实践这学期的要更多一些,而且有了一些复习的东西,例如隔了好久,突然布置一篇老早以前的东西,让我们有些措手不及,其实没啥建议,课堂实践与实验感觉越来越接近,没啥区别了。

      课程收获与不足

      自己的收获(投入,效率,效果等)
      + 这学期的收获其实也是蛮多的,数据结构的知识接触,团队项目设计的全过程参与,反正学到了很多东西。以前的我觉得一个Android项目的实现,不就和我们假期中一样,自己找方法,自己一个人编,最后只要成品出来就可以了,但是,经过这次团队编程实践,我知道了还要做很多东西,所有要做的和想要实现的都得让我们提前去规划,提前去做好计划,整个项目不能像自己做那样,难一点实现的就跳过,或该计划,这些都是项目完成中的大忌。而且,一定要按照时间计划中的做,稍有不慎,就会影响整个进度,以致于无法完成。 + 在这学期最后节程序设计与数据结构课之前一晚,我们团队熬了个通宵,为的是我们项目最后的实现,我觉得这并不值得高兴,因为最后的展示中我们出了很多的问题。这些值得反思,值得我们团队所有成员的反思。
      自己需要改进的地方
      不足有很好更多,知识的不扎实,以致于有些代码里的某些部分我不知道是干嘛用的,项目做的少,对于知识没法巩固和复习,有的时候,懒惰和情绪能给我带来好多麻烦,所以,以后要控制情绪,也要有更合理的时间安排和规划。

      问卷调查

      你平均每周投入到本课程有效学习时间有多少?
      每天平均应该有3个小时时间在学习Java,所以一周大概20个小时左右,有时一周项目难一点,章节多一点或许可以达到30个小时。
      每周的学习效率有提高吗?你是怎么衡量的?
      每周的任务不同,难度不同,所以学习效率真的感觉没法评定。
      蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
      有的,资料很多,有些还是有用的,而且通过其布置作业,提交作业都很方便,手机端,pc端都挺好用的。
      你觉得这门课老师应该继续做哪一件事情?
      课堂实践
      你觉得这门课老师应该停止做哪一件事情?
      没啥需要停止,都挺好的。
      你觉得这门课老师应该开始做什么新的事情?
      - 上课能够讲再细致一点,因为有时候没有完全听懂。 - 多开导我们的思维方式。

      总结中涉及到的链接的二维码

      码云项目链接: 二维码

      课程总结

      实验报告

      团队博客

posted on 2018-12-25 22:58  可爱的坏人  阅读(315)  评论(0编辑  收藏  举报

导航