20182330《程序设计与设计结构》 第七周学习总结
教材学习内容总结
周一:Android四大组件
- Activity(能看见的能活动的)
- Service(看不见的一些操作,支持进程。)
- content provider(给学号传信息)
- broadcast receiver
周三:数据结构:计算机存储、组织数据等的方式
软件开发
- 软件质量的特征:重用 效率 可靠等
没有一种解决方案可以解决所有问题 - 程序=数据结构+算法
软件=程序+软件工程 - 算法效率:用CPU的使用时间表示
算法分析是从效率角度对算法进行分类
增长函数 - 时间复杂度是O(n^2)(大o记法),那个大取哪个,忽略小的
n*o(1)=o(n).执行多少次。多层循环看平方
计算规则:加法准则,并列程序段
乘法准则,嵌套程序段
特殊准则,自己定义
周五:栈:先进后出。栈顶,栈底
- 栈操作:
入栈(压栈)push,出栈(弹栈)pop,peek(取栈顶元素),empty(栈是否为空) - 泛型(放什么类型的元素)模板,什么类型都可以
class box - 使用:Stack stack=new Stack();
stach.push(name); System.out.println(stack); - top与peek:(用数组实现栈)
top(类似指针)进一个元素0的位置,top到1(巧妙查看栈中有几个元素),top-1要删除前面的值
peek可查看栈顶 - 前缀中缀后缀表达式(根据操作符位置)
eg:1+1中缀
后缀表达式也叫逆波兰表达式
用栈实现后缀表达式:遇见一个数,把他放到栈中,在遇到一个运算符时,该运算符作用于从该栈弹出的两个数上,在将结果放入到栈中
教材学习中的问题和解决过程
-
问题1:为什么用数组实现列表时没有用环形数组,与用数组实现队列时有何区别?
-
问题1解决方案:对于非环形数组数组实现队列假定队列的首元素总是存储在数组的索引0处,由于队列处理会影响该集合的两端,因此在删除元素时,该策略要求移动元素,使得dequeue操作的复杂度为O(n),数组实现的操作选使得效率低,而把数组看做环形的,可以去除在队列的数组实现中把元素位移的需要。
-
而对于使用数组实现列表,一般的列表也可以从两端添加和删除元素,但是它们还有从列表中间插入或删除元素,因此无法避免要移动元素,也可以使用环形数组方法,但是当从列表中间插入或者删除元素,仍然需要移动元素,因而使用环形数组就显得没有必要了
-
问题2:什么是堆栈,堆和栈到底是不是一个概念
-
问题2解决方案:堆栈,其实就是栈。在计算机领域,堆栈是一个不容忽视的概念,堆栈是一种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除
-
堆是计算机科学中的一种特别的树状数据结构。若是满足以下特性,即可称为堆:“给定堆中任意节点 P 和 C,若 P 是 C 的父节点,那么 P 的值会小于等于(或大于等于) C 的值”。若父节点的值恒小于等于子节点的值,此堆称为最小堆;反之,若父节点的值恒大于等于子节点的值,此堆称为最大堆。在堆中最顶端的那一个节点,称作根节点,根节点本身没有父节点
-
堆和栈在java中的区别
在java中堆一般用来存储对象和数组,栈一般用来存储方法和基本类型(注:基本类型不包括string)变量。
栈的存取速度比堆快。栈中的数据是可以共享的(解释:比如int a = 3; int b =3; 此时b的指针直接指向3的地址即可,不用重新开辟一块空间存储3的地址) -
问题3:队列、链表和堆栈三者的区别
-
问题3解决方案:队列和堆栈是两个类似链表的线性数据结构,但在使用时有更多的限制。对于一般的链表,可以通过链表的任意位置插入和删除节点进行修改,但是队列只能在一端加入节点(入队)(入栈),在另一端一处节点(出队)(出栈),因此队列是先进先出(FIFO)数据结构,堆栈是后进先出(LIFO)数据结构。
-
问题4:对于队列,我们是在其两端进行操作的,而顺序也不是无关紧要的了,因此,用固定数组来实现栈的效率不高,因为队列的顺序很重要所以实现栈的效率不高?
-
问题4解决方案:对比之前提到固定数组实现策略是对栈高效的,并且在网上查阅资料得到,应该是“用固定数组来实现队列的效率不高”
代码调试中的问题和解决过程
-
问题1:循环列表补全的实践中,一直报错
-
问题1解决方案:仔细检查发现是原来的isEmpty方法写错了,原来是return0导致一直抛出错误,更改后的代码如下:
-
问题2:代码又双叒叕git不上去了
-
问题2解决方案:
查找并调试了半天,发现这是电脑自带程序的问题,由于电脑里的Xcode升级,导致电脑不认识从位置网站下载的盗版idea,重新连接一下就好了
代码托管
前几周忘了截图,这是截止第十周之前的代码,以后会记得按时截图,以下统计代码量按照总增量/3计算。
上周考试错题总结
上周无考试
结对及互评
点评过的同学博客和代码
- 本周结对学习情况
- 20182314
- 点评:因为数据结构种重在理解,所以知识点可以更加详细一点,通俗一点,体现出自己的理解。对于代码中的问题分析的很到位。
基于评分标准,我给本博客打分:13分。得分情况如下:
排版精美的加1分
结对学习情况真实可信的加1分
正确使用Markdown语法
模板中的要素齐全(加1分)
错题学习深入的加1分
点评认真,能指出博客和代码中的问题的加1分
教材学习中的问题和解决过程, 加5分
代码调试中的问题和解决过程,加2分
其他(感悟、思考等,可选)
进入数据结构的学习,时间紧张到连实验课的时间都被用来不停的灌输知识点,所以只是课上听懂是不够的,课下一定要回顾并且多多实践!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 42/42 | 2/2 | 20/20 | |
第三周 | 394/471 | 2/4 | 25/45 | |
第四周 | 394/471 | 2/4 | 25/45 | |
第五周 | 1668/2139 | 2/6 | 35/80 | |
第六周 | 2388/4527 | 1/7 | 30/110 | |
第七周 | 1660 /6187 | 2/9 | 25/135 |
-
计划学习时间:20小时
-
实际学习时间:25小时
-
改进情况:希望多多实践