zoukankan      html  css  js  c++  java
  • 20182303 2019-2020-1 《数据结构与面向对象程序设计》课程总结

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

    目录

    每周作业链接汇总

    预备作业

    markdown、vmware安装虚拟机、Linux命令行

    第一周作业

    面向对象编程思想、Hello World

    第二周作业

    教材第二章内容

    第三周作业

    教材第三章内容

    第四周作业

    迭代器&for循环,类与对象

    第五周作业

    继承

    第六周作业

    多态

    第七周作业

    算法分析、栈、队列

    第八周作业

    查找与排序

    第九周作业

    树&二叉排序树

    第十周作业

    教材十九章 图

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

    20182303 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

    1. 要素齐全;
    2. 教材内容总结逻辑比较清晰,并且用了一些动图、漫画等来使其更形象。

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

    20182303 2019-2020-1 《数据结构与面向对象程序设计》第1周学习总结

    这一篇博客很奇怪阅读量居然121,谈不上有什么经验。最大的感触是在接触新事物的过程中,必不可少的是借鉴他人的优秀成果,并以此要求自己,瞎子摸象是效率最低的办法。

    实验报告链接汇总

    实验一

    1. 基于命令行进行简单的Java程序编辑、编译、运行和调试;
    2. 练习Linux基本命令;
    3. 学习Java程序的JDB调试技能;
    4. 编写简单的Java程序。

    实验二

    1. 编写简单的计算器,完成加减乘除模运算。
    2. 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。
    3. 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html)

    实验三

    下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。

    1. 初步掌握单元测试和TDD
    2. 理解并掌握面向对象三要素:封装、继承、多态(自学)
    3. 初步掌握UML建模
    4. 完成蓝墨云上 (1)-(5)实验。

    实验四

    1. Java Socket编程
      学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程,结对编程。
    2. Java和密码学
      以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。
    3. 编写有理数/复数计算器
      结对编程,结对伙伴A编写有理数计算器。结对伙伴B编写复数计算器。截图加水印上传蓝墨云,代码push码云。
    4. 远程有理数计算器
      结对编程,结对伙伴A编程实现客户端,结果伙伴B实现服务器端。客户端通过键盘输入一个有理数计算的公式(例如:1/4+1/6=),并把该公式以字符串的形式发送给伙伴B(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端A,A收到结果后输出结果。
    5. 远程复数计算器
      结对编程,结对伙伴B编程实现客户端,结果伙伴A实现服务器端。客户端通过键盘输入一个有理数计算的公式(例如:1/4+1/6=),并把该公式以字符串的形式发送给伙伴A(服务器端),服务器端根据字符串计算出结果为5/12,并把结果返回给客户端B,B收到结果后输出结果。

    实验五

    1. Android Stuidio的安装测试
      参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十四章。
      参考 http://www.cnblogs.com/rocedu/p/6371315.html#SECANDROID,安装Android Stuidio
      完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号,自己学号前后一名同学的学号,提交代码运行截图和码云Git链接,截图没有学号要扣分。
      学习Android Stuidio调试应用程序
    2. Activity测试
      参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章。
      构建项目,运行教材相关代码。
      创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity
    3. UI测试
      参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章。
      构建项目,运行教材相关代码。
      修改代码让Toast消息中显示自己的学号信息。
    4. 布局测试
      参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章。
      构建项目,运行教材相关代码
      修改布局让P290页的界面与教材不同
    5. 事件处理测试
      参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章。
      构建项目,运行教材相关代码。
      提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分。

    实验六

    1. 链表练习,要求实现下列功能:
      通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数。 再加上今天的时间。
      打印所有链表元素,并输出元素的总数。在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。做完这一步,把你的程序签入源代码控制(git push)。
    2. 链表练习,要求实现下列功能:
      实现节点插入、删除、输出操作;继续上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
      ①从磁盘读取一个文件,这个文件有两个数字。从文件中读入数字1,插入到链表第5位,并打印所有数字和元素的总数。保留这个链表,继续下面的操作:
      ②从文件中读入数字2,插入到链表第0位,并打印所有数字,和元素的总数。保留这个链表,并继续下面的操作。
      ③从链表中删除刚才的数字1,并打印所有数字和元素的总数。
    3. 链表练习,要求实现下列功能:
      使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;如果你学号是单数,选择冒泡排序,否则选择选择排序。在排序的每一个轮次中,打印元素的总数,和目前链表的所有元素。在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。仍然用nZhangSan(你的名字)来表示元素的总数。
    4. 在android上实现实验(1)和(2)
    5. 在android平台上实现实验(3)

    实验七

    1. 定义一个SearchingSorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。
      要求:不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位。
      提交运行结果图。
    2. 重构你的代码
      Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中;
      把测试代码放test包中,重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种)。
    3. 参考 http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试,提交运行结果截图。
    4. 补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个),测试实现的算法(正常,异常,边界),提交运行结果截图。
    5. 编写Android程序对实现各种查找与排序算法进行测试,提交运行结果截图,推送代码到码云(选做)。

    实验八

    1. 参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder),用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试。
    2. 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和先序ABDHIEJMNCFGKL,构造出附图中的树,用JUnit或自己编写驱动类对自己实现的功能进行测试。
    3. 自己设计并实现一颗决策树并完成测试。
    4. 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果。

    实验九

    图的综合实践

    1. 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分)
    2. 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分)
    3. 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分)
    4. 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分)
    5. 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分)

    团队项目报告链接汇总

    第一周

    第二周

    • 完善需求规格说明书
    • 制定团队编码规范
    • 数据库ER图
    • 项目后端架构设计
    • 确定团队分工

    第三、四周

    冲刺(7次 Scrum):团队在日期区间内,任选7天进行冲刺,冲刺当天晚10点前发布一篇随笔,共7篇。

    (1) 第 1 篇 Scrum
    冲刺博客对整个冲刺阶段起到领航作用,应该主要包含四个部分的内容:

    • 各个成员在 Alpha 阶段认领的任务
    • 明日各个成员的任务安排
    • 整个项目预期的任务量(使用整数表示,与项目预估的总工作小时数一致。比如项目A预估需120小时才能完成,则任务量为120。)
    • 团队成员贡献值的计算规则

    (2) 第 2-7 篇 Scrum
    冲刺博客是冲刺阶段的主要产出,主要包含四个部分的内容:

    • 各个成员今日完成的任务(如果完成的任务为开发或测试任务,需给出对应的Github代码签入记录截图;如果完成的任务为调研任务,需给出对应的调研总结博客链接;如果完成的任务为学习技术任务,需给出学习总结博客链接)
    • 各个成员遇到的问题
    • 明日各个成员的任务安排
    • 各个成员今日对项目的贡献量(使用整数表示,如无产出则为0,整个冲刺阶段所有成员的贡献量总和应与项目预期任务量相近)

    (3) 第7篇 Scrum
    冲刺是对冲刺阶段的总结,主要包含两个部分的内容:

    • 各个成员今日完成的任务(要求同上)
    • 项目的发布说明,主要包含:本版本的新功能,软件对运行环境的要求,系统已知的问题和限制,软件的发布方式以及发布地址。

    除上述博客内容外,每次 Scrum 冲刺博客都需要提供当天站立式会议照片一张,发布项目燃尽图,并描述项目整体的进展情况。

    代码托管链接: besti1823/2303

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

    10000行代码目标已达成

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

    ①反复推敲

    如果有几十年的工作经验,却从来不回头去提炼和反思自己的代码,那么他也许还不如一个只有一两年经验,却喜欢反复推敲,仔细领悟的人。
    所以如果反复提炼代码已经不再有进展,那么你可以暂时把它放下。过几个星期或者几个月再回头来看,也许就有焕然一新的灵感。这样反反复复很多次之后,你就积累起了灵感和智慧,从而能够在遇到新问题的时候直接朝正确,或者接近正确的方向前进。

    代码是需要反复去推敲的,总是得去想是不是还有更优解,有时就是这样才能简化代码。同时有时候编程没有思路,也用不了几个星期或几个月,暂时放一放,说不定明天或者睡一会就有思路了,有时候就是当局者迷,跳脱出来以后反而有可能会恍然大悟。
    ②优雅代码(模块化、可读、简单、直观、无懈可击)

    实际上,真正优雅可读的代码,是几乎不需要注释的。如果你发现需要写很多注释,那么你的代码肯定是含混晦涩,逻辑不清晰的。

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

    • 应该算是做到了,偶尔比较懈怠。在代码学习这件事上,动手远比观察效率高。
    • 教材实践的经验教训:教材上给出的代码敲过与看过完全不同,尤其当需要补全方法时,如果敲过教材上的代码,便会发现有规可循,有方法可借鉴,会大大提高自己的效率。

    课堂项目实践

    实践项目总结

    Scanner&JDB练习

    输入两个数,计算两个数的加、减、乘、除运算结果,并输出。
    要求:(本题6分)
    (1)把运行结果截图加水印学号传到蓝墨云(要求截全屏)
    (2)把代码git上码云上(码云无代码不得分)
    (3)用JDB单步调试到某一行代码,例如乘法操作,截图全屏加水印学号上传到这里。

    类的编写实践

    编写一个Book类,其实例数据分别表示书名、作者、出版社以及版权日期。定义一个Book构造方法,接收并初始化实例数据;为所有实例数据定义获取和设置他们的方法;定义一个toString方法,返回几行描述该图书的字符串。创建一个Bookshelf驱动类,其main方法实例化并输出一些Book对象。

    Random和NumberFormat测试

    生成-10~10之间的随机数(1.5分),并格式化输出(0.###)(1.5分)。

    StringBuffer加分题

    public class StringBufferTest {
      public static void main(String[] args) {
          StringBuffer sb = new StringBuffer("cccccccccccc");
          System.out.println("sb:" + sb);
          System.out.println("sb.capacity():" + sb.capacity());
          System.out.println("sb.length():" + sb.length());
    
          StringBuffer sBuffer =new StringBuffer();
          sBuffer.append("cccccccccccc");//12个c
          System.out.println("SBuffer's capacity"+sBuffer.capacity());
    
      }
    }
    

    1.为什么结果不同?
    2.以后超出范围,应该怎么扩容,capacity扩容的规律是什么?

    Interface实践

    定义一个接口People,并定义另外一个Student类,实现该接口,并做简单的测试(StudentTest)。

    复数/有理数计算器(接口)

    编写支持复数和有理数(分数)的计算器(本题6分,根据实际情况酌情扣分):
    (1)可以选择复数或有理数的计算,也可以选择“退出”;
    (2)复数类要求必须implements Comparable接口,并比较两个复数的大小;
    (3)要求用WhiteStarUML画出UML图,加学号传到蓝墨云上;
    (4)要求使用IDEA把代码git到码云上;

    文件读写

    参考云班课资源中的FileTest文件,学习字节流和字符流,要求能够实现创建文件,采用四种方法写入和读取文件(每种方法都要上传结果截图)
    采用一种方法将任意两个复数写入文件,再将这两个复数读取出来,读取后做加运算,将得到的结果再写入文件。

    ArrayStack类的实现和测试

    完成课本中ArrayStack类的实现,特别是完成peekisEmptysizetoString方法的实现,并完成四个方法的测试。

    后缀表达式求值

    从命令行输出一个后缀表达式:
    7 4 -3 * 1 5 + / *
    利用栈计算该表达式的值。

    链表实践

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

    链栈补全(LinkedStack补全)

    给出sizeisEmptytoString等方法的定义,以完成LinkedStack<T>类的实现。

    CircularArrayQueue方法补全

    PP15.2完成CircularArrayQueue类的实现,包括所有的方法。
    注意:要求通过入队和出队操作,出现队空和队满的情况。

    线性表实践(ArrayList、LinkedList)

    学习ArrayListLinkedList类,并在Android平台上实现添加、删除、修改等操作(数据可以自己定义)(3分),并实现倒置(3分)。
    倒置的意思就是:1 2 3 4 5 变为 5 4 3 2 1>

    查找及ASL作业(编程+计算)

    给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11

    二分查找(折半查找)实践

    给Searching类添加二分查找算法的递归实现方法。创建驱动程序来演示这个实现机制。
    (1)编程实现递归;
    (2)创建一个测试类,测试递归实现的二分查找是否正确。

    二叉树的建立和层序遍历法实践

    (1)给定一个序列AB#CD###E#F##建立一颗树,根据“二叉树的生成”算法构造这颗树。(3分)
    (2)使用层序遍历方法完成遍历并测试(3分)。

    递归前中后序和非递归前中序遍历实践

    课堂中,给序列AB#CD###E#F##建立了一颗树。
    在此基础上,分别实现:
    (1)递归方法实现前序遍历、中序遍历、后序遍历。(3分,各1分)
    (2)非递归方法实现前序遍历和中序遍历。(4分,各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)对编码文件进行解码,输出一个解码后的文件
    (5)撰写博客记录实验的设计和实现过程,并将源代码传到码云
    (6)把实验结果截图上传到云班课

    图实践

    图的存储表示以及计算结点的度。
    (1)定义有向图和无向图(把附件图中的箭头去掉)的顶点矩阵和邻接矩阵,并计算每个结点的入度和出度。(3分)
    (2)定义有向图的带权临街表,并计算每个节点的出度(2分)

    拓扑排序实践

    编程实践:
    (1)编写代码初始化有向无环图和有向有环图(见附件1和2),使用邻接表初始化图(3分)。
    (2)使用堆栈实现拓扑排序算法,输出附件1图的拓扑排序序列且没有环,检测附件图2存在环(4分)。

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

    课堂实践时间紧,对完成效率与掌握程度要求都比较高,对提高应用能力有很大帮助。

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

    课堂不听讲,实践泪两行。

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

    课程收获与不足

    自己的收获(投入,效率,效果等)

    • 自主学习:这门课学习过程中,很多知识及工具使用都需要自己通过找博客、找资料去学习。这个过程中,独立思考、择优选精、抓住重点都是重中之重,我也通过这个过程,养成了遇问题先自己思考自己想法解决的习惯。
    • 动手尝试:找了资料能不能解决问题总得试一试才知道,有了想法能不能实施得敲了代码才知道。这也就让我平时总抱着试一试的心态,不试一试就发现不了自己的问题,不试一试问题必然得不到解决。

    自己需要改进的地方

    • 及时总结:在解决完问题后总是扔到一边,而不是及时总结自己解决问题的方法,经常在下一次遇到问题时,忘记了自己是如何解决的,然后又走到处碰壁的熟悉的老路。

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

    结对学习的内容并不多,在做团队项目时,一起学习一起解决问题的时间更多一些

    问卷调查

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

    • 每周的学习时间大概是20小时左右
    • 有效的学习时间占14~16个小时。

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

    • 学习效率第1~8周学习效率比较高。
    • 衡量标准:回顾当周博客自己对知识的掌握程度与理解程度。

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

    • 有促进作用。
    • 建议多放一些博客链接、参考资料。

    你觉得这门课老师应该继续做哪一件事情?

    继续加强目前实践练习,尽可能地帮助我们提高实践应用能力,多让学生自己解决问题。

    你觉得这门课老师应该停止做哪一件事情?

    快停止散发魅力吧!

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

    码云项目链接
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150709322-255926568.png)
    预备作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150720961-1283656072.png)
    第一周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150800427-546331099.png)
    第二周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150808611-1228480939.png)
    第三周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150818353-1346982840.png)
    第四周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150829917-1423447284.png)
    第五周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221150844176-592973214.png)
    第六周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221151219772-71873471.png)
    第七周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221151234186-1826696278.png)
    第八周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221151250887-1537387789.png)
    第九周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221151304472-1710814855.png)
    第十周作业
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191221151319702-638528297.png)
    实验1
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222125928501-1715252607.png)
    实验2
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222125947500-6996446.png)
    实验3
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130001880-562225735.png)
    实验4
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130023697-797820853.png)
    实验5
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130040191-2086951589.png)
    实验6
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130054187-11572165.png)
    实验7
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130106512-1230353787.png)
    实验8
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130117681-622221251.png)
    实验9
    ![](https://img2018.cnblogs.com/blog/1779580/201912/1779580-20191222130130591-591072736.png)
  • 相关阅读:
    大爽Python入门教程 3-1 布尔值: True, False
    以太坊中的账户、交易、Gas和区块Gas Limit
    全链路压力测试经验
    全链路压力测试
    腾讯大牛教你ClickHouse实时同步MySQL数据
    数据湖和数据仓库的区别?
    第六次作业
    linux CPU实时频率命令
    没有Flash如何做直播
    如何扩展srs并发能力
  • 原文地址:https://www.cnblogs.com/zdyyy/p/12077001.html
Copyright © 2011-2022 走看看