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

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

(按顺序)每周作业链接汇总

预备作业:

  • 安装虚拟机过程中遇到的问题及解决过程和Linux基础入门学习记录

    第一周作业:

  • 配置linux虚拟机、环境、学习git和单步调试

    第二周作业:

  • 输入两个数,计算两个数的加、减、乘、除运算结果,并输出。

    第三周作业:

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

    第四周作业:

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

    第五周作业:

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

    第六周作业:

  • 参考云班课资源中的FileTest文件
    学习字节流和字符流,要求能够实现创建文件,采用四种方法写入和读取文件(每种方法都要上传结果截图)
    采用一种方法将任意两个复数写入文件,再将这两个复数读取出来
    读取后做加运算,将得到的结果再写入文件
    将代码git至码云,附上截图和码云链接(链接必须必须要精确到具体文件或文件夹!!!!)

    第七周作业

  • 完成课本中ArrayStack类的实现,特别是完成peek、isEmpty、size和toString方法的实现,并完成四个方法的测试。
  • 从命令行输出一个后缀表达式:
    7 4 -3 * 1 5 + / *
    利用栈计算该表达式的值。

    第八周作业:

  • 链表练习,要求实现下列功能:
    (1)通过键盘输入一些整数,建立一个链表;
    (2)实现节点插入、删除、输出操作;
    (3)使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
  • 给出size、isEmpty和toString等方法的定义,以完成LinkedStack类的实现。
    要求:1.能够运行
    2.需要测试各个方法
    3.把代码上传到码云,并将关键代码和运行结果截图加水印(学号)上传。

    第九周作业:

  • PP15.2完成CircularArrayQueue类的实现,包括所有的方法。
    注意:要求通过入队和出队操作,出现队空和队满的情况。
  • 学习ArrayList和LinkedList类,并在Android平台上实现添加、删除、修改等操作(数据可以自己定义)(3分),并实现倒置(3分)。
    倒置的意思就是:1 2 3 4 5 变为 5 4 3 2 1
  • 给定关键字序列19 14 23 1 68 20 84 27 55 11 10 79,试分别用顺序查找、折半查找、二叉排序树查找、散列查找(用线性探查法和链地址法)来实现查找。试画出它们的对应存储形式(顺序查找的顺序表,二分查找的判定树,二叉排序树查找的二叉排序树,两种散列查找的散列表),并求出每一种查找的成功平均查找长度。其中,散列函数H(k)=k%11。
  • 给Searching类添加二分查找算法的递归实现方法。创建驱动程序来演示这个实现机制。
    (1)编程实现递归
    (2)创建一个测试类,测试递归实现的二分查找是否正确。

    第十周作业:

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

    扫描二维码关注公众号,回复: 8368889 查看本文章

    第十一周作业:

  • 建立一颗二叉排序树,样例如附件所示。完成:
    (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分)。

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

    我认为是哈夫曼测试,因为这个实验自己有充分的准备,这个实验做完后自己收获很大,也很开心,博客当时也是很早就完成了。

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

    预备作业的那篇博客阅读量最高,可能大家当时都是对新课程的好奇。

(按顺序)实验报告链接汇总

实验一 实验名称: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行,经过一个学期的努力,我的代码量达到目标,并突破10000行。

  • 加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
    所有的代码不可能靠一个人完完全全的来完成,但是在借用代码的时候理解好代码的含义,就是收获。
  • 积极主动敲代码做到没?教材实践上有什么经验教训?
    会主动完成作业,并不能称作为积极主动敲代码,很多的代码本源就来自书上的代码,从百度上搜索好久的代码一翻书,代码就在书上。

课堂项目实践

  • 课堂实践链接(没有的可以不列)
    • 课堂实践-Scanner&JDB练习
    • 类的编写实践
    • Random和NumberFormat测试
    • Interface实践
    • 复数/有理数计算器(接口)
    • 文件读写
    • 期中测试
    • 时间复杂度分析
    • ArrayStack类的实现和测试
    • 后缀表达式求值
    • 出门条-栈-数组实现栈
    • 链栈补全(LinkedStack补全)size\isEmpty\toString\Push
    • 链表插入
    • 链表实践
    • CircularArrayQueue方法补全
    • 线性表实践(ArrayList、LinkedList)
    • 查找及ASL作业(编程+计算)
    • 二分查找(折半查找)实践
    • 快速排序测试(必须有中间过程)
    • 选择排序最坏情况
    • 树-计算题
    • 中序和先序计算二叉树结构
    • 二叉树的建立和层序遍历法实践
    • 递归前中后序和非递归前中序遍历实践
    • 堆排序过程测试
    • 二叉排序树实践
    • 哈夫曼编码实践
    • 哈夫曼编码测试
    • 图实践
    • 十字链表练习
    • 图的DFS和BFS测试
    • 考试安排冲突问题(画图)
    • 最小生成树测试
    • Dijkstra(迪杰斯特拉)算法测试
    • AOE/AOV练习
    • 拓扑排序实践测试

课程收获与不足

  • 自己的收获(投入,效率,效果等)
    自己投入的时间还是很多的,毕竟这个学科的任务量大,讲课快,好多知识点要自学;
    效率我认为自己并不高,因为很多时候自己的学习没有方法,导致很多时间白白的浪费了。
    效果来说可能没有自己最开始预期的那种感觉,但是有所收获。
  • 自己需要改进的地方
    我认为自己需要改进学习效率,毕竟这么课任务量大,花了很多时间,但是结果没有达到自己的要求。
  • 结对学习是不是真正贯彻了?写一下你提供的帮助或接受了什么帮助,并对老师提供参考建议
    这门课虽然结课了,但是我并没有真正的贯彻,只是简简单单的懂懂皮毛,也接受了来自同学,学长学姐们和老师的各种各样的帮助。
    建议老师呢可以拆开这两门课,信息量实在太大了,我这1KB的大脑接收不了1G的APP啊!!!
  • 问卷调查
    • 你平均每周投入到本课程有效学习时间有多少?
      一般来说,应该可以维持20个小时左右。
    • 每周的学习效率有提高吗?你是怎么衡量的?
      emmmm这个嘛,学习效率时好时坏,也要和整体课业的任务与压力有关,列如有的科目要考试了,精力就会放到那边,学习的效率就会下降;有的时候心血来潮,学习效率就会提高。
    • 蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
      还是有帮助的,毕竟自己还可以找到提交的作业,日后可以看。对于蓝墨云班课的看法我比较佛系,没啥建议.....
    • 你觉得这门课老师应该继续做哪一件事情?
      多带着大家在实验课一起敲一些代码,可以更好的理解。
    • 你觉得这门课老师应该停止做哪一件事情?
      少布置一点作业吧,我们压力也很大,救救孩子吧!

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

  • 第一周

  • 第二周

  • 第三周

  • 第四周

  • 第五周

  • 第六周

  • 第七周

  • 第八周

  • 第九周

  • 第十周

猜你喜欢

转载自www.cnblogs.com/yanhan1/p/12110894.html