20182308201820191《程序设计与数据结构》课程总结
作者:潇洒嘉新 | 来源:互联网 | 2023-09-13 11:13
201823082018-2019-1《程序设计与数据结构》课程总结每周作业链接汇总第一周作业认真学习考核方式,理解成绩构成;认真学习课前准备,掌握学习方法;作业一定按教学进程中的
20182308 2018-2019-1《程序设计与数据结构》课程总结每周作业链接汇总 第一周作业认真学习考核方式,理解成绩构成; 认真学习课前准备,掌握学习方法; 作业一定按教学进程中的模板提交; 本周学习任务; 完成本周学习任务,并撰写博客; 第二、第三周作业 1.教材第2章 (1)编辑、编译、运行教材上代码,参考「积极主动敲代码,使用Junit学习Java程序设计」 (2)代码中不懂的内容仔细阅读教材,参考Java API帮助文档 (3)代码托管到git@OSC, (4)完成课后自测题,并参考答案学习 (5)完成课后练习题 (6)完成程序设计项目:至少完成PP2.2, PP2.4, PP2.6, PP2.08, PP2.10 2.教材第3章 (1)阅读全文,编辑、编译、运行教材上代码 (2)代码托管到git@OSC,参考一下使用托管代码 (3)完成课后自测题,并参考答案学习 (4)完成课后练习题 (5)完成程序设计项目:至少完成PP3.1, PP3.3, PP3.5 3.完成上面两章,并撰写博客
第四周作业 教材4.8.1节和第5章:阅读全文,编辑、编译、运行教材上代码 代码托管到git@OSC,参考一下使用托管代码 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目:至少完成PP5.3, PP5.6, PP5.13 第五周作业 教材第8章 (1)阅读全文,编辑、编译、运行教材上代码 (2)代码托管到git@OSC,参考一下使用托管代码 (3)完成课后自测题,并参考答案学习 (4)完成课后练习题 (5)完成程序设计项目:至少完成PP8.2~PP8.8
完成上面内容,并撰写博客 第六周作业 教材第9章和教材第10章阅读课本章节内容 代码托管到码云上 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目,至少完成pp9.2,pp9.4,pp9.6,pp9.7,pp10.2,pp10.3 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第六周学习总结”。 第七周作业 教材第12章、第14章和教材第15章阅读课本章节内容 代码托管到码云上 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目,至少完成pp14.1,pp14.7,pp15.1,pp15.2 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第七周学习总结”。 第八周作业 教材第13章阅读课本章节内容 代码托管到码云上 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目,至少完成pp13.2,pp13.6 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第八周学习总结”。 第九周作业 教材第16章和第17章阅读课本章节内容 代码托管到码云上 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目,至少完成pp16.6,pp17.1 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第九周学习总结”。 第十周作业 教材第19章阅读课本章节内容 代码托管到码云上 完成课后自测题,并参考答案学习 完成课后练习题 完成程序设计项目,至少完成pp19.1,pp19.3 参考上面的学习总结模板,把学习过程通过博客(随笔)发表,博客标题“学号 《程序设计与设计结构》 第十周学习总结”。 自认为写得最好一篇博客是?为什么? 第九周学习总结 虽然之前写过许多篇幅更长,视觉效果更好的博客,但是那个时候还没有设置好博客园随笔的格式,不是Markdown。可以说第九周学习总结是我写的、属于Markdown格式的随笔中比较好的一篇了。 作业中阅读量最高的一篇博客是?谈谈经验 第一周学习总结 好像没什么经验之谈,只不过最初大家都对学习总结的博客没什么概念的时候,我比较早地交了这个博客而已。然而事实证明,我前期的随笔格式是有问题的,所以大概只能作为教训来保存吧。 实验报告链接汇总 实验一 实验名称:Linux基础与Java开发环境简要内容:基于命令行和IDE(Intellj IDEA 简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑、编译、运行和调试。(本次实验主要使用命令行的方式) 练习Linux基本命令; 学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html 编写简单的Java程序。 实验二 实验名称:Java基础(数据/表达式、判定/循环语句)简要内容:编写简单的计算器,完成加减乘除模运算。 要求从键盘输入两个数,使用判定语句选择一种操作,计算结果后输出,然后使用判定和循环语句选择继续计算还是退出。 编写测试代码,测试验证。(https://www.cnblogs.com/rocedu/p/4472842.html) 实验三 实验名称:面向对象程序设计简要内容:下载安装并使用IDEA,完成下面实验(https://www.cnblogs.com/rocedu/p/6371315.html)。 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装、继承、多态(自己去学!) 初步掌握UML建模 完成蓝墨云上 (1)-(5)实验。 实验四 实验名称:Java Socket编程Java Socket编程学习蓝墨云上教材《Java和Android编程》“第16章 输入/输出 ”和“第22章 网络”,学习JavaSocket编程 结对编程。结对伙伴A编写客户端SocketClient.java,结对伙伴B编写服务器端。 截图加学号水印上传蓝墨云,代码push到码云,并撰写实验报告。 Java和密码学以结对的方式完成Java密码学相关内容的学习(帖子中所有代码和相关知识点需要学习)。提交学习成果码云链接和代表性成果截图,要有学号水印。 编写有理数/复数计算器 远程有理数计算器 远程复数计算器 实验五 实验名称:Android程序设计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调试应用程序 Activity测试参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十五章: 构建项目,运行教材相关代码 创建 ThirdActivity, 在ThirdActivity中显示自己的学号,修改代码让MainActivity启动ThirdActivity UI测试参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十六章: 构建项目,运行教材相关代码 修改代码让Toast消息中显示自己的学号信息 布局测试:参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十七章: 构建项目,运行教材相关代码 修改布局让P290页的界面与教材不同 事件处理测试:参考《Java和Android开发学习指南(第二版)(EPUBIT,Java for Android 2nd)》第二十八章: 构建项目,运行教材相关代码 提交代码运行截图和码云Git链接,截图要有学号水印,否则会扣分 实验六 实验名称:线性结构之链表链表练习,要求实现下列功能:通过键盘输入一些整数,建立一个链表;这些数是你学号中依次取出的两位数,再加上今天的时间。 打印所有链表元素, 并输出元素的总数。 在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 做完这一步,把你的程序签入源代码控制(git push)。 链表练习,要求实现下列功能:实现节点插入、删除、输出操作; 继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器; 从磁盘读取一个文件, 这个文件有两个数字。 从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。 从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。 从链表中删除刚才的数字1. 并打印所有数字和元素的总数。 链表练习,要求实现下列功能:使用冒泡排序法或者选择排序法根据数值大小对链表进行排序; 如果你学号是单数, 选择冒泡排序, 否则选择选择排序。 在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。 在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 在android上实现实验(1)和(2) 在android平台上实现实验(3) 实验七 实验名称:查找与排序定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图。 重构你的代码,把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301)把测试代码放test包中 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) 参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试,提交运行结果截图 补充实现课上讲过的排序方法希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵,也可以酌情得满分) 实验八 实验名称:树参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试 提交测试代码运行截图,要全屏,包含自己的学号信息 课下把代码推送到代码托管平台 基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息 课下把代码推送到代码托管平台 自己设计并实现一颗决策树;提交测试代码运行截图,要全屏,包含自己的学号信息 输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果 实验九 实验名称:图初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分) 团队项目报告链接汇总 代码托管: 代码托管链接 给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?原本计划6000行代码,现在纯JAVA代码是7333代码,完成了这学期的代码量目标。 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得这是一个非常玄乎的问题。因为面对对象的编程语言,是需要大量引用别的地方的代码的。这些代码并非以库文件的形式存在,很多时候是自己敲的代码。为此,抄代码是不可能的事情,而改代码也是相当困难的事情。代码借过来之后,如何修改、不同的变量指的是什么,都相当麻烦。为此,我觉得这门课确实不适合以高强度进行,而是需要一些消化时间的。 积极主动敲代码做到没?教材实践上有什么经验教训?大概是没有做到,光是把老师布置的实践做完已经是一件非常不容易的事情了,把课本上的代码敲完之后,不太可能有时间去探索其他的代码。教训就是学习确实不能完全脱离课本,许多课堂实践用到的代码,在书本上都有一些代码可以提供思路参考、甚至是原文。同时教材上的代码为了进行示范,一些地方是有大量的重复的、不适合的、徒劳无益地增加工作量的,比如System out println中的内容,其实很多时候可以自定义。 课堂项目实践 课堂实践链接(没有的可以不列)课堂实践-Scanner&JDB练习 类的编写实践 Random和NumberFormat测试 Interface实践 复数/有理数计算器(接口) 文件读写 期中测试 时间复杂度分析 ArrayStack类的实现和测试 后缀表达式求值 出门条-栈-数组实现栈 链栈补全(LinkedStack补全)size\isEmpty\toString\Push 链表插入 链表实践 CircularArrayQueue方法补全 线性表实践(ArrayList、LinkedList) 查找及ASL作业(编程+计算) 二分查找(折半查找)实践 快速排序测试(必须有中间过程) 选择排序最坏情况 树-计算题 中序和先序计算二叉树结构 二叉树的建立和层序遍历法实践 递归前中后序和非递归前中序遍历实践 堆排序过程测试 二叉排序树实践 哈夫曼编码实践 哈夫曼编码测试 图实践 十字链表练习 图的DFS和BFS测试 考试安排冲突问题(画图) 最小生成树测试 Dijkstra(迪杰斯特拉)算法测试 AOE/AOV练习 拓扑排序实践测试 课堂实践对提高应用能力有帮助吗?Java部分的课堂实践恐怕没有,因为每次限定那么短的时间内想要敲出相应的代码来确实不是容易的事情。而数据结构部分的有一定帮助,在课末的时候(虽然很多时候时间还是不够用)进行一些绘图、计算之类的工作,来重温一下课上学的内容,也是比较合适的。 课堂实践上自己有什么经验教训?这个问题在后期数据结构的学习的时候更加明显:数据结构的很多东西都是相当抽象的,如果老师在讲的时候你稍微跟不上一点,那么之后的课堂实践就不会做。 课堂实践上对老师有什么教学建议?希望老师以后给课堂实践之前能有点征兆,忽然整活确实让我们猝不及防。 课程收获与不足 自己的收获(投入,效率,效果等)因为这一门课的学分最多、课时最多,所以投入的时间最多也没有什么问题。 效率多少是存疑的,因为战线拉得太长,而且本人的基础本来就差、学习速度又快,许多时候并不是靠简简单单的“努力”一词可以拉小差距的。 效果并不如设想的那么好,不过在高强度地整活下,Java语言的基本编程语法知道了,面向对象编程语言的三要素牢牢记住了(继承、多态、封装),同时也了解了一些数据结构的基本常识。 自己需要改进的地方可能还是需要多看书、多熟悉一些基础的知识点吧。每一次随堂测试的成绩都不高,恐怕就是因为忙着应付敲代码的同时,留给课本的时间确实是太少了。许多知识点(尤其在前面Java语言部分)即便看过了也很容易转头就忘。 结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议结对学习在相当程度上是非常不妥当的一件事情,因为事实上结对学习的两个人很难是“一好带一差”。结对大多数情况还是根据自己的社交关系来制定的,许多时候资源是不合理分配的,成绩好的同学很多时候也和成绩好的同学在一起组队,而成绩差的同学也很难抱得到大腿。这个问题在之后的制作APP的时候也充分体现了——有的团队组起一个全明星并不是为了做出一个全明星质感的APP,而是只是因为单纯想要垄断班里成绩最好的几个同学而已。所以我建议老师以后不必将团队合作这样的内容制订为明面上的规则,这样其实反而限制了同学们之间的自由互助、自由竞争。 问卷调查 你平均每周投入到本课程有效学习时间有多少?不太清楚,课堂时间中的大部分时间,周末大概有六个小时的时间能拿来学习 每周的学习效率有提高吗?你是怎么衡量的?有些许提高吧。看打开电脑看代码的时间,有多少时间是专注的。 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?有促进,加强了课堂的互动感。不过希望老师以后不要这么高强度整活了。 你觉得这门课老师应该继续做哪一件事情?继续维持上课时候幽默风趣的上课风格,加强上课中与学生的互动、PPT图形演示等。 你觉得这门课老师应该停止做哪一件事情?将过多的时间交给学生来自习,说是锻炼学生的自主学习能力,但事实上在开荒阶段这样做只会徒然拉大同学们之间的差距,导致前期走得慢的同学整个学期的节奏都会被打乱。 全英文的课堂实践方式。这个活强度太高了。我们需要一个翻译器,而且我们容易把更多时间放在找答案、而非思考上。 其他任意发挥 班主任在刚开学的时候就给我们说,和王Sir认真学,不是为了应付考试,那么一定会有所收获的。我很惭愧,我不知道这学期对我来说具体的收获是什么,最多就是捣鼓捣鼓,过了一把下了IDEA、Android Stdio充当大佬的瘾罢了。但是这也同样让我知道了,开发软件很多,而网上的各种资源教程也很多。我们许多所谓的自习,都是一边看CSDN,一边自己抄一些、敲一些这样过来的。如果以后仍然有兴趣去学习一门编程语言,或者进行计算机其他方面的课程学习的时候,仍然可以试一试这样连滚带爬的方法去自习一下。
这门课学分很多,但是不用期末考试,我们却没有因此更加轻松。不如说把战线拉长了之后,我们的学习生活是更加痛苦的。一拖再拖是我在这个学期发现的巨大毛病,总喜欢等到DDL前夕等待着别人的答案救急,但事实上许多时候我们等不到答案,最终还是依靠自己上网去找代码、改代码。而且时间太匆促,我们连自己去学习代码、消化代码的时间都没有,很遗憾并且很羞愧,到最后只是变成了抄代码。为此,我认为作业不要拖是正确的。早做晚做都是CSDN的话,还不如早点上手,早点开始看,兴许还能有更多的收获呢。
总结中涉及到的链接的二维码 第一周作业:
第二、三周作业:
第四周作业:
第五周作业:
第六周作业:
第七周作业:
第八周作业:
第九周作业:
第十周作业:
实验一:
实验二:
实验三:
实验四:
实验五:
实验六:
实验七:
实验八:
实验九:
团队第一周:
团队第二周:
推荐阅读
本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ...
[详细]
蜡笔小新 2023-12-14 20:58:32
本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ...
[详细]
蜡笔小新 2023-12-14 18:18:21
在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ...
[详细]
蜡笔小新 2023-12-14 17:34:00
篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-12-14 09:50:34
1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作 ...
[详细]
蜡笔小新 2023-12-09 10:10:40
本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ...
[详细]
蜡笔小新 2023-12-14 17:46:55
本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ...
[详细]
蜡笔小新 2023-12-14 14:53:02
本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ...
[详细]
蜡笔小新 2023-12-14 14:15:30
本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ...
[详细]
蜡笔小新 2023-12-12 13:54:31
本文介绍了一道网络流题目hdu4888 Redraw Beautiful Drawings的解题思路。题目要求以行和列作为结点建图,并通过最大流算法判断是否有解以及是否唯一。文章详细介绍了建图和算法的过程,并强调在dfs过程中要进行回溯。 ...
[详细]
蜡笔小新 2023-12-12 11:54:35
本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ...
[详细]
蜡笔小新 2023-12-11 10:37:34
本文讲述了CodeForces1016C题目的解法。文章首先介绍了一种错误的理解,然后给出了正确的解法。其中,当位于一个角上时,有两种选择,一种是先一直走一行再返回来走,另一种是走到这一列的另一行上然后再往右走一列。作者给出了两种解法,一种是直接计算,一种是动态规划。最后,取两种解法的最优解作为答案。文章附上了源代码。 ...
[详细]
蜡笔小新 2023-12-10 20:45:35
本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ...
[详细]
蜡笔小新 2023-12-10 15:17:25
本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ...
[详细]
蜡笔小新 2023-12-10 11:23:10
本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ...
[详细]
蜡笔小新 2023-12-09 10:31:54