1 C++的特点是什么?
封装,继承,多态。支持面向对象和面向过程的开发。
2 C C++ java 区别?
c是纯过程,c++是对象加过程,java是纯面向对象的
3 什么是多态?
概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性
4 稳定的排序有哪些?
直接插入排序:每次选择待排序序列中的一个记录,暗器关键字大小插入待排序序列的合适位置,直到所有待排序序列插入完毕。
冒泡排序:重复访问待排序序列,以此比较相邻两个元素大小,按照规定的顺序交换位置。
归并排序(最稳定):先使子序列有序,再将有序的子序列合并。
5其他排序?
插入 ① 直接插入排序
②希尔排序:将排序序列分为不同的组,分别进行组内排序,在对所有元素进行此一插 入排序。
选择 ①简单优先选择排序:从待排序序列中选择最大/最小元素,将其放在待排序序列的起始 位置,再从带排序序列中继续选择最大/最小元素放在待排序序列的末尾,重复最后一个 步骤知道完成。
②堆排序:将所有数据建堆,最大最小元素至于堆顶,再将堆顶元素与末尾元素交换, 再次重新建堆,交换元素,直到排序完成。
交换 ①冒泡排序
②快速排序,通过一趟排序将待排序序列分为两组,其中一组的元素均小于另一组,则 可分别进行排序达到整体有序。
6 面向对象和面向过程编程的认识?
面向过程就是分析解决出解决问题的关键步骤,然后用函数把这些步骤一步一步地实现,使用的时候一个一个依次调用。
面向对象就是把构成问题的事务分解成一个一个对象,建立对象的目的不是为了完成某个步骤,而是分析某个事物在整个结局的提过程中的行为。
7 图的遍历
广度:首先访问起始顶点a,接着访问其各个为访问过的相邻顶点b1 b2 b3...,然后再以此访问相邻顶点的一些为访问过的顶点。
深度:首先访问起始顶点a,然后访问其相邻的为访问的顶点b1,然后再依次访问b1的相邻顶点,重复这个过程,当不能继续向下访问时,一次退回到最近被访问的顶点,访问器未被访问的顶点,重复上述过程。
8最小生成树
prim算法:起初时从图中任取一个顶点加入树T,之后选择一个与当前T中顶点集合距离最近的顶点,并将该顶点与边加入T。
Kruskal:起初时将所有顶点加入图T,然后按照权值由小到大的顺序,不断地选取当前未被选取过的权值最小的边,如该边依附的顶点落在T中不同的连通分量上,这将该边加入T,否则舍弃,以此类推,直到的所有顶点被选取。
9 最短路径
定义:带权图(AOV)中,从一个顶点到另一个顶点的所经过边的权值之和称为带权路径长度,带权路径长度最短的那条路径称为最短路径。
迪杰斯特拉算法(单源最短路径)(用于计算一个节点到其他节点的最短路径)
迪杰斯特拉是求带权图的单源最短路径问题,开始的时把图中顶点分为两组,一组为已经求出的最短路径的顶点集合S,一组为未确定最短路径的顶点的集合U,然后按照最短路径递增的次序以此把第二组中的顶点加入S。再加入的过程中,总保持原点到S中个顶点的最短路径长度不大于从源点到U中任何顶点的最短路径长度。
弗洛伊德算法(求各顶点之间最短路径)
弗洛伊德算法的基本思想:过程为递推一个n阶方阵A,其中A[i][j]就表示顶点vi 到vj的路径长度,初始的时候任何两个顶点如果它们之间存在边,就设该边值为它们之间的最短路径,不存在又向边就设为 正无穷 ,然后在尝试逐步在源路径中加入各顶点多为中间顶点。如增加中间节点后,得到的路径比原来短,则更新最短路径,重复这个过程,经过n次迭代之后,所得到的A[i][j]就是vi到vj的最短路径长度。
10简述带权有向图(AOE)寻找关键路径基本思想
关键路径:从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径为关键路径
关键活动:关键路径上的活动
一个事件要想发生,必须前面的关键活动完成
补充:
AOV是带权图,涉及到知识点是最短路径,单源最短路径,各顶点之间最短路径。
AOE是带权有向图,设计知识点是关键路径,关键活动。
11 二叉树的性质
有左右子树的区分和度不超过2
二叉树第i层的节点数最多有 2*(i-1)个
深度为k的二叉树最多有2*k-1个节点
完全二叉树的高度 H =
12 特别的二叉树
①二叉排序树(左<中<右)
②线索二叉树:设置两个标识标记左右指针指向孩子还是前驱节点
③平衡二叉树:左右子树高度差绝对值小于等于1
④哈夫曼树
⑤完全二叉树:只能从右边为空
13 指针和引用的区别?
指针是一个存储地址的变量,该地址为内存的一个单元
引用是变量的一个别名。
指针可以为空,引用不可以。
14函数参数三种传递方式及特点?
值传递:实参和形参是两个不同的地址空间,不影响原来函数中的变量的值。
引用传递:形参是引用类型变量,其实是实参的一个别名,在被调用函数中,对引用变量的所有操作等价于对实参的操作。
指针传递:形参是指针类型的变量。在函数中对指针变量的操作,就是对实参(变量地址)所对应的变量的操作,原函数中的变量的值将会发生改变。
15 各种常用排序
16 顺序结构和链式结构的区别?
顺序结构是指内存连续的存储单元进行存储,而链式结构是指 内存不连续的结构,通过一个节点指向另外一个节点的地址。