2022年数据结构与算法面试总结

上传人:痛*** 文档编号:119321606 上传时间:2022-07-14 格式:PDF 页数:12 大小:118.03KB
收藏 版权申诉 举报 下载
2022年数据结构与算法面试总结_第1页
第1页 / 共12页
2022年数据结构与算法面试总结_第2页
第2页 / 共12页
2022年数据结构与算法面试总结_第3页
第3页 / 共12页
资源描述:

《2022年数据结构与算法面试总结》由会员分享,可在线阅读,更多相关《2022年数据结构与算法面试总结(12页珍藏版)》请在装配图网上搜索。

1、一.算法的基本概念计算机解题的过程实际上是在实施某种算法,这种算法称为计算机算法。1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。2.算法的基本要素:算法中对数据的运算和操作、算法的控制结构。3.算法设计的基本方法:列举法、归纳法、递推、递归、减半递推技术、回溯法。4.算法设计的要求:正确性、可读性、健壮性、效率与低存储量需求二.算法的复杂度1.算法的时间复杂度:指执行算法所需要的计算工作量2.算法的空间复杂度:执行这个算法所需要的内存空间三.数据结构的定义1.数据的逻辑结构:反映数据元素之间的关系的数据元素集合的表示。数据的逻辑结构包括集合、线形结构、树形结构和图形结构四种。2.

2、数据的存储结构:数据的逻辑结构在计算机存储空间种的存放形式称为数据的存储结构。常用的存储结构有顺序、链接、索引等存储结构。四.数据结构的图形表示:在数据结构中,没有前件的结点称为根结点;没有后件的结点成为终端结点。插入和删除是对数据结构的两种基本运算。还有查找、分类、合并、分解、复制和修改等。五.线性结构和非线性结构根据数据结构中各数据元素之间前后件关系的复杂程度,一般将数据结构分为两大类型:线性结构和非线性结构。线性结构:非空数据结构满足:有且只有一个根结点;每个结点最多有一个前件,最多只有一个后件。非线性结构:如果一个数据结构不是线性结构,称之为非线性结构。常见的线性结构:线性表、栈、队列

3、六.线性表的定义线 性表是 n 个元素构成的有限序列(A1,A2,A3)。表中的每一个数据元素,除了第一个以外,有且只有一个前件。除了最后一个以外有且只有一个后件。即线性表是一个空表,或可以表示为(a1,a2,an),其中 ai(I=1,2,n)是属于数据对象的元素,通常也称其为线性表中的一个结点。非空线性表有如下一些特征:(1)有且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表中结点的个数n 称为线性表的长度。当n=0 时称为空表。七.线性表的顺序存储结构线性表的顺序表指的是用一组地

4、址连续的存储单元依次存储线性表的数据元素。线性表的顺序存储结构具备如下两个基本特征:1.线性表中的所有元素所占的存储空间是连续的;2.线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -即线性表逻辑上相邻、物理也相邻,则已知第一个元素首地址和每个元素所占字节数,则可求出任一个元素首地址。假设线性表的每个元素需占用K 个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表中第i+1 个数据元素的存储位置LOC(ai+1)和第 i 个数据元素的存储位置LOC(ai)之间满足下列关系:LOC(ai+1)=

5、LOC(ai)+K LOC(ai)=LOC(a1)+(i-1)*K 其中,LOC(a1)是线性表的第一个数据元素a1 的存储位置,通常称做线性表的起始位置或基地址。因为在顺序存储结构中,每个数据元素地址可以通过公式计算得到,所以线性表的顺序存储结构是随机存取的存储结构。在线性表的顺序存储结构下,可以对线性表做以下运算:插入、删除、查找、排序、分解、合并、复制、逆转八.顺序表的插入运算线性表的插入运算是指在表的第I 个位置上,插入一个新结点x,使长度为n 的线性表(a1,a2 ai an)变成长度为n+1的线性表(a1,a2 x,ai an).该算法的时间主要花费在循环的结点后移语句上,执行次数

6、是n-I+1。当 I=n+1,最好情况,时间复杂度o(1)当 I=1,最坏情况,时间复杂度o(n)算法的平均时间复杂度为o(n)九.顺序表的删除运算线性表的删除运算是指在表的第I 个位置上,删除一个新结点x,使长度为n 的线性表(a1,a2 ai an)变成长度为n-1 的线性表(a1,a2 ai-1,ai+1 an).当 I=n,时间复杂度o(1),当 I=1,时间复杂度o(n),平均时间复杂度为o(n)十.栈及其基本运算1.什么是栈?栈实际上也是一个线性表,只不过是一种特殊的线性表。栈是只能在表的一端进行插入和删除运算的线性表,通常称插入、删除这一端为栈顶(TOP),另一端为栈底(BOTT

7、OM)。当表中没有元素时称为空栈。栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。假设栈S=(a1,a2,a3,an),则a1 称为栈底元素,an称为栈顶元素。栈中元素按a1,a2,a3an的次序进栈,退栈的第一个元素应该是栈顶元素。即后进先出。2.栈的顺序存储及其运算用 S(1:M)作为栈的顺序存储空间。M 为栈的最大容量。栈的基本运算有三种:入栈、退栈与读栈顶元素。入栈运算:在栈顶位置插入一个新元素。首先将栈顶指针进一(TOP+1),然后将新元素插入到栈顶指针指向的位置。退栈运算:指取出栈顶元素并赋给一个指定的变量。首先将栈

8、顶元素赋给一个指定的变量,然后将栈顶指针退一(TOP-1)读栈顶元素:将栈顶元素赋给一个指定的变量。栈顶指针不会改变。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -十一.队列及其基本运算1.什么是队列队列是只允许在一端删除,在另一端插入的顺序表,允许删除的一端叫做对头,允许插入的一端叫做对尾。队列的修改是先进先出。往队尾插入一个元素成为入队运算。从对头删除一个元素称为退队运算。2.循环队列及其运算在 实际应用中,队列的顺序存储结构一般采用循环队列的形式。所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。在循环队列中,用队尾指针rea

9、r 指向队列中的队尾元素,用排头指针front指向排头元素的前一个位置,因此,从排头指针front指向的后一个位置直到队尾指针rear 指向的位置之间所有的元素均为队列中的元素。在实际使用循环队列时,为了能区分队满还是队列空,通常需要增加一个标志S:队列空,则S=0,rear=front=m 队列满,则S=1,rear=front=m 循环队列主要有两种基本运算:入队运算和退队运算n 入队运算指在循环队列的队尾加入一个新元素,首先rear=rear+1,当 rear=m+1时,置 rear=1,然后将新元素插入到队尾指针指向的位置。当S=1,rear=front,说明队列已满,不能进行入队运算

10、,称为“上溢”。n 退队运算指在循环队列的排头位置退出一个元素并赋给指定的变量。首先front=front+1,并当front=m+1时,置 front=1,然后将排头指针指向的元素赋给指定的变量。当循环队列为空S=0,不能进行退队运算,这种情况成为“下溢”。十二.线性单链表的结构及其基本运算1.线性单链表的基本概念一 组任意的存储单元存储线性表的数据元素,因此,为了表示每个数据元素ai 与其直接后继数据元素ai+1之间的逻辑关系,对数据元素ai 来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置)。这两部分信息组成数据元素ai 的存储映象,成为结点。它包括

11、两个域:其中存储数据元素信息的域称为数据域,存储直接后继存储位置的域称为指针域。指针域中存储的信息称做指针或链。N个结点链结成一个链表,即为线性表(a1,a2,an)的链式存储结构。又由于此链表的每个结点中只包含一个指针域,故又称线性链表或单链表。有时,我们在单链表的第一个结点之前附设一个结点,称之为头结点,它指向表中第一个结点。头结点的数据域可以不存储任何信息,也可存储如线性表的长度等类的附加信息,头结点的指针域存储指向第一个结点的指针(即第一个元素结点的存储位置)。在单链表中,取得第I 个数据元素必须从头指针出发寻找,因此,单链表是非随机存取的存储结构链表的形式:单向,双向2.线性单链表的

12、存储结构名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -3 带链3.带列的栈与队列栈也是线性表,也可以采用链式存储结构。队列也是线性表,也可以采用链式存储结构。十三.线性链表的基本运算1.线性链表的插入2.线性链表的删除十四.双向链表的结构及其基本运算在双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。十五.循环链表的结构及其基本运算是另一种形式的链式存储结构,它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。因此,从表中任一结点出发均可找到表中其他结点。十六.树的定义树是一种简单的非线性结构。树型结构的特点:1.每个结点只有一个前件,

13、称为父结点,没有前件的结点只有一个,称为树的根结点。2.每一个结点可以有多个后件结点,称为该结点的子结点。没有后件的结点称为叶子结点3.一个结点所拥有的后件个数称为树的结点度4.树的最大层次称为树的深度。十七.二叉树的定义及其基本性质1.二叉树是另一种树型结构,它的特点是每个结点至多只有二棵子树(即二叉树中不存在度大于 2 的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。2.二叉树的基本性质在二叉树的第I 层上至多有2i-1 个结点。深度为 k 的二叉树至多有2k-1 个结点(k=1)在任意一个二叉树中,度为0 的结点总是比度为2 的结点多一个;具有 n 个结点的二叉树,其深度至少

14、为log2n+1。一棵深度为k 且有 2k-1 个结点的二叉树称为满二叉树。这种树的特点是每一层上的结点数都是最大结点数。3.满二叉树与完全二叉树满二叉树:除最后一层以外,每一层上的所有结点都有两个子结点。在满二叉树的第K 层上有 2K-1 个结点,且深度为M 的满二叉树右2M-1个结点完全二叉树:除最后一层以外,每一层上的结点数均达到最大值;在最后一层上只缺少右边的若干结点。具有N 个结点的完全二叉树的深度为log2n+1 完全二叉树总结点数为N,若 N 为奇数,则叶子结点数为(N+1)/2 若 N 为偶数,则叶子结点数为N/2 4.二叉树的存储结构二叉树通常采用链式存储结构二叉树具有下列重

15、要特性:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -性质 1 在二叉树的第i 层上至多有2i-1 个结点(i 1)。利用归纳法容易证得此性质。i=1 时,只有一个根结点。显然,2i-1=20=1是对的。现在假定对所有的j,1 jnext=head)29.与单向链表相比,双向链表的优点之一是(更容易访问相邻结点)30.在(D)中,只要指出表中任何一个结点的位置,就可以从它出发依次访问到表中其他所有结点。A 线性单链表B双向链表C线性链表D循环链表31.以下数据结构属于非线性数据结构的是(C)A队列B线性表C二叉树D栈32.树是结点的集合,它的根结点数目是(有且只有1

16、)33.具有 3 个结点的二叉树有(5 种形态)34.在一棵二叉树上第8 层的结点数最多是(128)注:2K-1 35.在深度为 5 的满二叉树中,叶子结点的个数为(16)注:2n-1 36.在深度为 5 的满二叉树中,共有(31)个结点。注:2n 1 37.设一棵完全二叉树共有699 个结点,则在该二叉树中的叶子结点数为(350)说明:完全二叉树总结点数为N,若 N 为奇数,则叶子结点数为(N+1)/2;若 N 为偶数,则叶子结点数为N/2。38.设有下列二叉树,对此二叉树中序遍历的结果是(B)AABCDEF BDBEAFC CABDECF DDEBFCA 39.已知二叉树后序遍历序列是da

17、bec,中序遍历序列debac,它的前序遍历序列是(cedba)40.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH 和 DBGEACHF,则该二叉树的后序遍历为(DGEBHFCA)41.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是(gdbehfca)42.串的长度是(串中所含字符的个数)43.设有两个串p 和 q,求 q 在 p 中首次出现位置的运算称做(模式匹配)44.N 个顶点的连通图中边的条数至少为(N-1)45.N 个顶点的强连通图的边数至少有(N)46.对长度为n 的线性表进行顺序查找,在最坏情况下所需要的

18、比较次数为(N)47.最简单的交换排序方法是(冒泡排序)48.假设线性表的长度为n,则在最坏情况下,冒泡排序需要的比较次数为(n(n-1)/2)49.在待排序的元素序列基本有序的前提下,效率最高的排序方法是(冒泡排序)50.在最坏情况下,下列顺序方法中时间复杂度最小的是(堆排序)51.希尔排序法属于(插入类排序)名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 12 页 -52.堆排序法属于(选择类排序)53.在下列几种排序方法中,要求内存量最大的是(归并排序)54.已知数据表A 中每个元素距其最终位置不远,为节省时间,应采用(直接插入排序)55.算法的基本特征是可行性、确定性、有

19、穷性和拥有足够的情报。1.一个算法通常由两种基本要素组成:一是对数据对象的运算和操作,二是算法的控制结构。1.算法的复杂度主要包括时间复杂度和空间复杂度。2.实现算法所需的存储单元多少和算法的工作量大小分别称为算法的空间复杂度和时间复杂度。3.所谓数据处理是指对数据集合中的各元素以各种方式进行运算,包括插入、删除、查找、更改等运算,也包括对数据元素进行分析。4.数据结构是指相互有关联的数据元素的集合。5.数据结构分为逻辑结构与存储结构,线性链表属于存储结构。6.数据结构包括数据的逻辑结构和数据的存储结构。7.数据结构包括数据的逻辑结构、数据的存储结构以及对数据的操作运算。8.数据元素之间的任何

20、关系都可以用前趋和后继关系来描述。9.数据的逻辑结构有线性结构和非线性结构两大类。10.常用的存储结构有顺序、链接、索引等存储结构。11.顺序存储方法是把逻辑上相邻的结点存储在物理位置相邻 的存储单元中。12.栈的基本运算有三种:入栈、退栈与读栈顶元素。13.队列主要有两种基本运算:入队运算与退队运算。14.在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。15.栈和队列通常采用的存储结构是链式存储和顺序存储。16.当线性表采用顺序存储结构实现存储时,其主要特点是逻辑结构中相邻的结点在存储结构中仍相邻。17.循环队列主要有两种基本运算:入队运算与退

21、队运算。每进行一次入队运算,队尾指针就 进 1。18.当循环队列非空且队尾指针等于对头指针时,说明循环队列已满,不能进行入队运算。这种情况称为上溢。19.当循环队列为空时,不能进行退队运算,这种情况称为下溢。20.在一个容量为25 的循环队列中,若头指针front=16,尾指针rear=9,则该循环队列中共有18 个元素。注:当rearfront时,元素个数rear front。21.在一个容量为15 的循环队列中,若头指针front=6,尾指针 rear=9,则该循环队列中共有 3 个元素。22.顺序查找一般是指在线性表中查找指定的元素。名师资料总结-精品资料欢迎下载-名师精心整理-第 10

22、 页,共 12 页 -23.在计算机中存放线性表,一种最简单的方法是顺序存储。24.在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。25.在链式存储方式中,要求每个结点由两部分组成:一部分用于存放数据元素值,称为数据域,另一部分用于存放指针,称为指针域。其中指针用于指向该结点的前一个或后一个结点(即前件或后件)。26.在 线性单链表中,每一个结点只有一个指针域,由这个指针只能找到后继结点,但不能找到前驱结点。27.为了要在线性链表中插入一个新元素,首先要给该元素分配一个新结点,以便用于存储该元素的值。28.在线性链表中删除一个元素后,只需要改变被删除元素所在结点的前一个结点的

23、指针域 即可。29.用链表表示线性表的突出优点是便于插入和删除操作。30.在树形结构中,树根结点没有前件。31.在树结构中,一个结点所拥有的后件个数称为该结点的度。叶子结点的度为0。32.设一棵二叉树中有3 个叶子结点,8 个度为 1 的结点,则该二叉树中总的结点数为13。33.设一棵完全二叉树共有739 个结点,则在该二叉树中有370 个叶子结点。34.设一棵完全二叉树共有700 个结点,则在该二叉树中有350 个叶子结点。35.在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为三种:前序遍历、中序遍历和后序遍历。36.若串 S=Program,则其子串的数目是29。注:n(n+

24、1)/2+1 37.若串 S=”MathTypes”,则其子串的数目是46。38.对长度为 n 的线性表进行插入一个新元素或删除一个元素时,在最坏情况下所需要的比较次数为n。39.在长度为 n 的有序线性表中进行顺序查找。最坏的情况下,需要的比较次数为n。40.在长度为 n 的有序线性表中进行二分查找。最坏的情况下,需要的比较次数为log2n。41.长度为 n 的顺序存储线性表中,当在任何位置上插入一个元素概率都相等时,插入一个元素所需移动元素的平均个数为n/2。42.排序是计算机程序设计中的一种重要操作,常见的排序方法有插入排序、交换排序和选择排序等。43.快速排序法可以实现通过一次交换而消

25、除多个逆序。44.快速排序法的关键是对线性表进行分割。45.冒泡排序算法在最好的情况下的元素交换次数为0。46.在最坏情况下,冒泡排序的时间复杂度为n(n-1)/2。47.对于长度为n 的线性表,在最坏情况下,快速排序所需要的比较次数为n(n-1)/2。48.在最坏情况下,简单插入排序需要比较的次数为n(n-1)/2。49.在最坏情况下,希尔排序需要比较的次数为O(n1.5)。注:括号里是n 的 1.5 次方。50.在最坏情况下,简单选择排序需要比较的次数为n(n-1)/2。51.在最坏情况下,堆排序需要比较的次数为o(nlog2n)。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 12 页 -52.对于输入为N 个数进行快速排序算法的平均时间复杂度是O(Nlog2 N)。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 12 页 -

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!