20172301 《程序设计与数据结构》第二周学习总结

20172301 《程序设计与数据结构》第二周学习总结

教材学习内容总结

第三章

  • 集合能隐藏某些细节。
    • 线性集合和非线性集合
  • 抽象数据类型(ADT)
    集合是一种隐藏了实现细节的抽象。
  • Java集合API(Application Programming Interface)
  • 栈 (后进先出)
    例如:批改作业,进出电梯。
    本性:所有的操作都是在一端进行。 一端指的是顶端,所以栈不适用解决需要访问集合中间或底部的元素的问题。
  • 使用栈计算后缀表达式
    注意:当遇到一个操作符时,计算规则应可以检索其之前的两个操作数。第一个弹出的操作数其实是表达式的第二个操作数,而第二个弹出的操作数则是表达式的第一个操作。对于除法和减法需要特别注意。

第四章

  • 链接作为引用

    • 对象引用变量可以用来创建链式结构。
    • 对象引用变量存放的是对象的地址,表示该对象在内存中的存储位置。
    • 链表有一些对象构成,其中每个对象指向了链表中的下一对象。
    • 链表会按需动态增长,因此在本质上,它没有容量限制。
    • 链表的大小可以按需伸缩以容纳要存储的元素数量,因此链表是动态结构。所有动态创建的对象都来自于一个名为系统堆自由存储的内存区。
  • 管理链表

  • 从列表中插入和删除元素时有两种情况:一种是处理第一个结点的情况,另一种时处理其它结点的情况。通过在列表的前端引入哨兵节点哑节点,就可以去除这种涉及第一个结点的情况。哨兵结点可以作为一个假的第一个结点,并没有真正表示列表中的某个元素。当使用了哨兵结点时,所有的插入和删除操作就都属于第二种情况了。

  • 无链接的元素

  • 存储在集合中的对象不应该含有基本数据结构的任何实现细节。

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

  • 问题1:UML类图符号箭头含义。
  • 问题1解决方案:这个在上学期探究过,但是并没有记住,故还是要重新加深一遍记忆,方便后来的学习。
    • 1.类(Class):使用三层矩形框表示。 第一层显示类的名称,如果是抽象类,则就用斜体显示。 第二层是字段和属性。 第三层是类的方法。 注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。
    • 2.接口:使用两层矩形框表示,与类图的区别主要是顶端有<>显示 。 第一行是接口名称。 第二行是接口方法。
    • 3.继承类(extends) :用空心三角形+实线来表示。
    • 4.实现接口(implements) :用空心三角形+虚线来表示
    • 5.关联(Association) :用实线箭头来表示,例如:燕子与气候
    • 6.聚合(Aggregation) :用空心的菱形+实线箭头来表示 聚合:表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分,例如: 公司和员工
    • 7.组合(Composition):用实心的菱形+实线箭头来表示 组合:部分和整体的关系,并且生命周期是相同的。例如:人与手
    • 8.依赖(Dependency) :用虚线箭头来表示,例如:动物与氧气
  • 问题2:书P36 设计要点 提到

取消操作通常是使用一种名为drop - out的栈来实现的。
与一般栈不同的是drop - out栈对能存储的元素数量有限制,一旦达到限制,如果有新元素要压入,那么栈底的元素将被从栈中丢弃掉。

  • 问题2解决方案:可以重新申请一块数组空间。 拷贝一下数据,释放原来的数据,删除第一个元素,并整体向前移动。

  • 问题3:Stack类是从Vector类派生而来的。一些操作会与栈的基本假设发生冲突?

  • 问题3解决方案:

并未从API中找到结果。

  • 问题4:链表栈的push操作在链表末端而不是在链表前段添加结点。时间复杂度如何?
  • 问题4解决方案:
    • 要在链表末端压入结点,我们必须遍历链表以达到这个末元素。此时时间复杂度为O(n)
    • 添加一个总是指向链表末元素的引用,会影响链表末元素的删除。此时时间复杂度为O(1)

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

  • 问题1:头指针和头结点

  • 问题1解决方案:

    • 头指针是指指向开始结点的指针(没有头结点的情况下)。一个单链表可以由其头指针唯一确定,一般用其头指针来命名单链表。
    • 头结点是在链表的开始结点之前附加的一个结点。有了头结点之后头指针指向头结点,不论链表是否为空,头指针总是非空,而且头结点的设置使得对链表的第一个位置上的操作与在表中其它位置上的操作一致。
    • 头结点可以没有,但是头指针不能没有,不然无法访问链表的元素;
    • 头结点需要分配内存给它,而头指针不需要。
  • 问题2:AS中组件不显示问题。提示错误: failed to load AppCompat ActionBar with unkNown error

  • 问题2解决方案:

    • 在AndroidManifest.xml文件中找到全局样式文件 Theme,按住Ctrl+鼠标点进去

    • 进入到这个文件,在前面增加 “Base”

  • 问题3:AS报错
    This view is not constrained, it only has designtime positions, so it will jump to (0,0) unless you

  • 问题3解决方案:

    • 点击“魔法棒”。

代码托管

上周考试错题总结

  • If the algorithm is inefficient, a faster processor will help. B
    A .True
    B .Flase
  • 解析:如果算法效率低下,一个更快的处理器将有所帮助。肯定有所帮助啊,但是帮助的这个尺度很难把握。

结对及互评

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172304
    • 教材总结的非常细致,学习态度严谨很多,问题略简单,教材问题中“医疗”应该是“意料”吧,由此可见,答案也不是单纯的复制粘贴,有自己的思考和理解。
    • 20172328
    • 教材内容图文并茂,内容非常丰富。代码问题1的解决方案的贴图还没有,应该是忘记上传了吧。冒泡排序和插入排序是同一种排序么,我记得上学期冒泡排序有个别名。

其他

放弃不难,但坚持一定很酷。事情没有好坏对错。坚持了,努力了,成功与否都显得不再重要。舞台是否光鲜,全在于你。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 610/610 1/2 20/30

参考资料

posted @ 2018-09-18 22:19  奈何明月ઇଓ  阅读(269)  评论(2编辑  收藏  举报
页尾