数据结构和C++

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  顺序结构和链式结构的区别?

顺序结构是指内存连续的存储单元进行存储,而链式结构是指 内存不连续的结构,通过一个节点指向另外一个节点的地址。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值