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

    20192329 2020-2021-1 《数据结构与面向对象程序设计》课程总结

    课程总结

    第一章 绪论

    Java是面向对象程序设计语言
    类是对象的蓝图
    三大特性:封装 继承 多态
    重要术语:对象 属性 方法
    注释、标识符:class、public、static、void、main、String、args、System
    Java是高级语言

    第二章 数据和表达式

    字符串的使用、字符串的连接及转义字符
    变量的说明和使用
    介绍Scanner类

    基本数据类型
    Java一共有8种基本数据类型:boolean、byte、short、int、long、float、double、char
    这8种基本数据类型可以分为
    逻辑类型:boolean
    常量:true、false
    整数类型:byte、short、int、long
    表达式
    表达式由运算符及操作数组成,用来执行一个计算。
    数据转换
    Java中数据的基本类型(不包括逻辑类型)按精度从低到高:
    byte short char int long float double
    当把精度低的赋值给精度高的(从左到右)变量时,系统自动完成转换:例如:float x = 100;
    当把精度高的赋值给精度低的(从右到左)变量时,必须显示加强制类型转换,例如: int x=(int)3.14;
    把一个int类型的常量赋值给一个byte或者一个short类型变量时,如果超出byte或者short的范围必须加强制类型转换,例如
    byte a = (byte)128;
    读输入数据
    输入数据
    可以使用Scanner类创建一个对象:
    Scanner reader = new Scanner(System.in);
    输出数据
    System.out.println()和System.out.print()都可输出数据,区别是前者换行、后者不换行。

    第三章 使用类和对象

    创建对象
    String类

    Random类
    Math类

    第四章 条件和循环

    if与if-else语句
    字符比较:Unicode顺序
    浮点数的比较:计算两个差值的绝对值,在与公差进行比较。
    字符比较:Unicode顺序,大小写字母,数字要联系ASCII表中的编码。
    对角比较:equals。
    switch语句:switch(){case :break;default:}
    迭代器:迭代器是一个对象,可以使用它的一些方法每次处理集合中的一个元素。也就是说,迭代器可以按需一项项地处理每一个元素
    while语句 break跳出循环。
    do-while 语句:do{}while();
    for 语句:for( ; ; ),与while等价

    第五章 编写类

    讨论类定义的结构和内容
    探讨方法定义的结构,包括参数和返回值
    讨论类之间的关系

    第六章 图形用户界面

    GUI 组件 布局

    第七章 数组

    数组索引从0开始。
    数组是对象,要用new实例化,new指定大小,之后数组大小不能改变

    第八章 继承

    讨论类继承的设计机制,说明抽象类的目的及使用方法,讨论与继承有关的可见性问题
    extends继承,代码复用,Java只支持单继承
    super与this常用于调用构造方法
    方法重载与重写:重载:根据参数类型与数量确定初始化方法 重写:重新编写父类方法
    Object类是所有类的父类
    abstract抽象类达抽象概念,不能用new实例化
    抽象类的子类:实现父类的抽象方法变成具体类,不实现父类抽象方法仍要用abstract修饰

    第九章 多态

    定义多态
    讨论动态绑定的概念
    使用继承来创建多态引用
    探讨Java接口的用途和语法
    使用接口创建多态引用
    在多态背景下讨论面向对象设计

    第十章 异常

    探讨异常
    检查异常消息并调用堆栈跟踪
    检查处理异常的try-catch语句
    探讨异常传播的概念
    描述Java标准类库中异常类的层次结构
    探讨I/O异常和文本文件的编写

    第十一章 递归

    递归思想
    递归程序设计
    使用递归

    第十二章 算法分析

    计算机系统中最重要的资源之一是CPU时间,完成具体任务的算法效率是决定程序执行速度的一个主要因素

    第十三章 树

    介绍使用引用创建链式结构
    链式结构与基于数组结构的比较
    探讨管理链表的技术
    讨论是否需要单独节点对象形成链式结构使用链表实现栈集合

    第十四章 栈

    栈:先进后出
    栈常见方法
    push():将元素添加到栈顶
    pop():删除栈顶元素
    peek():查看栈顶元素
    isEmpty():判断栈是否为空
    size():判断栈中元素的个数
    使用栈计算后缀表达式:从左到右扫描表达式,操作数入栈,遇到操作符则pop两个数计算后再push。
    链表:与有固定大小的数组不一样,链表没有容量上限。

    第十五章 队列

    讨论队列的处理
    探讨队列的不同实现方式

    第十六章 树

    根节点:唯一
    节点的度:节点拥有的子树数。度为0:称为终端节点或叶节点
    树的度:树内各节点的度的最大值
    内部节点:除根节点外的节点
    孩子(child):节点的子树的根 称为该节点的孩子,反过来,称为双亲(parent)
    兄弟(sibling):同一双亲的孩子之间的关系
    节点的祖先:从根到该节点所经分支上的全部节点
    节点层次:根为第一层,根的孩子为第二层
    树的深度(Depth):树中节点的最大层次

    第十七章 二叉查找树

    二叉查找树: 查找、插入、 删除
    二叉查找树的实现
    平衡二叉查找树

    第十八章 堆和优先队列

    堆:完全二叉树(根节点小于左右孩子)
    堆的实现
    堆排序
    优先队列:具有更高优先级的项排在前面,具有相同优先级的项按先进先出的规则排列。

    第十九章 图

    无向图:图中表示边的顶点对是无序的图是无向图,意味着两点间的连接是双向的。
    有向图:图中的边是顶点的有序对的图为有向图,意味着有向图的边是有方向的边。
    带权图:图中每条边都对应一个权值的图成为带权图,有时也称为网络。
    图遍历:广度优先遍历、 深度优先遍历
    无向图的最小生成树(Prim算法或Kruscal算法)
    有向图的拓扑排序
    有向图的最短路径求解(迪杰斯特拉算法)
    图的实现策略:邻接表邻接矩阵

    二,总结做过的作业

    任务1安装虚拟机

    实践一,虚拟机编写简单程序

    编写简单的类

    作业4:类继承作业

    作业5:复数计算器

    作业6:栈实践

    作业7:二分查找(折半查找)实践

    作业8:二叉树的建立和层序遍历法实践

    作业9:哈夫曼编码实践

    作业10:查找及ASL作业(计算)

    作业17:地图染色问题

    Dijkstra(迪杰斯特拉)算法测试

    拓扑

    三、实验报告链接汇总

    实验一 :Linux基本操作与简单JAVA程序编写
    (1)基于命令行和IDE(Intellj IDEA 简易教程](http://www.cnblogs.com/rocedu/p/4421202.html)进行简单的Java程序编辑、编译、运行和调试。
    (2)练习Linux基本命令;
    (3)学习Java程序的JDB调试技能:https://www.cnblogs.com/rocedu/p/6371262.html
    (4)编写简单的Java程序。

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

    实验三 :IDEA的使用
    下载安装并使用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)编写有理数/复数计算器
    (4)远程有理数计算器
    (5)远程复数计算器

    实验五:Android Stduio的相关测试
    (1)学习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.链表练习,要求实现下列功能:
    通过键盘输入一些整数,建立一个链表;
    这些数是你学号中依次取出的两位数。 再加上今天的时间。
    例如你的学号是 20172301 ;今天时间是 2018/10/1, 16:23:49秒
    数字就是20, 17,23,1, 20, 18,10,1,16,23,49
    打印所有链表元素, 并输出元素的总数。
    在你的程序中,请用一个特殊变量名来纪录元素的总数,变量名就是你的名字。 例如你叫 张三, 那么这个变量名就是int nZhangSan = 0; //初始化为 0.
    做完这一步,把你的程序签入源代码控制(git push)。

    2.链表练习,要求实现下列功能:
    实现节点插入、删除、输出操作;
    继续你上一个程序, 扩展它的功能,每做完一个新功能,或者写了超过10行新代码,就签入代码,提交到源代码服务器;
    从磁盘读取一个文件, 这个文件有两个数字。
    从文件中读入数字1, 插入到链表第 5 位,并打印所有数字,和元素的总数。 保留这个链表,继续下面的操作。
    从文件中读入数字2, 插入到链表第 0 位,并打印所有数字,和元素的总数。 保留这个链表,并继续下面的操作。
    从链表中删除刚才的数字1. 并打印所有数字和元素的总数。

    3.链表练习,要求实现下列功能:
    使用冒泡排序法或者选择排序法根据数值大小对链表进行排序;
    如果你学号是单数, 选择冒泡排序, 否则选择选择排序。
    在排序的每一个轮次中, 打印元素的总数,和目前链表的所有元素。
    在(2)得到的程序中继续扩展, 用同一个程序文件,写不同的函数来实现这个功能。 仍然用 nZhangSan (你的名字)来表示元素的总数。
    4.在android上实现实验(1)和(2)
    5.在android平台上实现实验(3)

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

    实验八
    (一)参考教材PP16.1,完成链树LinkedBinaryTree的实现(getRight,contains,toString,preorder,postorder)
    1、用JUnit或自己编写驱动类对自己实现的LinkedBinaryTree进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (二)基于LinkedBinaryTree,实现基于(中序,先序)序列构造唯一一棵二㕚树的功能,比如给出中序HDIBEMJNAFCKGL和后序ABDHIEJMNCFGKL,构造出附图中的树
    1、用JUnit或自己编写驱动类对自己实现的功能进行测试,提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (三)自己设计并实现一颗决策树
    1、提交测试代码运行截图,要全屏,包含自己的学号信息
    2、课下把代码推送到代码托管平台
    (四)输入中缀表达式,使用树将中缀表达式转换为后缀表达式,并输出后缀表达式和计算结果(如果没有用树,正常评分。如果用到了树,即使有小的问题,也酌情给满分)
    1、提交测试代码运行截图,要全屏,包含自己的学号信息

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


    给出statistic.sh的运行结果,说明本学期的代码量目标达到没有?
    还需要一些代码
    代码托管链接:https://gitee.com/li-yuanhe
    加点代码,改点代码是理解的最好方式,参考编程的智慧,谈谈你的心得
    在已有代码的上并且可以很好的理解此代码的基础上,加点代码,改点代码比较容易。
    先把眼前的问题解决解决好,再考虑将来的扩展问题。

    积极主动敲代码做到没?教材实践上有什么经验教训?
    做到一半,基本上都是为了完成任务而去写代码,前期把教材上的代码敲了一半,且多练习方能学好学精。
    课程收获与不足

    4.问卷调查

    你平均每周投入到本课程有效学习时间有多少?
    两到三天
    每周的学习效率有提高吗?你是怎么衡量的?
    有提高,在精力最充沛时刻打开idea
    蓝墨云班课的使用对你的学习有促进吗?有什么建议和意见吗?
    有促进,抢答环节请加大力度
    你觉得这门课老师应该继续做哪一件事情?
    抢答环节,既可回顾知识点,又可提高积极性,充满了趣味性QWQ。
    你觉得这门课老师应该停止做哪一件事情?
    代码截图加水印,他太麻烦了wwww
    其他任意发挥

    王志强老师永远最帅!!!

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number (考虑负数的情况)
    8. String to Integer (整数的溢出)
    7. Reverse Integer (整数的溢出)
    LeetCode Minimum Size Subarray Sum
    LeetCode Course Schedule II
    Linux 文件缓存 (一)
    LeetCode Tries Prefix Tree
    Linux : lsof 命令
    LeetCode Binary Tree Right Side View
  • 原文地址:https://www.cnblogs.com/qwerasdfzxcxc/p/14219645.html
Copyright © 2011-2022 走看看