- 热门职位
- 热门地点
- 地区招聘
1.数据结构的三要素是什么?
逻辑结构、存储结构、数据操作;
数据的逻辑结构是指数据元素之间的逻辑关系,即用逻辑关系来描述数据。它与数据的具体存储形式无关,独立于计算机。数据逻辑结构通常分为线性结构和非线性结构。
对于线性表、集合、树、图这四种典型的数据结构来说,它们具有以下特点:
数据的存储结构是指数据结构在计算机中的表示形式,也称为物理结构,也称为图像。它包括数据元素的表示和关系的表示。数据存储结构依赖于计算机语言,是用计算机语言实现的逻辑结构。数据的线性存储结构主要有:顺序存储、链式存储、索引存储、哈希存储。
顺序存储:逻辑上相邻的数据元素存储在物理上也相邻的存储单元中。元素之间的关系通过存储单元之间的位置关系来体现,即相邻关系。比如序列表。
优点:易于实现随机访问,每个元素占用存储空间最少。
缺点:只能使用一整块相邻的存储空间,容易产生较多的外部内存碎片。
链式存储:用代表元素存储地址的指针来表示元素之间的逻辑关系。此时,逻辑上相邻的数据元素不需要物理上相邻。比如单链表。
优点:不会出现内存碎片,存储单元可以得到充分利用。
缺点:每个元素由于存储指针而占用额外的存储空间,并且只能通过遍历来实现顺序访问。
索引存储:在存储数据元素的同时,会创建一个额外的索引表。索引表中的每一项称为索引项,通常采用(关键字,地址)的形式。
优点:检索速度快。
缺点:额外的索引表占用额外的存储空间。当添加或删除数据元素时,需要同时修改索引表,因此会花费额外的时间。
哈希存储:根据元素的key以某种方式计算出元素的存储地址,也称为哈希存储。比如哈希表。
优点:检索、添加、删除操作非常快。
如果哈希函数(或哈希函数)设计不好,就可能会出现哈希冲突,解决冲突会增加时间和空间开销。
数据的非线性存储结构主要包括:树存储和图存储。
数据操作主要体现在操作的定义和操作的执行上。
操作的定义是针对数据的逻辑结构的,描述了操作能够实现的功能。
操作的实现是针对数据存储结构的,它描述了操作的具体操作过程。
2.数组和链表有什么区别? 3、排序有哪些分类?
稳定排序:冒泡排序、插入排序、归并排序、基数排序;
不稳定排序:选择排序、快速排序、希尔排序、堆排序; (常见问题)
比较排序:冒泡排序、快速排序、归并排序;
非比较排序:基数排序、基数排序、桶排序;
内部排序:插入排序、归并排序、选择排序、交换排序、计数排序、桶排序、基数排序;
外部排序:暂时未知;
记住复杂度表:
4.数组和链表有什么区别?
从逻辑结构上来看,数组必须有固定的长度,无法适应数据的动态增减。也就是说,数组的大小一旦定义就不能更改。当数据增加时,可能会超出原来定义的元素数量;当数据减少时,内存就被浪费了;链表动态分配存储,可以适应数据的动态增减,可以方便地插入和删除数据项。
从内存存储的角度来看;数组从栈上分配空间(使用new在堆上创建),对于程序员来说方便快捷,但自由度较小;链表从堆中分配空间,自由度较大,但申请和管理比较麻烦。
从访问方式来看,数组是连续存储在内存中的,因此可以使用下标索引来访问;链表是链接的存储结构,只能以线性方式从前到后顺序访问元素,因此访问效率比数组低。
5、线性表的存储结构是怎样的?
线性表存储结构又可以细分为顺序存储结构和链式存储结构
顺序存储结构:数据按顺序存储在连续的整个物理空间中。这种存储结构称为顺序存储结构(简称顺序表);
链式存储结构:数据分散存储在物理空间中,它们之间的逻辑关系通过线路保存。这种存储结构称为链式存储结构(简称链表);
6、头指针和头节点?
头节点:
头指针:
7. 栈和队列有什么区别?访问规则:栈是一种LIFO(后进先出)数据结构,即最后加入栈的元素总是最先被移除的。队列是先进先出(FIFO,First In First Out)的数据结构,即最先添加到队列中的元素总是最先被移除。操作方式:栈的主要操作有入栈(向栈顶添加元素)和出栈(从栈顶移除元素)。队列的主要操作包括入队(向队尾添加元素)和出队(从队头移除元素)。使用场景:由于栈的后进先出性质,常用于实现函数调用、递归等场景,因为这些操作通常需要先处理后创建的对象。队列的先进先出特性使得它在需要按特定顺序处理元素的场景中非常有用,例如打印任务、网络数据包处理等。 数据结构:堆栈通常使用数组来实现或链接列表。在数组实现中,栈底通常位于数组的开头,栈顶位于数组的末尾;在链表实现中,栈顶的元素位于链表的头部。队列也可以使用数组或链表来实现,但是在数组实现中,通常需要一个额外的变量来记录队列的头和尾位置;在链表实现中,队列的头和尾可以通过链表的头和尾来传递。要跟踪的尾节点。 8.什么是树?
(定义)树是一种数据结构,是由n(n>=1)个有限节点组成的层次关系的集合。
(基本术语)
节点度:该节点拥有的子树的数量。
叶子:度数为零的节点。
分支节点:度数不为零的节点。
树的度:树中节点的最大度。
Level:根节点的level为1,其他节点的level等于该节点的父节点加1。
树高:树中节点的最大层数。
无序:如果树中节点的子树之间的顺序不重要,则可以交换位置。
序数:如果树中某个节点的子树的顺序很重要,则位置不能交换。
森林:由0个或多个不相交的树组成。给森林加一个鞋跟,森林就变成了一棵树;去掉根部,树就变成森林。
(自然)
9.什么是二叉树?
(定义)可以是一棵空树();它只能有一个根节点;它可以包含左子树;它可以包含右子树;它可以包含左子树和右子树;
(自然)
10.什么是满二叉树?
(定义)高度为h,节点为
二叉树。 (即左子树和右子树)
11.什么是完全二叉树?
(定义)完全二叉树是由满二叉树派生出来的。如果二叉树的深度为h,除第h层外,每层(1~h-1)的节点数达到最大数(即1~h-1层就是满二叉树),并且第h层的所有节点都连续集中在最左侧。这是一个完全二叉树。
12.什么是二叉搜索树?
(定义)二叉搜索树(BST),又称二叉搜索树。设 x 为二叉树中的一个节点。 x节点包含关键字Key,节点x的Key值记为Key[x]。如果y是x的左子树中的节点,则Key[y]=Key[x]。
意思是某个节点的左子树的值小于等于该节点值,右子树的值大于等于该节点值;
13.什么是平衡二叉树?
(定义)也称为平衡二叉搜索树(Adelson-Velsky and Landis,AVL),并具有以下性质:它是一棵空树或其左右子树的高度差的绝对值不超过1,并且左右子树都是平衡二叉树
14、二叉树的存储方式是什么?
链式存储方法:链式存储方法是最常见的二叉树存储方法。每个节点包含三个字段:数据字段、左子指针和右子指针。通过这些指针,可以链接整个树的结构;
顺序存储:使用数组存储二叉树;
如果父节点的数组索引为i,那么它的左孩子就是2 * i + 1,它的右孩子就是i * 2 + 2。(但是用链式形式表达的二叉树更有利于我们理解。二叉树一般都是以链的形式存储)
15.如何遍历树?
广度优先遍历:
前序遍历:访问顺序为:根节点->左子树->右子树;
中序遍历:访问顺序为:左子树->根节点->右子树;
后序遍历:访问顺序为:左子树->右子树->根节点;
深度优先遍历:
层序遍历:按照从上到下、从左到右的顺序逐层访问节点。这通常使用队列来实现。
16.如何确定二叉树?
中序+首序/末序/层序
什么是图片?
数据结构:图【详解】_图数据结构-CSDN博客
什么是图遍历?图遍历和树遍历有什么区别?关键路径和关键活动是什么? 27.什么是红黑树? 28、数据结构的四种逻辑结构各有什么特点?
(1)集合结构:结构中的数据元素除属于同一类型外没有其他关系。
(2)线性结构:结构中的数据元素之间存在一对一的关系。
(3)树??结构:结构中数据元素之间存在一对多的关系。
(4)图结构或网络结构:结构中数据元素之间存在多对多的关系。
29.数据结构中的存储结构有哪些?各自的优点和缺点是什么?
30.什么是数据结构? C语言、数据结构、算法、程序之间是什么关系?
数据结构是指所有数据元素以及数据元素之间的关系。可以看作是相互之间具有一定关系的集合。因此,我们可以将数据结构视为结构化数据元素的集合。另外,一般情况下,选择合适的数据结构可以提高运行效率或者存储效率。
数据结构、算法和程序的关系是:数据结构+算法=程序。
算法不一定需要能够直接在计算机上运行,??但程序一定需要能够在计算机上运行。 C语言只是算法或数据结构的描述。描述数据结构和算法不限于C语言。也可以是C++语言,其他计算机语言,甚至人类的自然语言。
31.常用数据结构?
大批;堆;队列;链表;图形;树;前缀树;散列
32. 解决哈希冲突的方法
哈希表(也称哈希表)是一种根据键值直接访问的数据结构。
1)线性检测法
2)平方检测法
3)伪随机序列法
4)拉链法
33.什么是KMP算法?
查找字符串中包含目标的匹配字符串。主要思想是让子串在每次比较过程中滑动到合适的位置。当发生不匹配时,它不是向右移动一位,而是移动(当前匹配的长度-当前匹配子串的部分匹配值)位。
34.什么是B树?
根据B类树的特点,构建多级B类树,然后在尽可能多的节点上存储相关信息,保证层数尽可能少,以便我们以后更快的找到信息。磁盘的I/O操作也较少,B类树是平衡树。每个节点到叶子节点的高度是相同的,这也保证了每次查询都是稳定的。
B树和B+树的区别,以m阶树为例。
关键词数量不同; B+树中的分支节点有m个关键字,其叶子节点也有m个。它的关键字仅充当索引。然而,虽然B树也有m个子节点,但它只有m个子节点。有 m-1 个关键字。存放地点不同; B+树中的数据是存储在叶子节点中的,即将所有叶子节点的数据组合起来形成完整的数据,但是B树的数据是存储在每个节点中的,而不仅仅是存储在叶子节点上的。分支节点的结构不同; B+树的分支节点只存储关键字信息和子节点的指针(这里的指针指的是磁盘块的偏移量),也就是说内部节点只包含索引信息。查询方式不同; B树在找到具体值后结束,而B+树需要通过索引找到叶子节点中的数据才结束。也就是说,B+树的搜索过程走的是从根节点到叶子节点的路径。节点的路径。
感谢博主:常用数据结构-完全二叉树(定义、特点、节点数的判断及C++简单实现) - CSDN博客
感谢博主:线性表存储结构详解_为什么线性表中节点占用的存储量与结构本身占用的存储量相同 - CSDN博客
感谢博主:
感谢博主:数据结构面试常见题,一应俱全! _数据结构面试题-CSDN博客
感谢博主:数据结构面试题(史上最全基础面试题,100家互联网公司精心整理) - 知乎
感谢博主:数据结构面试常见问题总结-CSDN博客
小学语文名师分享:如何通过‘动’字提升学生智慧与成绩
小学著名的汉语老师 小学汉语老师de微信公共帐户 在广阔的书籍中,我会发 ...
浙江大学三位一体面试现场实况:家长考生雨中共同前行,感人瞬间令人动容
6月19日凌晨6:15,在雨雨雨的伴随着郑大学的“tripe”采访在Yuquan校园和Z ...
浙江大学三位一体初审入围分数变化分析:2024年首考入围分总体降低,理科生更友好
在智格大学的初步评论中,没有“一对一得分线”这样的事情。所谓的“一对一分数要求” ...
面试系统操作流程详解:考生信息核对、必答题抽取与试讲题目查看指南
再次登录后,输入面试系统的主页。每个候选人的访谈顺序是固定的,审查员的操作顺序也对应。 ...
香港大学硕士项目面试指南:形式与详细攻略全解析
许多学生需要参加香港大学硕士课程的录取面试。但是,根据香港大学的规定,并非所有硕士课程都 ...