20172324 2018-2019-1 《程序设计与数据结构》第二周学习总结
20172324 2018-2019-1 《程序设计与数据结构》第二周学习总结
教材学习内容总结
第三章:集合概述——栈
集合
- 概念
- 集合是一种聚集、组织了其他对象的对象。集合的使用者(软件系统中的另一个类或对象)只能通过这些预定的方式和该集合进行交互
- 集合可以分为两大类:线性集合和非线性集合
- 抽象数据类型
- 抽象数据类型是一种在程序设计语言中尚未定义其值和操作的数据类型。ADT必须对实现细节进行定义,且这些定义对用户是不可见的。
- 数据结构是一种用于实现集合的编程结构集。集合本身与实现集合的数据结构是分离的,可以用线性数据结构来实现非线性集合。
- Java集合API
栈集合,利用栈计算后缀表达式
LIFO原则
主要的面向对象概念
- 继承与多态性、泛型(例如栈ADT)
- AraayStack类(学习pop、push、peek和其他操作)
第四章:链式结构——栈
(我没上这一节课,所以看得我还是挺懵的,感觉)
链式结构
- 指针:引用变量
- 结点:储存的对象
- 访问元素不能直接将指针移到要访问的元素处,这样会丢失之前所有的元素
- 插入结点前要先重新设置指向整个列表的引用
- 删除结点要特别注意首结点的删除方法
无链接的元素和双向列表
LinkStack
链表会按需求动态增长,因此在本质上,没有容量限制。
教材学习中的问题和解决过程
-
问题1:泛型和多态的关系(这都是些啥鸭??
-
问题1解决方案:没有关系。具体的参考这个讲得蛮复杂的封装,继承,多态,重载,重写和泛型详解(附图) ,但是简单来说就是泛型就是类型参数化,通过使用接口返回类型,方法就不会局限于实现栈的任何特定类。多态就是多个类由继承(实现接口)得到的一致外观, 好处是简化代码, 隔绝修改。
-
问题2:p52"通过在列表前端引入哨兵结点和哑结点,就可以除去这种涉及第一个结点的情况"哨兵结点和哑结点分表是什么意思?
-
问题2解决方案:看错了😀我以为两者之间是“和”,结果是“或”。哨兵结点是个哑元结点,可以简化边界条件,使代码更紧凑,并不存储任何实质的数据。
代码调试中的问题和解决过程
-
问题一:pp3_2理解题意及思考过程。
-
问题一解决方案:按照题目所说的是反向显示每个词的字符,而不是反向显示句子里所有的字符。那么这个时候就要先考虑如何将每一个单词分隔。在查询的过程中就看到了这个java中StringTokenizer使用,如果说substring方法可以分解字符串,返回的是原字符串的一个子字符串,那么StringTokenizer可以帮你将一个字符串分解为一个一个的单词或者标记。
StringTokenizer两个常用的方法:
- hasMoreTokens()。这个方法和hasMoreElements()方法的用法是一样的,只是StringTokenizer为了实现Enumeration接口而实现的方法,从StringTokenizer的声明可以看到:class StringTokenizer implements Enumeration