数据结构常见笔面

数据结构常见笔试题

  1. 顺序表和链表的区别

    顺序表存储(典型的数组)
    原理:顺序表存储是将数据元素放到一块连续的内存存储空间,相邻数据元素的存放地址也相邻(逻辑与物理统一)。
         优点:(1)空间利用率高。(局部性原理,连续存放,命中率高) 
               (2)存取速度高效,通过下标来直接存储。
         缺点:(1)插入和删除比较慢,比如:插入或者删除一个元素时,整个表需要遍历移动元素来重新排一次顺序。
               (2)不可以增长长度,有空间限制,当需要存取的元素个数可能多于顺序表的元素个数时,会出现"溢出"问题.当元素个数远少于预先分配的空间时,空间浪费巨大。  
         时间性能 :查找 O(1) ,插入和删除O(n)。
    
    链表存储
    原理:链表存储是在程序运行过程中动态的分配空间,只要存储器还有空间,就不会发生存储溢出问题,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点关系间的指针。
        优点:(1)存取某个元素速度慢。 
              (2)插入和删除速度快,保留原有的物理顺序,比如:插入或者删除一个元素时,只需要改变指针指向即可。
              (3)没有空间限制,存储元素的个数无上限,基本只与内存空间大小有关. 
        缺点:(1)占用额外的空间以存储指针(浪费空间,不连续存放,malloc开辟,空间碎片多) 
              (2)查找速度慢,因为查找时,需要循环链表访问,需要从开始节点一个一个节点去查找元素访问。
        时间性能 :查找 O(n) ,插入和删除O(1)。 
    
  2. 用两个栈实现一个队列

设有两个栈S1,S2
入队操作:
	判断栈S1是否为空,为空则可以执行入队操作,即所有数据入栈S1
出队操作:
	所有数据出栈S1,入栈S2,然后出栈S2
  1. 用两个队列实现一个栈

    设有两个队列Q1,Q2
    入栈操作:
    	判断两个队列是否为空,为空则可以执行入栈操作,即所有数据入队Q1
    出栈操作:
    	Q1(Q2)中的数据除最后一个全部出队入队列Q2(Q1),留在Q1中最后一个数据是将要出栈的数据,依次类推直到所有c数据出栈
    
  2. 已知某二叉树的前序遍历为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. 简述快速排序过程

    1)选择一个基准元素,通常选择第一个元素或者最后一个元素,
    2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的元素值比基准值大。
    3)此时基准元素在其排好序后的正确位置
    4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。
    
  2. 设一组初始记录关键字序列为(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

  3. 解决哈希冲突的方法

    哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。

    1) 线性探测法

    2) 平方探测法

    3) 伪随机序列法

    4) 链地址法

  4. 设散列表的长度为10,散列函数H(n)=n mod 7,初始关键字序列为 (33,24,8,17,21,10),用链地址法作为解决冲突的方法,平均查找长度是( B )。

    A) 1 B) 1.5 C) 2 D) 2.5

猜你喜欢

转载自blog.csdn.net/bentao1997719/article/details/124934096