20172301 《程序设计与数据结构》第三周学习总结
Posted gk0625
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172301 《程序设计与数据结构》第三周学习总结相关的知识,希望对你有一定的参考价值。
20172301 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 队列
- 队列是一种线性集合,先进先出。
- 元素一般从队列末端进入,从队列前端退出。
- 在栈中,处理过程只在栈的一端进行;在队列中,处理过程在队列的两端进行。
- API中的队列
- Stack类实现了栈集合。却没有队列类。只提供了 Queue接口
- Stack类提供了基本操作。Queue接口只定义了两种方法,添加元素和删除元素。
- 使用队列:代码密钥(书上代码杂乱无章)
详见教材问题二。戳 - 用链表实现队列:
- 在enqueue操作,在链表前端添加新结点,就把新结点的next指针设置为指向链表的head变量,把head变量设置为指向新结点。复杂度为O(1)。
- 在enqueue操作,在链表末端添加新结点,就把链表末端结点的next指针设置为指向新结点,然后把链表的tail设置为指向新结点。复杂度为O(1)。
- 在dequeue操作,在链表前端,设置一个临时变量指向链表前端的元素,然后把front变量设置为第一个结点的next指针的值。复杂度为O(1)。
- 在dequeue操作,在链表末端,复杂度为O(n)
- 对于单向链表,可选择从末端入列,从前端出列。对于双向链表,无所谓从哪端入列和出列。
- 用数组实现队列:
- 将队列的某一端固定在数组的索引0处。所有元素会不间断地存放在数组中。
- 非环形数组实现的元素移位,将产生O(n)的复杂度。
用固定数组来实现队列的效率不高。
教材学习中的问题和解决过程
- 问题1:Queue接口两种方法add和offer在异常类处理上有何不同。
问题1解决方案:
根据书上所说- add操作可以确保队列中有给定的元素。如果给定元素没有添加到队列中,该操作将抛出一个异常。
- offer操作把给定元素插入到队列中,如果插入成功,返回true,否则返回false。
查询API所得,
也就是书上说的一个是提供了一个布尔返回值,另一个则是抛出一个异常。
那么add方法和offer方法有何不同?
区别:两者都是往队列尾部插入元素,不同的时候,当超出队列界限的时候,add()方法是抛出异常让你处理,而offer()方法是直接返回false。- 问题2:书上用队列实现代码密钥,代码的相关理解。
- 问题2解决过程:
- 创建一个数组,录入密钥值;
- 把密钥值分别存放到两个单独队列中。编码者使用一份密钥,解码者使用另一个密钥。
通过循环,把字母移动相对应的密钥的数位,形成新的字符。
根据其在ASCII表中的位置,相对应的移动几位,形成新的字符。- 输出加密和解密后字符串。
- 注意:密钥在此程序中循环重复使用。
encodingQueue.add(keyValue);
比如密钥是{5,12,-3,8,-9,4,10}
一次循环返回后即是{12,-3,8,-9,4,10,5}
同样,可以编码任何字符
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
代码托管
上周考试错题总结
- 上周无测试
结对及互评
其他
尽信书则不如无书。新的java教材有很多翻译不恰当和代码问题,给学习带来了很多麻烦。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 610/610 | 1/2 | 20/30 | |
第三周 | 300/500 | 1/3 | 18/48 |
补充作业
目前水平(0~9) | 课程结束后水平(0~9) | |
---|---|---|
程序理解 | 3 | 8 |
代码规范/质量 | 5 | 9 |
单元测试/代码覆盖率 | 4 | 8 |
模块实现/逐步细化 | 5 | 9 |
自主学习能力 | 6 | 8 |
协同工作 | 5 | 9 |
参考资料
以上是关于20172301 《程序设计与数据结构》第三周学习总结的主要内容,如果未能解决你的问题,请参考以下文章
20172301 2017-2018-2 《程序设计与数据结构》第4周学习总结
20172301 2017-2018-2 《程序设计与数据结构》第5周学习总结