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

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

教材学习内容总结

栈和队列

队尾指针是rear,队头是front,其中QueueSize为循环队列的最大长度
1.队空条件:rear == front
2.队满条件:(rear+1) %QueueSIze==front
3.计算队列长度:(rear-front+QueueSize)%QueueSize
4.入队:(rear+1)%QueueSize
5.出队:(front+1)%QueueSize

front=(front+1)%m

数据结构的栈长的是这个样子:

其实非常好理解,我们将栈可以看成一个箱子

  • 往箱子里面放东西叫做入栈
  • 往箱子里面取东西叫做出栈
  • 箱子的底部叫做栈底
  • 箱子的顶部叫做栈顶

说到栈的特性,肯定会有一句经典的言语来概括:先进后出(LIFO, Last In First Out)

  • 往箱子里边放苹果,箱子底部的苹果想要拿出来,得先把箱子顶部的苹果取走才行

数据结构的队列长的是这个样子:

其实队列非常好理解,我们将队列可以看成小朋友排队

  • 队尾的小朋友到指定的地点了-->出队
  • 有新的小朋友加入了-->入队
  • 相对于栈而言,队列的特性是:先进先出

先排队的小朋友肯定能先打到饭!

队列也分成两种:

  • 静态队列(数组实现)
  • 动态队列(链表实现)

值得注意的是:往往实现静态队列,都是做成循环队列

循环队列的好处是可以完美的利用每一处内存,防止出现假溢出的情况.

如上图当循环队列中rear指针和front指针指在一起的时候就需要再判断一下队列中现在是不是已经满了,防止数据溢出.


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

  • 问题1:队列插入数的时候遇到假溢出的情况

  • 问题1解决方案: 需要使用循环队列,防止rear指针移动的时候队列的前面没有数据.

  • 问题2:在循环队列中rear回到初始位置的时候如何判断此时队列是否已经满了

  • 问题2解决方案: 看rear和front的位置是否重合,若重合则说明队列已满.

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

  • 问题1:`public class Sort {
    public static void main(String[] args) {
    int a[]={7,9,5,10,6,8};
    Sort.select(a);
    }
    public static void select(int[] a) {

      for (int i = 0; i < a.length; i++) {           
           int tmp=a[i];
          for (int j = i+1; j < a.length; j++) //从a[i+1]开始是因为a[i]为比较数。
          {
          if(a[i]>a[j])
              {  
                  a[i] = a[j];
                  a[j]=tmp ;
                   
              }              
          }
          System.out.print(a[i]+"  ");
      }
    

    }`最后输出结果为 5 6 8 9 9 10 少输出了个7.

  • 问题1解决方案:把代码改成了`public class Sort {

    public static void main(String[] args) {
    int a[]={7,9,5,10,6,8};
    Sort.select(a);
    }
    public static void select(int[] a) {

      for (int i = 0; i < a.length; i++) {           
           int tmp;//这里变了一下。
          for (int j = i+1; j < a.length; j++) //从a[i+1]开始是因为a[i]为比较数。
          {
          if(a[i]>a[j])
              {      tmp=a[i];//这里变了一下。
                  a[i] = a[j];
                  a[j]=tmp ;
                   
              }              
          }
          System.out.print(a[i]+"  ");
      }
    

    }`输出就没有了问题:5 6 7 8 9 10

代码托管

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


上周考试错题总结

上周无考试


结对及互评

评分标准

  • 基于评分标准,我给本博客打分:14分。得分情况如下:
  1. 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分

    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)

    • 排版混乱的不加分

  2. 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分
    • 缺少“代码调试中的问题和解决过程”的不加分
    • 代码托管不能打开的不加分
    • 缺少“结对及互评”的不能打开的不加分
    • 缺少“上周考试错题总结”的不能加分
    • 缺少“进度条”的不能加分
    • 缺少“参考资料”的不能加分
  3. 教材学习中的问题和解决过程, 一个问题加1分

  4. 代码调试中的问题和解决过程, 一个问题加1分

  5. 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分
  6. 其他加分:

    • 感想,体会不假大空的加1分
    • 排版精美的加一分
    • 进度条中记录学习时间与改进情况的加1分
    • 有动手写新代码的加1分
    • 课后选择题有验证的加1分
    • 代码Commit Message规范的加1分
    • 错题学习深入的加1分
    • 点评认真,能指出博客和代码中的问题的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182318
    • 20182333
    • 结对学习内容
      • 如何在IDEA上将代码git到码云
      • 如何使用TDD测试代码
      • 对书上教材的讨论学习
  • 上周博客互评情况

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

经过本周的学习,我对曾经学过的知识有了更深一步的了解同时对数据查找和排序等方法的应用也更加熟悉,同时也弄懂了一些过去不是很懂的知识点可谓是受益匪浅。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 126/126 2/2 20/20
第二周 0/126 2/2 20/40
第三周 353/479 2/6 20/60
第四周 1760/2239 2/8 30/90
第五周 1366/3615 2/10 20/110
     |

| 第六周 | 534/4149 | 2/12 | 20/130 |
| 第七周 | 2800/6949 | 2/12 | 20/150 | |

参考资料

posted @ 2019-11-03 16:14  20182317彭衍泰  阅读(149)  评论(0编辑  收藏  举报