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

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

  • 课程:《程序设计与数据结构》
  • 班级: 1723班
  • 姓名: 范雯琪
  • 学号:20172303
  • 教师:王志强
  • 助教:张师瑜/张之睿
  • 必修/选修: 必修

每周做业连接汇总

  • 第一周总结
    • 简要内容:软件及数据结构的概述(软件质量的特征);算法分析(时间复杂度和空间复杂度)大O记法
  • 第二周总结
    • 简要内容:ADT;使用数组实现栈;使用链表实现栈。
  • 第三周总结
    • 简要内容:队列相关概念;用链表实现队列;用数组实现队列;双端队列
  • 第四周总结
    • 简要内容:列表相关概念(三种类型:有序列表、无序列表、索引列表);用数组实现列表;用链表实现列表;在数组中实现删除某一元素再将其后面的元素分别向前移动一位时应该选择正序仍是逆序的判断方法
  • 第五周总结
    • 简要内容:两种查找方法(线性查找和二分查找)及其比较;六种排序方法(选择排序、插入排序、冒泡排序、快速排序、归并排序和基数排序);查找方法和排序方法的时间复杂度分析泛型方法的使用
  • 第六周总结
    • 简要内容:树的相关术语、分类及四种遍历方法;二叉树的概念;二叉树的性质;用数组实现二叉树;用链表实现二叉树;二叉树的应用(表达式树和决策树);某些状况下一些方法要先定义一个私有方法再定义一个公有方法来调用它的缘由
  • 第七周总结
    • 简要内容:二叉查找树的概念;二叉查找树的实现前驱结点和后继结点平衡二叉查找树的方法;二叉查找树的应用(AVL树和红黑树);递归和迭代的区别
  • 第八周总结
    • 简要内容:堆的概念;堆的相关操做(构造、插入、删除);用链表实现堆;用数组实现堆;堆排序
  • 第九周总结
    • 简要内容:图的概念及分类;广度优先遍历(BFS)和深度优先遍历(DFS)寻找最小生成树判断最短路径图的实现策略(邻接列表和邻接矩阵);。

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

  • 我的以为本学期写的最好的一篇博客是第5周学习总结
  • 在写总结博客的时候把这个学期写的全部教材内容学习博客都翻了一遍,发现其实我有一个很大的问题就是:教材内容总结写的多的时候基本问题就写的少,教材内容总结写的少的时候问题就写得相对多。惟一能找到的一篇两个都写的比较多的换句话说就是内容比较充实丰满的可能就是第五篇了。
  • 并且我很清楚地记得当时写这篇博客的时候,为了把每一种查找/排序方法的代码分析和时间复杂度写出来,那部分的教材被我翻来覆去翻了很久,起码当时的我能保证那一部分的代码每一行是干吗的我都清清楚楚(如今就不必定了 (:з」∠) )。
  • 除此以外我以为这篇博客是我全部博客里最图文并茂的一篇博客了,当初那些动图花了好大功夫才找到,如今看起来仍是蛮有成就感的ヾ(๑╹◡╹)ノ"

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

  • 阅读量最高的一篇博客也是第5周学习总结。经验的话说实话实在很差意思谈,由于本学期个人博客阅读量都不是很高,可能由于你们广泛博客都写的愈来愈好了,并且可能也有我我的的缘由在里面吧...致使你们主观上不怎么想看个人博客。非要说的话可能就像我刚刚在上一部分分析的那样,首先是博客的内容比较充实,其次这一部分的内容都是一些很抽象的方法,概念看起来也不是很容易理解,但用图片这种比较直观的形式来表达就会让人比较容易理解原理。因此说,当相关教材内容比较抽象难以理解的时候,使用图文并茂的方式会更方便理解,也会让本身的博客看起来很美观,可是图文并茂的意思是图片和文字是同等重要的,若是你只放一大堆一大堆看起来很唬人的图,可是一点本身的理解都没有,那也不能叫图文并茂,这就是个人经验。

实验报告连接汇总

  • 实验一 线性结构之数组和链表
    • 简要内容:实现元素的插入、删除和输出;使用选择排序或冒泡排序对元素进行排序。
    • 分别使用数组和链表实现如下三个节点:
      • 节点一
        • 经过键盘输入一些整数,创建一个链表。
        • 打印全部链表元素, 并输出元素的总数。
        • 在程序中,请用一个特殊变量名来纪录元素的总数。
      • 节点二
        • 从磁盘读取一个文件,这个文件有两个数字。
        • 在实验一的基础上实现节点插入、删除、输出操做。
      • 节点三
        • 使用冒泡排序法或者选择排序法根据数值大小对链表进行排序(学号是单数,选择冒泡排序,不然选择选择排序)
        • 在排序的每个轮次中,打印元素的总数,和目前链表的全部元素。
  • 实验二 树的应用
    • 简要内容:二叉树、决策树、表达式树、二叉查找树、红黑树五种树的应用。
    • 共设置了六个节点:
      • (一)参考教材P212,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder),用JUnit或本身编写驱动类对本身实现的LinkedBinaryTree进行测试。
      • (二)基于LinkedBinaryTree,实现基于(中序,先序)序列构造惟一一棵二㕚树的功能,好比给出先序ABDHIEJMNCFGKL和中序HDIBEMJNAFCKGL,构造出附图中的树,用JUnit或本身编写驱动类对本身实现的功能进行测试。
      • (三)本身设计并实现一颗决策树。
      • (四)输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(若是没有用树,则为0分)。
      • (五)完成PP11.3。
      • (六)参考Java Collections API源码分析对Java中的红黑树(TreeMap,HashMap)进行源码分析,并在实验报告中体现分析结果。
  • 实验三 查找与排序
    • 简要内容:查找方法和排序方法的应用;新的查找方法:插值查找、斐波那契查找新的排序方法:希尔排序、二叉树排序Linux命令行复习JUnit测试方法复习
    • 共设置了四个节点,一个选作节点:
      • (一)定义一个Searching和Sorting类,并在类中实现LinearSearch(教材P162),SelectionSort方法(P169),最后完成测试。
      • (二)重构你的代码,把Sorting.java Searching.java放入cn.edu.besti.cs1723.(姓名首字母+四位学号)包中。
      • (三)参考七大查找算法在Searching中补充查找算法并测试,提交运行结果截图。
      • (四)补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个)。
      • 选作:编写Android程序对各类查找与排序算法进行测试。

团队项目报告连接汇总

代码托管连接

给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?

  • 上学期结束时的代码量:
  • 本学期至今统计的代码量:
  • 本学期的代码量为12870,本学期的代码量比上学期还多不少,很大的一个缘由是本学期的各类实践活动比上个学期多了不少,感受本身的动手实践能力也比上学期要提升很多,感谢王老师٩( 'ω' )و 

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

  • 重读这篇文章,感受本身又有了很多新的体会。之前总以为敲代码只要最终能实现就好,但就像一个软件要有可维护性同样,敲代码其实也是有不少技巧的。我一直以为敲代码是一个很枯燥且烦躁的过程,由于想不出来的时候真的很难受,但我历来没有想过编程还能够用“优雅”来形容,就给人一种很是从容自信的感受,人们老是嘲讽程序员是“程序猿”“码农”,可能在开始学习计算机以后我也有些情不自禁地把本身代入这种角色中,可是就像老师上课说的同样,“码农”值得是不思考的机械的敲代码的程序员,若是可以将敲出优雅的代码做为目标,并常常思考怎样才能使代码变得更简单、更直观可读,那么敲代码其实就成为一种艺术了,耕耘艺术的人是绝对不会容许本身仅仅局限于“程序猿”“码农”的。
  • 我找到一篇博客很好地总结了这篇文章的精髓:王垠《编程的智慧》总结,可是仅仅知道技巧是不够的,仍是要多敲多练。然而就像《编程的智慧》刚开始说的那样,若是只是匆匆写出代码,却历来不回头去推敲,修改和提炼也是不行的,仍是要把二者结合起来,才能真正提升本身的代码质量和编码水平,感受有那么点辩证统一的意味在里面。

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

  • 这个学期我感受我可能比上学期更加积极了一点,就好比第一周总结的课后习题中有一个肯定代码的增加函数和阶次的题,当时很天然地就想到应该实际敲一敲去实践一下,包括后来有一次敲书上代码的时候发现了代码有不少错误,若是不是本身敲而是直接复制粘贴别人的那就不可能发现这些错误了。因此说敲代码的时候必定要动脑子想,而不要只是机械地把代码从书本复制到IDEA上,这样对理解课本内容也很是有好处,就好比学广度优先遍历和深度优先遍历的时候,其实看教材的时候我彻底不清楚它的原理,可是在仔细看了代码看懂以后就明白这两种遍历方法是怎么实现的了。

课堂项目实践

  • 参考蓝墨云班课

课堂实践连接

  • 时间复杂度分析:计算时间复杂度,用大O记法进行表示,一共4道题。
  • ArrayStack类的实现和测试:实现ArrayStack类中的peek、isEmpty、size和toString方法,并完成四个方法的测试。
  • 链表插入:写出链表中节点插入的伪代码。
  • 链表实践:经过键盘输入一些整数,创建一个链表;实现节点插入、删除、输出操做;使用冒泡排序法或者选择排序法根据数值大小对链表进行排序。
  • 第4章代码检查:运行PP28,PP28的程序,根据我的学号输入后缀表达式并计算。
  • LinkedStack补全:实现size、isEmpty和toString等方法并进行测试。
  • 第5章代码检查:运行课本P72-P73凯撒密码程序。
  • 杨辉三角(选作题):使用循环队列输出杨辉三角。
  • 栈队列测试题:完成第六题的分析。
  • 第6章代码检查:运行PP6.8和PP6.11的程序。
  • 线性表实践:定义一个商品类Product,须要包括商品名称、价格等信息,使用链式存储结构实现一个线性表,存储商店中的商品,同时支持插入、删除、选择排序、查找等功能,并进行简单测试。
  • ASL测试:已知线性表具备元素{5,13,19,21,37,56,64,75,80,88,92},若是使用折半查找法,计算其ASL。
  • 三种查找算法练习:画出三种算法的存储形式和并计算ASL。
  • 哈希冲突处理实践:把本身的学号加21,例如学号为1,把22添加到序列{11,78,10,1,3,2,4,21}后面,使用链地址法,解决冲突,同时计算ASL,输出冲突次数。
  • 希尔排序测试:当D2等于2时,写出第2趟排序结果。
  • 树-计算题:计算下列三道题
    • 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,试肯定二叉树结构。
  • 层次遍历法实践:使用递归和非递归的方法实现层序遍历,遍历背部疼痛决策树,并按照层次顺序输出每一个节点内容。
  • 堆构造与排序:根据关键字序列:36,30,18,40,32,45,22,50,构造一颗小顶堆,并排序,画出构造堆过程(树+数组)
  • 堆排序测试:根据关键字序列:36,30,18,40,32,45,22,50,利用数组构造一颗大顶堆,并排序。
  • 十字链表练习:依照图画出十字链表结构。
  • 最小生成树:依照图完成下列操做
    • 1.画出Prim算法的最小生成树的生成过程
    • 2.画出Kruscal算法的最小生成树的生成过程
    • 3.计算最小权值
  • Dijkstra(迪杰斯特拉)算法测试:使用Dijkstra(迪杰斯特拉)算法计算单源(V1出发)最短路径。要求:(1)写出V1到各个顶点的最短路径(2)要求写出最短路径计算过程。
  • AOE练习(加分):完成下图中四道题。


  • 哈夫曼编码测试:设有字符集: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个英文字母的文件,统计每一个字符出现的几率,根据计算的几率构造一颗哈夫曼树,并完成对英文文件的编码和解码。

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

  • 感受这学期老师讲的比上学期更好了,讲的都很清楚PPT内容也都很好,并且这个学期的实践数量相比上学期真的大幅度提高,我感受对个人帮助挺大的,尤为是如今老师上课讲的不少内容都是给咱们课外补充的,课堂实践常常能帮我巩固老师上课讲的内容,有些听课时没听懂或者比较模糊的地方在作题的时候就很容易搞明白。就像大一的时候学高数线代的时候同样,检测你知识学没学好的最佳方法就是看看你会不会作题(即实践)。

课堂实践上本身有什么经验教训?

  • 上课认真听讲真的很是很是很是重要,上个学期有时候还由于感受听不懂因此听不进去,因此常常用上课录视频或者下课问同窗的方法来弥补,可是本学期真的是每一堂课都认认真真听下来了,课堂实践部分若是是用代码实现的实践还可能费点时间,可是那种纯靠思考手写的通常都会写,不过仍是容易犯粗心的毛病。

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

  • 首先但愿老师若是以后还会教其余班的话必定要保持如今的讲课方式方法,真心以为这学期比上学期讲得更好了并且每一节课都挺清楚的。课堂实践方面的话,但愿老师不要老是对咱们那么自信觉得咱们很轻易就能把实践作完,有些实践的结束时间稍微设的晚点吧(捂脸)。

课程收获与不足

本身的收获(投入,效率,效果等)

  • 感受这个学期学的真的比上学期好不少,首先博客质量要比上学期高,再者感受对这个学期的学习脉络很清晰,就算有什么东西忘了,也能很快找到应该从哪儿再把它“捡”起来,我以为这就是进步,不像上个学期那样学的稀里糊涂的,这学期有时候有些东西要用到上学期的知识时要来回翻半天。
  • 而后就是关于java的学习模式,之前就是很随意,有时候先看书后写博客,有时候边看边写,可是本学期就造成了一套固定的并且相对而言比较成熟的学习模式,就是先把教材内容看完,而后敲代码作课后题,最后再写博客。由于在敲代码的过程当中常常会对课本内容有一些更深入的理解,这样在写教材内容总结的时候也可以更充实。

本身须要改进的地方

  • 效率问题吧,感受这学期虽然对内容学得比较清楚,可是效率真的不高,尤为是写博客的效率,常常在一个小地方卡半天。
  • 而后还有一点,可能由于这个学期学习的时间有所减小,因此对于教材上的内容深究的很少了,不少东西都只是浮于表面,我以为这也是我这学期博客中提出的问题不多的缘由所在,在从此的学习中必定要努力避免这种状况。

结对学习是否是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议

  • 提及来惭愧,感受我和结对伙伴这学期的状态和上学期正好是相反的,刚开学的几周状态很好,巅峰应该是第四周,国庆的时候咱们两个从4号开始泡到912学java,最搞笑的是本身的问题都是对方帮忙解决的。可是日后因为种种缘由,结对学习的时间逐渐变少,可能到了期末作项目的时候又好起来了。
  • 虽然我也帮他解决了很多代码上的问题,但我以为我本学期和他说的最多的仍是怎么把博客写的更好一点。本学期个人结对伙伴给我提供的帮助包括各类方面,课本上代码的理解啊,IDEA里的运行错误啊,包括如何修改博客园的字体样式也是他教会个人,整体而言仍是给我提供了不少帮助的~

问卷调查

你平均每周投入到本课程有效学习时间有多少?

  • 20-30小时,感受比上个学期要多,通常可能要一到两天的时间。

每周的学习效率有提升吗?你是怎么衡量的?

  • 感受有了前期的积累,后期学起来要效率高一点。
  • 首先是有了(自认为的)规范的学习模式,再其次是这学期后期的学习内容基本都和树是相关的,学习起来比较连贯,课后实践也基本先后有联系,相对而言效率要比前期高。

蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?

  • 有啊!并且这学期蓝墨云改版了,PPT看起来更方便了,并且这学期基本都是一些文档博客PPT,相比上学期的视频而言看起来更方便了。
  • 建议是但愿班课上的资源仍是文档类的比较好,视频类的真的不方便看,若是设置成进度条不可拖拽的话有些时候比较浪费时间。

你以为这门课老师应该继续作哪一件事情?

  • 不仅局限于课本。若是真的课本内容比较简单就讲一些课外的知识,感受这学期真的学习到了好多知识。

你以为这门课老师应该中止作哪一件事情?

  • 那种拍视频一个0.5分的加分项,有时候课上回答一个问题也能加0.5分,可是拍视频真的是个蛮费时间的事情,最后只给加0.5分感受有点亏,并且上传以后看的人不是不少(基本都十来我的左右),若是不能稍微增长分值的话感受这个仍是取消比较好。

你以为这门课老师应该开始作什么新的事情?

  • 暂时尚未想到...感受如今java这种翻转课堂的授课模式已经成熟得不能再成熟了。
  • 那就但愿老铁能偶尔稍微休息休息吧不要再那么累本身了_(:з」∠)_

其余自由发挥

  • 写到这里其实能够说整个程序设计与数据结构课程的学习也就接近尾声了,想一想这是最后一篇博客了还有些兴奋。
  • 说实话博客是我整个学习过程当中最磨人的小妖精了,常常由于写博客花费不少时间,一直再纠结应该怎么写,由于我有一些功利心理,因此总想着怎么才能把博客写好拿到加分,常常写得愁眉苦脸成天郁郁不得志,有时候周围人比本身博客写的晚但交得早那种感受真的蛮苦涩的,若是有一篇博客本身以为写得贼好结果最后没拿到加分,可能后面几周写博客的时候都会很纠结,惧怕本身又写很差,还会常常去看那回加分的那几篇博客有哪些优势能够借鉴。这种功利的追求加分真的把本身搞得蛮累的,不过起码写出来的博客都还让本身比较满意,内容还算充实。但愿以后还有学习这门课的学弟学妹在偶然间翻到个人博客时不会以为“这我的博客写的好水啊”,若是他们可以以为我哪一篇博客写得不错那我就更开心啦。
  • 我一直很清楚我不是那种java学的好的人,到如今为止还有些东西可能概念仍是不清晰(主要集中在上学期学习的东西),记得本学期一次上课的时候老师从新提起递归,当时有些同窗立马就能说出递归是什么,一针见血说出它的要点,但当时我却脑子一片空白,我就很慌张,赶忙翻之前的博客去看。人都是有忘性的,因此说知识是要及时复习的,由于java学习和其余课程的学习形式有所不一样,让我常常忽略这点,在之后其余课程的学习中必定要注意及时复习。
  • 也不知道本身絮絮不休打了这么多会不会都是废话,总而言之,整个java的学习过程仍是痛并快乐着的,那种Debug了好屡次改了很久的代码最后终于运行成功的想让人到操场飞奔十几圈的开心多是我在其余事情上永远感觉不到的。

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

教材内容总结

  • 第一周总结
  • 第二周总结
  • 第三周总结
  • 第四周总结
  • 第五周总结
  • 第六周总结
  • 第七周总结
  • 第八周总结
  • 第九周总结

实验报告

  • 实验一 线性结构之数组和链表
  • 实验二 树的应用
  • 实验三 查找与排序

项目

  • 团队做业第一周
  • 团队做业第二周
  • 冲刺阶段Day1-Day7






课堂实践

  • 时间复杂度分析
  • ArrayStack类的实现和测试
  • 链表插入
  • 链表实践
  • 第4章代码检查
  • LinkedStack补全
  • 第5章代码检查
  • 杨辉三角(选作题)
  • 栈队列测试题
  • 第6章代码检查
  • 线性表实践
  • ASL测试
  • 三种查找算法练习
  • 哈希冲突处理实践
  • 希尔排序测试
  • 树-计算题
  • 树的深度和叶子个数计算
  • 中序和先序计算二叉树结构
  • 层次遍历法实践
  • 堆构造与排序
  • 堆排序测试
  • 十字链表练习
  • 最小生成树
  • Dijkstra(迪杰斯特拉)算法测试
  • AOE练习(加分)
  • 哈夫曼编码测试
相关文章
相关标签/搜索