首页 > 编程知识 正文

常用的算法和数据结构 面试,数据结构与算法

时间:2023-05-05 17:04:40 阅读:173264 作者:3864

数据结构面试经典问题摘要参考资源基础深度补充

借鉴资源基础数据结构常见面试问题深入挖掘数据结构面试问题(三)在数据结构面试中,一定要听数据结构算法常见面试问题的补充

1 .请详细说明数组和链表的区别。

从逻辑结构看:

a )数组必须定义预先决定的长度(要素的个数),不能应对数据动态增减的情况。 数据增加可能会超过定义的元素数量。数据减少会浪费内存。数组可以根据下标直接访问。

B )链表动态进行存储分配,能够适应数据动态增减的情况,便于数据项的插入、删除。 (在数组中插入和删除数据项时,必须移动其他数据项,这非常复杂。)链表必须基于next指针找到以下元素

从内存存储器的角度来看:

a ) ) )静态)数组从堆栈中分配区域,因此对程序员来说方便且高速,但自由度小

b )链表从堆中分配空间,自由度大,但申请管理麻烦

通过上述比较可以看出,如果需要快速访问数据,而且很少插入或删除元素,则需要使用数组。相反,如果需要频繁插入或删除元素,则需要使用链表的数据结构。

2 .排序算法是什么? C语言共有多少种排序方法

排序算法有很多,每个算法的时间和空间复杂度不同,效率也有差异,使用上也可能不同。 原则上,数据结构是一个领域,与语言没有绝对的联系,往往同一算法可以用多种语言实现。 插入排序、气泡排序、选择排序、快速排序、堆栈排序、合并排序、基数排序、希尔排序等常用算法如下所示。

3 .如何理解开心服装表,开心服装表是什么

摘自百度:散列表(Hash table,也称为开心服饰表) )是基于键码值(Key value )直接访问的数据结构。 这意味着通过将键码值映射到表中的某个位置来访问记录,从而缩短搜索时间。 该映射函数称为哈希函数,存储记录的数组称为哈希表。 在规定表m中存在函数f[key],如果对任意的规定的关键词值key代入函数而得到记录在包含该关键词的表中的地址,则将表m称为高兴的服饰[hash]表,将函数f[key]

4 .请写下以下算法的时间复杂度

气泡排序法插入排序法堆积排序法二叉树排序法

o(n )2) o )2) o ) O(O(nlog2n )最坏o ) N2 )平均o ) nlog2n )

快速排序法希尔排序法

最坏o(n2 )平均o ) O(nlog2n ) o ) nlogn )不稳定

5 .数据结构、二叉树相关知识、销量、为什么要使用二叉树等。

在计算机科学中,二叉树是每个节点最多有两个子树的有序树。 通常,树根子树被称为“左子树”(left subtree )和“右子树”(right subtree )。 二叉树常用作二叉树的搜索树和二叉树的山或二叉树的排序树。 二叉树的每个节点最多只有两个部分树,二叉树的部分树有左右之分,顺序不能颠倒。

文件系统和数据库系统一般采用树,特别是b树的数据结构数据,主要是排序和检索效率。 二叉树是最基本、最典型的顺序树,用于教授和研究树的特性,本身实际上很少应用。 因为缺点很明显。 像泡沫分类一样,在效率问题上不实用,但不会失去一个教育例子的好手段。

6 .如何判断链表上是否有环?

两个针分别按一定的步骤走,P1走一布,P2走两布。 如果链表中有圈,P1和P2有时会相遇。 (追击问题的解法)

7、简述快速排序流程

1 )选择基本元素。 通常选择第一个元素或最后一个元素。

2 )将待排序的记录按一次排序分为独立的两部分,其中部分记录的要素值小于基准要素值。 其他部分记录的要素值大于基准值。

3 )此时,基准元素位于确定顺序后的正确位置

4 )然后,将这两部分的记录分别用同一方法继续排序,直到整个序列有序为止。

8、各种排序算法比较

在时间的复杂性上:

(1)平方阶数(o ) N2 ) )排序

各种简单排序:直接插入、直接选择、冒泡排序;

)2)线性对数阶(o ) O(nlog2n ) )排序

快速排序、堆栈排序、合并排序

说明:

当原表规则或基本规则时,直接插入排序和冒泡排序可以大大减少比较次数和移动记录次数,降低时间复杂度到o(n );

快速排序相反,原表基本有序时为脱泡排序,时间复杂度为o(n2 );

原表是否有序对简单选择排序、堆积排序、合并排序、基数排序的时间复杂度影响不大。

稳定性:

排序算法的稳定性:如果要排序的序列中存在多个具有相同关键字的记录并进行排序,且这些记录的相对顺序不变,则称算法为稳定。 如果排序后记录的相对顺序发生了变化,则会说算法不稳定。

稳定排序算法:气泡排序、插入排序、合并排序、基数排序

不是稳定的排序算法。 选择排序、快速排序、希尔排序和堆栈排序

9、排序算法选择标准:

将要排序的元素的数量设为n。

1 )当n较大时,应该采用时间复杂度为o(nlog2n )的排序方法。 快速排序、堆栈排序、合并排序顺序。

2 ) n较大时,允许内存空间,要求稳定性)合并排序

3 )当n较小时,可以采用直接插入或直接选择排序。

直接插入排序:如果元素有规律分布,则直接

插入排序将大大减少比较次数和移动记录的次数。
直接选择排序 :元素分布有序,如果不要求稳定性,选择直接选择排序

10、用循环比递归效率高吗?
递归和循环两者完全可以互换。不能完全决定性地说循环地效率比递归的效率高。
递归算法:
优点:代码简洁、清晰,并且容易验证正确性。
缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理(还有可能出现堆栈溢出的情况),比如参数传递需要压栈等操作,会对执行效率有一定影响。但是,对于某些问题,如果不使用递归,那将是极端难看的代码。在编译器优化后,对于多次调用的函数处理会有非常好的效率优化,效率未必低于循环。
循环算法:
优点:速度快,结构简单。
缺点:并不能解决所有的问题。有的问题适合使用递归而不是循环。如果使用循环并不困难的话,最好使用循环。
解决高兴的服饰冲突的方法
高兴的服饰表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
1) 线性探测法
2) 平方探测法
3) 伪随机序列法
4) 拉链法

11、KMP算法:
在一个字符串中查找是否包含目标的匹配字符串。其主要思想是每趟比较过程让子串先后滑动一个合适的位置。当发生不匹配的情况时,不是右移一位,而是移动(当前匹配的长度– 当前匹配子串的部分匹配值)位。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。