课程总结

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

每周作业链接汇总

  • 第一周作业:学习教材第一章,学习使用vim、命令行的使用。

  • 第二、三周作业:学习教材第二、三章,数据和表达式,使用类和对象。

  • 第四周作业:学习教材第四、五章,迭代器和编写类。

  • 第五周作业:学习教材第八章,继承。

  • 第六周作业:学习教材第九、十章,学习了多态和异常,用接口和继承实现多态,try-catch语句捕获异常。

  • 第七周作业:学习教材第十二、十四、十五章,学习了算法分析,栈,队列。

  • 第八周作业:学习教材第十三章,查找和排序,选择排序,插入排序,冒泡排序等。

  • 第九周作业:学习教材第十六、十七章,树,二叉查找树。

  • 第十周作业:学习教材第十九章,图 ,深度广度优先遍历,最小生成树,拓扑排序。

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

  • 自认为写的最好的是第七周作业,原因如下:

  • 在编写这篇博客前我上课认真听讲并且做了笔记,本次博客开始详细记述了对本周学习内容的总结。

  • 本次博客尝试使用MARKDOWN格式添加代码于随笔上。

  • 本次博客为了方便以后理解当时所讲内容,还从网上找到冒泡排序动图插入。

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

  • 本学期阅读量最高的一篇博客是第六周作业

  • 经验:上传后发现编写的随笔格式存在问题,且存在链接未附上的问题,当时未能改正。

实验报告链接汇总

  • 实验一:用vim进行编程,单步调试,git push到码云。

  • 实验二:编写计算器及相应的测试代码。

  • 实验三:封装、继承、多态,uml建模。

  • 实验四:编写有理数,复数计算器,及和服务器有关的远程有理数、复数计算器。

  • 实验五:Android Studio的Activity、UI、布局、事件处理测试。

  • 实验六:建立并打印链表,并在Android上实现。

  • 实验七:选择与排序。

  • 实验八:链树和决策树的实现,实现中缀转后缀。

  • 实验九:有向图,无向图,拓扑排序,最小生成树。

团队项目报告链接汇总

  • 团队作业第一周:完成团队展示、团队选题与规格需求说明书。

  • 团队作业第二周:修改规格需求说明书,制定团队编码规范,ER图,后端构架设计,确定团队分工。

代码托管链接

给出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这门语言,如何总结收获。虽然每次测试结果都不理想,但上课时我能感受到老师有内涵懂得东西很多,我理解消耗所讲精华需要一定时间,但还是很感谢老师的付出。

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

posted @ 2019-12-29 21:18  20182302  阅读(339)  评论(0编辑  收藏  举报