计算机专业408复试问题——数据结构篇

计算机专业复试问题自用笔记,408各科重要知识点总结。

1、说一下你对数据结构的理解

数据结构是计算机存储、组织数据的方式。 一个程序 = 算法 + 数据结构,数据结构是实现算法的基础,选择合适的数据结构可以带来更高的运行或者存储效率。结构包括逻辑结构和物理结构。
数据的逻辑结构包括:
(1)集合:数据元素之间除了有相同的数据类型再没有其他的关系;
(2)线性结构:数据元素之间是一对一的关系——线性表、栈、队列;
(3)树形结构:数据元素之间是一对多的关系;
(4)图状结构:数据元素之间是多对多的关系。
数据的物理结构包括顺序存储结构和链式存储结构。

2、顺序存储与链式存储

顺序存储结构是用一段连续的存储空间来存储数据元素,可以进行随机访问,访问效率较高。链式存储结构是用任意的存储空间来存储数据元素,不可以进行随机访问,访问效率较低。

3、数组和链表区别

数组是顺序的存储结构;链表是链式的存储结构。
数组用来实现顺序线性表,在内存中有顺序排列;链表通过指针来连接元素与元素,在内存中不连续。
数组的存储长度是固定的,它不能适应数据动态增减的情况;链表能够动态分配存储空间以适应数据动态增减的情况。
数组支持随机存取,查找某个元素较为简单,但插入与删除比较复杂;链表的插入删除元素相对数组较为简单,但是查找某个元素较为困难。

4、解释一下 KMP 算法

KMP算法的关键是利用匹配失败后的信息(已经匹配的部分中的对称信息),尽量减少模式串(待搜索词)与文本串的匹配次数以达到快速匹配的目的
KMP归纳:根据模式串的对称信息来获得一个next数组,在文本串遍历过程中,当发生对比字符失败时,根据当前next数组的值来移动相应的距离,使匹配效率提高。

5、最小生成树

通俗易懂的讲就是最小生成树包含原图的所有节点而只用最少的边和最小的权值距离。如果在最小生成树中添加一条边,必定成一个环。
相关算法:
普里姆(prim)算法:顶点集到其他点权值最小边,加入新的顶点集,再找边…直到遍历所有点;
克鲁斯卡尔(kruskal)算法:依次选择最小边,使得无环且所有点遍历结束。

6、拓扑排序

拓扑排序是一个有向无环图的所有顶点的线性序列;
拓扑排序的步骤:
(1)在有向图中任意选择一个没有前驱的节点输出;
(2)从图中删去该节点以及与它相连的边;
(3)重复以上步骤,直到所有的顶点都输出或者当前图中不存在无前驱的顶点为止,后者代表该图是有环图,所以可以通过拓扑排序来判断一个图是否存在环。

7、哈希表的冲突及解决方法

哈希表:也叫做散列表。是根据关键字和值(Key-Value)直接进行访问的数据结构。也就是说,它通过关键字 key 和一个映射函数 Hash(key) 计算出对应的值 value,然后把键值对映射到表中一个位置来访问记录,以加快查找的速度。
冲突:关键字不同的元素可能会映像到哈希表的同一地址上
解决方法:
(1)开放寻址法:线性探测法、平方探测法、双散列函数探测法、伪随机探测法;
(2)拉链法(相同时挂到一个单链表下);
(3)再哈希法(相同时再用另外一个哈希函数)。

8、各种排序算法总结

不稳定算法:快(快速)些(希尔)选(选择)堆。(记住,面试时才能临场发挥出来)
时间复杂度0(nlogn)算法:快(快速)归(归并)队(堆)。
在这里插入图片描述

希尔排序:把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序的时间性能取决于快速排序递归的深度,可以用递归树来描述递归算法的执行情况。
堆排序:① 首先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端;② 将顶端的数与末尾的数交换,此时,末尾的数为最大值,剩余待排序数组个数为n-1;③ 将剩余的n-1个数再构造成大根堆,再将顶端数与n-1位置的数交换,如此反复执行,便能得到有序数组。(注意:升序用大根堆,降序就用小根堆)
归并排序:归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的。该算法采用经典的分治策略,将问题分成一些小的问题然后递归求解。
基数排序:将整数按位数切割成不同的数字,然后按每个位数分别比较。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。

9、贪心算法、动态规划和分治法的区别

贪心算法追求的是局部最优解。贪心算法从上往下,从顶部一步一步最优,得到最后的结果,它不能保证全局最优解,与贪心策略的选择有关。
动态规划是把问题分解成子问题,动态规划解决子问题,前一个子问题的解对后一个子问题产生一定的影响。动态规划是从下到上,一步一步找到全局最优解。(各子问题重叠)
分治法是将原问题划分成n个规模较小而结构与原问题相似的子问题;递归地解决这些子问题,然后再合并其结果,就得到原问题的解。(各子问题独立)


笔记整理不易,如需完整笔记,可后台私信~

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在CSDN数据结构复试中,我将会展示我的数据结构知识和解决问题的能力。首先,我会通过面试官提供的问题来展示我对数据结构的理解和应用能力。我将会运用各种数据结构,例如数组、链表、栈、队列、树和图等,来解决不同类型的问题。同时,我会说明我选择数据结构的原因,以及每种数据结构的优缺点。 其次,我将会展示我对算法的理解和能力,因为数据结构算法是紧密相连的。我会解释常见的排序算法,例如冒泡排序、插入排序、快速排序和归并排序,并分析它们的时间和空间复杂度。此外,我还会介绍常见的查找算法,例如二分查找和哈希查找。 除了理论知识,我还将通过编程实例来展示我的能力。我将会编写一些常见的数据结构算法的代码,例如链表的插入和删除操作、树的遍历和搜索算法等。通过实际编程,我可以展示我的编码风格和注重细节的能力。 最后,在复试过程中,我会积极与面试官进行互动和交流。我会回答问题时展示我的思考过程,并提出我的解决方案。同时,我也会乐于接受面试官的指导和建议,以便提升自己的能力。 总的来说,通过在CSDN数据结构复试中展示我的数据结构知识、解决问题的能力和编程实践经验,我希望能够展现自己作为一名合格的数据结构工程师的潜力和价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值