数据结构常见笔试题
-
顺序表和链表的区别
顺序表存储(典型的数组) 原理:顺序表存储是将数据元素放到一块连续的内存存储空间,相邻数据元素的存放地址也相邻(逻辑与物理统一)。 优点:(1)空间利用率高。(局部性原理,连续存放,命中率高) (2)存取速度高效,通过下标来直接存储。 缺点:(1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。 (2)不可以增长长度,有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大。 时间性能 :查找 O(1) ,插入和删除O(n)。
链表存储 原理:链表存储是在程序运行过程中动态的分配空间,只要存储器还有空间,就不会发生存储溢出问题,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点关系间的指针。 优点:(1)存取某个元素速度慢。 (2)插入和删除速度快,保留原有的物理顺序,比如:插入或者删除一个元素时,只需要改变指针指向即可。 (3)没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关. 缺点:(1)占用额外的空间以存储指针(浪费空间,不连续存放,malloc开辟,空间碎片多) (2)查找速度慢,因为查找时,需要循环链表访问,需要从开始节点一个一个节点去查找元素访问。 时间性能 :查找 O(n) ,插入和删除O(1)。
-
用两个栈实现一个队列
设有两个栈S1,S2
入队操作:
判断栈S1是否为空,为空则可以执行入队操作,即所有数据入栈S1
出队操作:
所有数据出栈S1,入栈S2,然后出栈S2
-
用两个队列实现一个栈
设有两个队列Q1,Q2 入栈操作: 判断两个队列是否为空,为空则可以执行入栈操作,即所有数据入队Q1 出栈操作: Q1(Q2)中的数据除最后一个全部出队入队列Q2(Q1),留在Q1中最后一个数据是将要出栈的数据,依次类推直到所有c数据出栈
-
已知某二叉树的前序遍历为A-B-D-F-G-H-I-E-C,中序遍历为F-D-H-G-I-B-E-A-C,请还原这颗二叉树。
前序遍历A-B-D-F-G-H-I-E-C
中序遍历F-D-H-G-I-B-E-A-C
后序遍历F-H-I-G-D-E-B-C-A
-
简述快速排序过程
1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。 3)此时基准元素在其排好序后的正确位置 4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
-
设一组初始记录关键字序列为(60,80,55,40,42,85),则以第一个关键字60为基准而得到的一趟快速排序结果是( C )。
A) 40,42,55,60,80,85
B) 42,45,55,60,85,80
C) 42,40,55,60,80,85
D) 42,40,60,85,55,80
-
解决哈希冲突的方法
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。
1) 线性探测法
2) 平方探测法
3) 伪随机序列法
4) 链地址法
-
设散列表的长度为10,散列函数H(n)=n mod 7,初始关键字序列为 (33,24,8,17,21,10),用链地址法作为解决冲突的方法,平均查找长度是( B )。
A) 1 B) 1.5 C) 2 D) 2.5