风也温柔

计算机科学知识库

经典数据结构 2022高频经典前端面试题(数据结构+算法篇,含答案)

  数据结构篇 1. 数组与链表的区别?(常考)

  (元素个数,存储单元经典数据结构 2022高频经典前端面试题(数据结构+算法篇,含答案),元素的顺序关系,)

  (1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;

  (2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请;

  (3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系由结点所包含的指针来体现。

  (4)对于不是固定长度的列表,用可能最大长度的数组来描述,会浪费许多内存空间。

  (5)对于元素的插人、删除操作非常频繁的列表处理场合,用数组表示是不适宜的。若用链表实现,会使程序结构清晰,处理的方法也较为简便。

  数组的优点:

  随机访问性强

  查找速度快

  数组的缺点:

  插入和删除效率低

  可能浪费内存

  内存空间要求高,必须有足够的连续内存空间。

  数组大小固定,不能动态拓展

  链表的优点:

  插入删除速度快

  内存利用率高,不会浪费内存

  大小没有固定,拓展很灵活。

  链表的缺点:

  斗拱结构数据_金字塔的结构之谜 6 二,金字塔的神秘数据_经典数据结构

  不能随机查找,必须从第一个开始遍历,查找效率低

  2.数据结构基本知识

  队列:先进先出,只能从尾部添加元素,在头部删除数据。

  栈:后进先出,只能从尾部添加和删除元素。(栈内存的特点:存取速度快,但不灵活,同时由于结构简单,在变量使用完成后就可以将其释放,内存回收容易实现。)

  链表:是线性结构,是一种有序的列表。在链表中,每个节点都有数据域和指针域。

  堆:内存的存储不同与栈,虽然他们都是内存中的一片空间,但是堆内存存储变量时没有什么规律可言。

  3.栈和堆的区别 4.计算机由什么组成?

  计算机是由硬件系统()和软件系统()两部分组成的。

  计算机的基本组成包括输入设备、输出设备、存储器、运算器、控制器这五部分。

  斗拱结构数据_金字塔的结构之谜 6 二,金字塔的神秘数据_经典数据结构

  算法篇

  常见的七种排序算法(重点)

  冒泡,插入,希尔,选择,快速,归并,堆

  冒泡排序

  假设长度为n的数组arr,要按照从小到大排序。

  首先从数组的第一个元素开始到数组的最后一个元素为止,对数组中相邻的两个元素进行比较,如果位于数组左端的元素大于数组右端的元素,则交换这两个元素在数组中的位置。这样操作后数组最右端的元素即为该数组中所有元素的最大值。接着对该数组除最右端的n-1个元素进行同样的操作,再接着对剩下的n-2个元素做同样的操作,直至整个数组有序排列。

  选择排序

  基本思想:首先在未排序数组中找到最小(大)元素,存放在数组的起始位置。

  再从剩余数组元素中继续寻找最小(大)元素,返回放在已排序数组的末尾

  重复第二步,直到所有元素都排序完成

  3插入排序()

  就是将无序序列插入到有序系列中,比如讲某数组排序,可以将第一个元素看做一个有序序列,剩下的看做一个无序序列,无序序列中的元素比有序序列的小就插在前面,比有序序列大就插在后面,以此类推。

  4希尔排序

  它是在插入排序的基础上进行了改进经典数据结构,先将数组的分割成若干个子序列分别进行插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。

  5快速排序()

  基本思想:在已知数据集合中随便去一个基准(pivot)

  将其余数据以基准为中心,大于分放右边,小于的放左边

  将左右两个子集重复以上两个步骤。

  经典数据结构_斗拱结构数据_金字塔的结构之谜 6 二,金字塔的神秘数据

  不稳定的排序,如果有两个顺序是一样的。

  6归并排序

  7堆排序

  延伸:sort方法你认为它内部用的是哪种排序算法?(这道题是没有回答出来的)

  毫无疑问是用到了快速排序,但不仅仅只用了快速排序,还结合了插入排序和堆排序。

  延伸:快速排序的中位数是放哪里?

  diff算法

  diff的过程,就是调用patch函数,像打补丁一样修改真实dom。通过比较新旧两个虚拟节点经典数据结构,进行对应的操作。

  1.通过key和节点选择器对新旧dom进行比较,如果不同新节点直接把老节点整个替换掉;

  2.如果是相似节点,先比较引用是否一致,一致则说明没有变化,直接返回;

  3.再比较文本节点,需要修改,则调用Node. = vnode.text;

  4.再比较两个子节点,若只有新节点有子节点,则通过创建新的子节点,若只有旧节点有子节点,则直接删除老节点,若新旧节点都有子节点,且不一样,调用更新。

  文章来源:https://blog.csdn.net/weixin_45822171/article/details/127576451