20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结

Posted qiuxia2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结相关的知识,希望对你有一定的参考价值。

20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结

教材学习内容总结

第五章 队列

  • 队列:队列是一种线性集合,其元素从一端加入,从另一端删除,队列中的元素是按先进先出的方式处理的(FIFO)。一个队列一端为前端(front,head),
    一端为末端(rear,tail)。
    技术分享图片

  • 队列ADT所定义的操作

技术分享图片

  • Java API中的队列
    1.Java集合API提供了java.util.Stack类,它实现了栈集合。但它并没有提供队列类,而是提供了一个Queue接口,
    由多个类(包括LikedList类)来实现的。(课本例题5.1,5.3的代码都使用了Queue接口)
    2.java.util.Stack类提供了传统的push、pop和peek等操作。而Queue接口并没有实现传统的enqueue、dequeue和first操作。
    Queue接口定义了另外两种方法,往队列中添加元素或从队列中删除元素。这些方法在异常类处理上有很大的不同。
    一个是提供了一个布尔返回值,另一个是抛出一个异常。

  • 队列的应用
    • 代码密钥:凯撒加密法和重复密钥,队列是一种可存储重复编码密钥的便利集合。
    • 售票口模拟:通常用表示排队的队列来实现模拟。
  • 队列的ADT
    如同栈一样,可定义一个泛型的QueueADT接口,表示队列的操作,,是一般目标与各种实现方式分开。

  • 用链表实现队列

教材学习中的问题和解决过程

  • 问题1:
  • 问题1解决方案:

可以在集合框架(Collection framework)中看到泛型的动机。
泛型只在编译阶段有效。

- 泛型的好处:ava语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。
  • 问题2:三四章就是学习了用数组和链表两种方式实现栈的功能,那这两种方式各有什么优缺点呢?
  • 问题2解决方案:看了半天的资料,才发现其实这个问题可以说成是数组和链表的区别。

    数组,在内存上给出了连续的空间.链表,内存地址上可以是不连续的,每个链表的节点包括原来的内存和下一个节点的信息

数组:
优点:使用方便 ,查询效率 比链表高,内存为一连续的区域
缺点:大小固定,不适合动态存储,不方便动态添加
链表:
优点:可动态添加删除 大小可变
缺点:只能通过顺次指针访问,查询效率低

顺序表的优点:查找方便,适合随机查找
顺序表的缺点:插入、删除操作不方便,因为插入、删除操作会导致大量元素的移动

链接表的优点:插入、删除操作方便,不会导致元素的移动,因为元素增减,只需要调整指针。
顺序表的缺点:查找方便,不适合随机查找

代码调试中的问题和解决过程

  • 问题1:在蓝墨云班课的作业上,突然出现了冒泡排序法这种排序方式,这是啥?(?Д?)ノ
  • 问题1解决方案:
    1.冒泡排序法:它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)
    错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
    这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳
    的气泡最终会上浮到顶端一样,故名“冒泡排序”。
    2.三种算法的区别:选择排序需要两层循环来实现,外层循环控制次数,内层循环控制找到最小的值。然后将内层循
    环找到的最小值与外层循环本次索引对应元素进行交换,直至遍历完整个数组.插入排序有两层循环,外层循环逐个遍历
    数组元素,内层循环把外层循环的元素与该元素在内层循环的下一个元素进行比较,如果外层循环选择的元素小于内层循
    环选择的元素,那么数组元素都行右移动为内层循环元素留出位置。冒泡算法是最基础的一个排序算法,每次使用第一个
    值和身后相邻的值进行比较,如果是升序将大数向左边交换,降序则向右边交换。最终将大数移动到一边,
    最终排成一个序列。
    结论:冒泡算法效率最低,插入算法效率最高
  • 三种基础排序算法(选择排序、插入排序、冒泡排序)
  • 三个基本排序算法执行效率比较(冒泡排序,选择排序和插入排序)

代码托管

(statistics.sh脚本的运行结果截图)

技术分享图片

上周考试错题总结

  • 错题1及原因,理解情况
    技术分享图片

一个高效的系统可以优雅地处理问题
技术分享图片
技术分享图片

太粗心了。

  • 错题2及原因,理解情况
    技术分享图片

可以使用堆栈来保存一组数据的顺序

解析:一组地址采用连续的存储单元来依次存储线性表的各个数据元素称之为线性表的顺序存储结构,顺序存储结构就是把
一堆数据按照给定的地址连续存放。而链表是内存中随机存贮,只有数组这种静态的内存分配方式才是连续存贮的。

课后作业

pp3.9是使用android Studio没上传码云,现附上截图
技术分享图片
技术分享图片

技术分享图片

技术分享图片
技术分享图片

结对及互评

点评:

  • 博客中值得改正的问题:
    • 教材内容总结很详细,利用代码详细讲解,但是没必要将教材中的代码大量的放入博客中,可以尝试用简洁的语言表述一下。
    • 没有发现阅读教材的问题
  • 代码中值得学习的问题:
    • 代码量很大,花了很多时间自己编码。
    • 没有放代码量的截图

点评的同学博客和代码

  • 本周结对学习情况
    • 20172309

    • 结对学习内容
      • 教材三、四章关于用数组和链表来实现栈的内容的学习
      • 蓝墨云课后练习的学习
      • 课后习题的探讨
  • 上周博客互评情况

其他(感悟、思考等,可选)

这个星期又开始了敲代码之旅,数组,集合,栈这些内容其实上个学期都有学习到一些,但是经过这一个礼拜
的学习发现,这个学期的课程更加深入了(其实这是必然的),但是我也认识到上个学期的内容很多我都遗忘了,
所以有时间还是要去复习一下以前的课本了( ? ?ω?? )?

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 326/326 1/2 18/28 学习在一点点的深入

参考资料

以上是关于20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第一周

20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结

20172310 2017-2018《程序设计与数据结构》(下)第四周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第十周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第七周学习总结

20172310 2017-2018《程序设计与数据结构》(下)第七周学习总结