问题:
一、如何区分单个的字符和只有一个字符的字符串?
二、对象是如何关联到彼此的?
三、怎么让形参与实参匹配?
四、算法不太懂程序员
第八章、抽象数据类型与子程序
一、抽象数据类型(ADT):属性(数据和操做)明确地与特定实现分离的容器。{应用(或用户层)是特定问题中的数据的视图。逻辑或抽象层是数据值域和处理他们的操做的抽象视图,实现层明确表示出了存放数据项的结构,并对操做码进行操做。每种ADT都具备特定的行为,称它们为容器是由于它们存在的惟一目的就是存放其余对象}
二、容器:存放和操做其余对象的对象
三、栈与队列
(栈):是一种抽象复合结构,只能从一端访问栈中的元素,能够在第一个位置插入元素,也能够删除第一个元素。咱们取走的第一个元素正是最后放入其中的那个元素。
(栈的另外一种描述方法):删除的项老是在栈中时间最短的项目,插入操做没有任何约束,整个LIFO行为都体如今删除操做上。栈是使元素以相反的顺序输出。
(队列):队列中的项目从一端入,从另外一端出。FIFO,先进先出,与栈不一样。插入操做在尾部进行,删除操做在队列的头部进行。
(队列的另外一种说法):删除的老是在队列中时间最长的项目
四、列表:三个属性:项目是同构的,项目是线性的,列表是变长的。所谓线性则指的就是每一个项目除了第一个都有一个独特的组成部分在它以前,除了最后一个也都有一个独特的组成部分在它以后。列表可被形象化为链式结构
(栈、队列、列表的不一样):栈和队列对删除操做有所有的定义,列表一般提供插入一个项目的操做,删除一个项目的操做,检索一个项目是否存在以及报告列表中项目数量。因此列表中的项目必需要可以相互比较。列表不是数组,但他们三者本质上都是线性的,只模拟了一种数据关系
五、链式结构:一个将数据项和找到下一项位置的信息保存到同一容器的实现方法。
六、树:分层体系结构,一般说二叉树,即最多有两个子节点的树。一个节点至多只有一个指向它的节点
七、二叉树:二叉树是一种抽象结构,每一个节点能够有0、一、2个后继节点,叫作子女。树的头部是一个起始节点,叫作根,他不是任何节点的子女,存放在节点左边的叫左子女,存放在右边的叫作右子女。若是一个节点没有子女,这个节点叫作树叶,称为叶节点
除了根节点外,每一个节点只有一个父母节点,根节点仍是树中其余全部节点的先辈。
八、二叉检索树:树相似于一个无序列表,搜索的依据能够记为:任何节点的值都要大于它的左子树中全部节点的值,都要小于它的右子树中全部节点的值。因此当你想要搜索一个在树中存在的数的话,先从源头找起,先看看和根相比,这个数字是大是小,大在右边,小在左边,而后继续与左子树或者右子树进行比较,直到找到所想要的数字。若是这个数字并不存在于其中,比较方式也很相似,仍然按照上面的方法可是会得出矛盾的结论。这样就能够证实这个数字是不存在于二叉树中的。
九、二叉检索树的搜索效率:其效率与树的形状有直接关系。树的形状是由项目插入树的顺序决定的。
十、如何构造二叉检索树?
插入节点的总体流程:算法
把父节点设置为当前节点,即根节点。
若是新节点内的数据值小于当前节点内的数据值,那么把当前节点设置为当前节点的左子节点。若是新节点内的数据值大于当前节点内的数据值,那么就跳到步骤 4。编程
若是当前节点的左子节点的数值为空(null),就把新节点插入在这里而且退出循环。不然,跳到 while 循环的下一次循环操做中。数组
把当前节点设置为当前节点的右子节点。
若是当前节点的右子节点的数值为空(null),就把新节点插入在这里而且退出循环。不然,跳到 while 循环的下一次循环操做中。
十一、如何输出二叉搜索树中的数字?
按算法升序输出了二叉检索树中的项目
十二、图
图由一组节点和一组把节点相互链接起来的边构成的数据结构
顶点:图中的节点
边:表示图中两个节点的链接的顶点对
1三、图的分类:无向图:其中的边没有方向的图
有向图:其中的边是从一个顶点指向另外一个顶点(或同一个顶点)的图
加权图:有附加值的图
邻顶点:经过边链接起来的两个顶点
路径:链接图中两个顶点的一系列顶点
1四、如何建立图:(1)、在表格中添加一个顶点
(2)、在表格中添加一条边
(3)、在表格中添加一个权值
1五、图算法
深度优先搜索、广度优先搜索、单源最短路搜索
深度优先搜索:检查第一个与起点相邻的顶点,若是是他就结束,若是不是他就检查全部与第一个顶点相邻的顶点
广度优先搜索:按照前后顺序进行搜索。让对头走,把与这个走了的人相邻的压进来
单源最短路搜索:这个计算比较复杂,加到最小便可
1六、子程序:算法和子算法之间的计算
1七、参数传递
参数列表:程序中两部分之间的通讯机制
形参:列在子程序名后的括号中的标识符
实参:子程序调用中列在括号中的标识符
值参:由调用单元传入实参的副本
引用参数:由调用单元传入实参的地址的形参
第九章、面向对象设计与高级程序设计语言
一、对象:在问题背景中相关的事物或实体
二、对象类:一组具备类似的属性和行为的对象的描述
二、域:类中的特定项,能够是数据或子程序
四、方法:定义了累的一种行为的特定算法
五、设计方法
设计方法包括集体讨论:为的是生成解决某个特定问题要用到的候选类的列表。
过滤:仅用于启动模拟程序,这些共同的属性和行为能够组合在一块儿。
场景:给每一个类分配责任
封装:把数据和动做集中在一块儿,使数据和动做的逻辑属性与它们的实现细节分离
责任算法:知识和动做
责任的加入过程:建立、输出和加入。加入这个动词是让某人准备数据的指令
六、翻译过程:用汇编语言编写的程序要输入汇编器,由他把汇编语言翻译成机器码,最终执行的是汇编器输出的机器码,使用高级语言。
编译器:把用高级语言编写的程序翻译成机器码的程序
解释器:输入用高级语言编写的程序,指导计算机执行每一个语句指定的动做的程序
字节码:编译Java源代码使用的标准机器语言,标准化的高级语言实现的可移植性与把JAVA程序翻译成字节码而后在解释它的可移植性是不一样的。用高级语言编写的程序可以在任何具备适合的编译器的机器上编译和运行,程序将被翻译成计算机可以直接执行的机器码,Ada编译器就是把其语言翻译成字节码。
七、程序设计语言的范形
两种主要的范形:分别是命令和声明的
命令式范形:具备顺序执行指令的特征,变量的使用表明了内存地址,而使用赋值语句则改变这些变量的值
面向过程的范形和面向对象的范形,,面向过程的范形指的是语句被分为子程序,而后每一层执行整个问题求解的一个必要的特定任务。面向对象的范形:数据对象是活跃的,对象和操做对象的代码绑定在一块儿,使得每一个对象负责控制本身的操做
声明式范形:是一个描述结果的模型,可是完成结果的过程不被描述。有两种基本模型,分别是函数式和逻辑式
函数式模型:计算经过对函数求值来实现,而问题求解经过函数调用来实现。所以基本的原理是函数的求值,而不是变量和赋值语句
逻辑编程:逻辑编程基于象征逻辑的原则,这个模型包括了一系列关于对象的事实和一系列关于对象间关系的规则。一个程序包括了向这些对象和关系询问能够经过事实和规则推演的问题。
布尔表达式:一个标识符序列,标识符之间由相容的运算符分割,求得的值是TRUE或false.
关系运算符是比较两个值的运算符。小于,小于等于,大于大于等于,不等于,等于
强类型化:每一个变量都有一个类型,只有这种类型的值才能存储到该变量中
数据类型:一组值以及可以应用于这种类型的值得基本操做集合的说明
大多数高级语言都有四种数据类型
整数、实数、字符和布尔型
整数实数字符和布尔型称为简单数据类型或原子数据类型,由于每一个值都是独立的,不能再分割
字符串:是一个字符序列
声明:把变量、动做、或者语言中的其余实体与标识符关联起来的语句,使程序员能够经过名字引用这些项目
保留字:一种语言中具备特殊意义的字,不能用它做为标识符
区分大小写:大写字母和小写字母被看做是不一样的,两个拼写方法相同但大小不一样的标志服被看作是不一样的标识符
控制结构:肯定程序中的其余指令的执行顺序的指令。
异步:不与计算机中的其余操做同时发生,换句话说,与计算机的动做不一样步
封装:实施信息隐蔽的语言特性
对象类或类:属性和行为类似的一组对象的说明
对象:与问题背景相关的事物或实体
对象(实现阶段):类的一个实例
类(实现阶段):对象的模式
实例化:建立类的对象
实例化:建立类的对象
继承:类获取其余类的属性的机制
多态:一种语言的继承体系结构中具备两个同名方法且可以根据对象应用合适的方法的能力数据结构