20182310 第七周学习总结

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

教材学习内容总结

1.链表实现栈
data存放数据点
next下一节点
存储地址 数据域
单链表:只含一个指针域的链表 a-》
双向链表:《-a-》
地址不一定连续
要用链表实现栈,就要操作链表的两端。所以除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还需要一个整型变量count来跟踪队列中的元素数目。

2.尾插法
Student temp = Head;
while(temp.next!=null){
temp=temp.next}
temp.next=node;
return head;
用一个临时指针(不能影响头指针,头指针移动则垃圾回收)等于头指针temp=temp。next 若为null,找到了链表结尾,则指向新插入的对象

3.头插法:新对象指向首个元素,head指针赋给新对象,则新链表完成
node.next=Head;
Head =node;
return Head;
删除:1.temp.next=temp.next.next
2.两个指针,p.next=q.next
循环链表
双向链表
栈与链表
top即为head
4.渐进复杂度(时间/空间复杂度)
又称为算法的阶,符号计为O(),它和增长函数有关

5.简单选择排序算法,快速排序
6.栈:栈是一种数据结构,特点和电梯相似,元素从顶部压入栈中,先进去的元素后出来,后进去的元素先出来。栈中的元素可以写入,也可以读出。栈可用数组,链表两种形式实现。
7.后缀表达式:用代码实现计算后缀表达式的思路如下:
将表达式字符串用StringTokenizer分隔,单独提取,若提出来的是数字,则压入一个栈中,若是运算符,则从数字栈中弹出两个数字,用这个运算符进行计算,结果再次压入栈中。

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

  • 问题1:不明白泛型是什么且如何使用。

  • 问题1解决方案:所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前(在下面例子中的)。
    每一个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
    类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符。
    泛型方法体的声明和其他方法一样。注意类型参数只能代表引用型类型,不能是原始类型(像int,double,char等).

  • 问题2:关于大o复杂度的计算

  • 问题2解决方案:在这种情况下,内层循环索引被初始化为外层循环索引的当前值。外层循环运行了n次,内层循环第一次被执行n次,第二次执行n-1次,等等……但是,记住,我们只对主项感兴趣,而忽视其他常数项或其他任何次要项。如果复杂度是线性的,则不管经过多少个元素,其阶次依旧是O(n),因此,上面的代码的复杂度为O(n^2)。

  • 问题3:Queue接口两种方法add和offer在异常类处理上有何不同。

  • 问题3解决方案:add操作可以确保队列中有给定的元素。如果给定元素没有添加到队列中,该操作将抛出一个异常。
    offer操作把给定元素插入到队列中,如果插入成功,返回true,否则返回false。

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

  • 问题1:使用IDEAgit到码云上的时候,出现如下错误:

  • 问题1解决方案:git pull 强制上传后,:wq保存,然后重新git push即可。

  • 问题2:安卓运行app时出现闪退的问题

  • 问题2解决方案:出现闪退的问题有很多,可能是代码语法没有错误,但是运行出错;可能是找不到需要调用的类。后来在百度搜索到的解决方案如下:1、project->clean
    2、在MainActivity.java中
    查到setContentView中layout的位置是否正确。
    3、AndroidManifest.xml中=name中检查名字是否没写,或者更改
    4、在SecondAPP Manifest中
    删除
    添加

  • 问题3:IDEA运行程序出现如下错误:

  • 问题3解决方案:重新调试代码后发现错误来源于代码中的一个格式问题,修改后即可。

代码托管

上周考试错题总结

上周没有进行考试,所以没有错题。

结对及互评

评分标准

  • 博客中值得学习的或问题:
    • 学习:在总结问题时有附上详细的图片,而我总是忘记截图,代码中出现的问题也能及时自己发现错误来源。
    • 问题:教材学习内容总结不够详细。
  • 代码中值得学习的或问题:无
  • 基于评分标准,我给本博客打分:15分。得分情况如下:
  1. 正确使用Markdown语法(加1分):

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

  3. 教材学习中的问题和解决过程, 一个问题加1分()

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

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

  6. 其他加分:

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

点评过的同学博客和代码

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

这两周学习的内容较多,主要有安卓的一些内容和数据结构的一些内容,加上栈和队列的内容,相对应的作业也就增加了。但是还是要避免遗忘以前的知识。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 155/200 2/2 20/20 初步掌握linux命令、java小程序和jdb调试
第二 三周 470/625 2/4 20/40 学会scanner定义的使用,类的定义
第四周 1444/2069 2/4 20/60 下载安装IDEA及其插件,学会TDD调试,编写测试代码
第五周 1917/3986 2/8 20/80 简单的学会客户端和服务器的编写
第六周 1324/5310 1/9 20/100 Java封装,继承,多态
第七周 2795/8105 3/12 40/140 栈,链表
posted @ 2019-11-03 12:05  tursws  阅读(167)  评论(0编辑  收藏  举报