`

数据结构的基本知识及常见试题

阅读更多

1、什么是强连通图:一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次。

2、将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为
将10阶对称矩阵压缩存储到一维数组A中,则数组A的长度最少为( C )。
(A) 100 (B) 40 (C) 55 (D) 80
解答:((100-10)/2)+10

3、什么是堆

堆是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左孩子和右孩子节点的值。

4、写代码,反转一个单链表,分别以迭代和递归的形式来实现

 

typedef struct node LinkNode;  
struct node  
{  
    int data;  
    LinkNode* next;  
};  
// 返回新链表头节点  
LinkNode *reverse_link(LinkNode *head)  
{  
    if(head == NULL)  
        return NULL;  
    LinkNode *prev , *curr , *reverse_head , *temp;  
    prev = NULL , curr = head;  
    while(curr->next)  
    {  
        temp = curr->next;  
        curr->next = prev;  
        prev = curr;  
        curr = temp;  
    }  
    curr->next = prev;  
    reverse_head = curr;  
    return reverse_head;  
}  
  
LinkNode *reverse_link_recursive(LinkNode *head)  
{  
    if(head == NULL)  
        return NULL;  
    LinkNode *curr , *reverse_head , *temp;  
    if(head->next == NULL)    // 链表中只有一个节点,逆转后的头指针不变  
        return head;  
    else  
    {  
        curr = head;  
        temp = head->next;    // temp为(a2,...an)的头指针  
        reverse_head = reverse_link_recursive(temp);   // 逆转链表(a2,...an),并返回逆转后的头指针  
        temp->next = curr;    // 将a1链接在a2之后  
        curr->next = NULL;  
    }  
    return reverse_head;      // (a2,...an)逆转链表的头指针即为(a1,a2,...an)逆转链表的头指针  
}  

 

5、简述什么是hashtable,如何解决hash冲突?

哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。


哈希函数(Hash Function)为根据索引键来返回数值哈希程序代码的算法。索引键(Key)是被存储对象的某些属性值(Value)。当对象加入至Hashtable时,它存储在与对象哈希程序代码相符的哈希程序代码相关的Bucket中。当在Hashtable内搜寻值时,哈希程序代码会为该值产生,并且会搜寻与该哈希程序代码相关的Bucket。例如,student和teacher会放在不同的Bucket中,而dog和god会放在相同的Bucket中。所以当索引键是唯一从Hashtable获取元素的性能时表现会较好。Hash的四大优点如下所示。
事先不需要排序。
搜寻速度与数据多少无关。
数字签名的密码技术保密性(Security)高。
可做数据压缩(Data Compression),以节省空间。

 

1、开放定址法
 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探查(亦称探测)技术在散列表中形成一个探查(测)序列。沿此序列逐个单元地查找,直到找到给定 的关键字,或者碰到一个开放的地址(即该地址单元为空)为止(若要插入,在探查到开放的地址,则可将待插入的新结点存人该地址单元)。查找时探查到开放的 地址则表明表中无待查的关键字,即查找失败。
注意:
①用开放定址法建立散列表时,建表前须将表中所有单元(更严格地说,是指单元中存储的关键字)置空。
②空单元的表示与具体的应用相关。
 按照形成探查序列的方法不同,可将开放定址法区分为线性探查法、线性补偿探测法、随机探测等。
(1)线性探查法(Linear Probing)
该方法的基本思想是:
将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为:
d,d+l,d+2,…,m-1,0,1,…,d-1
 即:探查时从地址d开始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1],此后又循环到T[0],T[1],…,直到探查到 T[d-1]为止。
探查过程终止于三种情况:
 (1)若当前探查的单元为空,则表示查找失败(若是插入则将key写入其中);
(2)若当前探查的单元中含有key,则查找成功,但对于插入意味着失败;
 (3)若探查到T[d-1]时仍未发现空单元也未找到key,则无论是查找还是插入均意味着失败(此时表满)。
利用开放地址法的一般形式,线性探查法的探查序列为:
hi=(h(key)+i)%m 0≤i≤m-1 //即di=i
用线性探测法处理冲突,思路清晰,算法简单,但存在下列缺点:
① 处理溢出需另编程序。一般可另外设立一个溢出表,专门用来存放上述哈希表中放不下的记录。此溢出表最简单的结构是顺序表,查找方法可用顺序查找。
② 按上述算法建立起来的哈希表,删除工作非常困难。假如要从哈希表 HT 中删除一个记录,按理应将这个记录所在位置置为空,但我们不能这样做,而只能标上已被删除的标记,否则,将会影响以后的查找。
③ 线性探测法很容易产生堆聚现象。所谓堆聚现象,就是存入哈希表的记录在表中连成一片。按照线性探测法处理冲突,如果生成哈希地址的连续序列愈长 ( 即不同关键字值的哈希地址相邻在一起愈长 ) ,则当新的记录加入该表时,与这个序列发生冲突的可能性愈大。因此,哈希地址的较长连续序列比较短连续序列生长得快,这就意味着,一旦出现堆聚 ( 伴随着冲突 ) ,就将引起进一步的堆聚。
(2)线性补偿探测法
线性补偿探测法的基本思想是:
将线性探测的步长从 1 改为 Q ,即将上述算法中的 j = (j + 1) % m 改为: j = (j + Q) % m ,而且要求 Q 与 m 是互质的,以便能探测到哈希表中的所有单元。
【例】 PDP-11 小型计算机中的汇编程序所用的符合表,就采用此方法来解决冲突,所用表长 m = 1321 ,选用 Q = 25 。
2、拉链法
(1)拉链法解决冲突的方法
 拉链法解决冲突的做法是:将所有关键字为同义词的结点链接在同一个单链表中。若选定的散列表长度为m,则可将散列表定义为一个由m个头指针组成的指针数 组T[0..m-1]。凡是散列地址为i的结点,均插入到以T[i]为头指针的单链表中。T中各分量的初值均应为空指针。在拉链法中,装填因子α可以大于 1,但一般均取α≤1。
【例】设有 m = 5 , H(K) = K mod 5 ,关键字值序例 5 , 21 , 17 , 9 , 15 , 36 , 41 , 24 ,按外链地址法所建立的哈希表如下图所示:

(2)拉链法的优点
与开放定址法相比,拉链法有如下几个优点:
①拉链法处理冲突简单,且无堆积现象,即非同义词决不会发生冲突,因此平均查找长度较短;
②由于拉链法中各链表上的结点空间是动态申请的,故它更适合于造表前无法确定表长的情况;
③开放定址法为减少冲突,要求装填因子α较小,故当结点规模较大时会浪费很多空间。而拉链法中可取α≥1,且结点较大时,拉链法中增加的指针域可忽略不计,因此节省空间;
④在用拉链法构造的散列表中,删除结点的操作易于实现。只要简单地删去链表上相应的结点即可。而对开放地址法构造的散列表,删除结点不能简单地将被删结 点的空间置为空,否则将截断在它之后填人散列表的同义词结点的查找路径。这是因为各种开放地址法中,空地址单元(即开放地址)都是查找失败的条件。因此在 用开放地址法处理冲突的散列表上执行删除操作,只能在被删结点上做删除标记,而不能真正删除结点。

(3)拉链法的缺点
 拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间用来扩大散列表的规模,可使装填因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度。

 

分享到:
评论

相关推荐

    苏大872计算机-苏州大学《数据结构》20卷试真题库+答案.rar

    苏州大学《数据结构》20卷试真题库是一本涵盖数据结构基础知识、经典算法、应用实践等方面的试题集合,适用于计算机科学、计算机工程、软件工程等专业的学生以及从事计算机算法开发的程序员。本书以数据结构和算法为...

    数据库系统工程师教程及历年考试(2004年~2010年)试题

    (一) 试题范围:2004年上半年——2010年下半年 (二)参考书信息:--书清晰度一般,可看 1、本书为全国计算机技术与软件专业技术资格(水平)考试指南 2、版次为2004年7月第一版 ...第16章 标准化基础知识

    零基础学算法戴艳源码

    本书分为上、下两篇,共10章,上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,...

    零基础学算法 第3版 高清扫描版 pdf

    上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,包括解决数学问题、数据结构问题...

    零基础学算法(第3版)(带目录高清版)

    上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,包括解决数学问题、数据结构问题...

    零基础学算法第三版

    上篇用5章的篇幅介绍了算法和数据结构的基础知识,包括基础算法思想、简单数据结构、复杂数据结构、排序和查找算法等内容;下篇用5章的篇幅介绍了用数据结构解决实际问题的相关程序,包括解决数学问题、数据结构问题...

    互联网公司资料整理及面试资料.zip

    这份互联网校招试题资料包含了各个互联网公司常见的笔试面试题目,涵盖了计算机基础知识、编程语言、数据结构与算法、操作系统、网络通信等多个方面。这些试题旨在考察求职者的专业知识水平和解决问题的能力,是...

    互联网技术岗-笔试面试题集合.zip

    这份互联网校招试题资料包含了各个互联网公司常见的笔试面试题目,涵盖了计算机基础知识、编程语言、数据结构与算法、操作系统、网络通信等多个方面。这些试题旨在考察求职者的专业知识水平和解决问题的能力,是...

    中国移动最新最全笔试复习资料大全.zip

    移动笔试知识点之--(通信类)接入网的基本概念与基础知识 移动笔试知识点之--(通信类)宽带网接入技术知识点整理 移动笔试知识点之--(通信类)通信基础知识 移动笔试知识点之--(通信类)通信网优试题题库 移动...

    2024年非常全面的100道Python常见基础面试题

    本教程包含了100个常见的Python面试题,涵盖Python基础知识、高级特性、网络编程、数据库操作、数据结构和算法等多个方面。每个问题都提供了详细的解析,帮助面试者更好地准备Python面试。 适用人群: 本教程适合...

    计算机基础知识多选.doc

    计算机基础知识(多选) 题号:1 题型:多选题 难度:2 内容:下列说法中,正确的是()。 试题选项: A、一个汉字用1个字节表示 B、在微机中,使用最普遍的字符编码是ASCII码 C、高级语言程序可以编译为目标程序 D、...

    计算机基础知识(多选).doc

    计算机基础知识(多选) 题号:1 题型:多选题 难度:2 内容:下列说法中,正确的是()。 试题选项: A、一个汉字用1个字节表示 B、在微机中,使用最普遍的字符编码是ASCII码 C、高级语言程序可以编译为目标程序 D、...

    c语言实例解析精粹

    本书共分8篇,分别为基础篇、数据结构篇、数值计算与趣味数学篇、图形篇、系统篇、常见试题解答篇、游戏篇和综合实例篇,汇集了近200个实例,基本涵盖了目前C语言编程的各个方面。  书中以具体的实例为线索,特别...

    【精品资料】电源物料电源设计知识大全.zip

    电容的基础知识 电容知识大全 电子元件基础 电子元件基础教程 电子元件认识 电阻的基础知识 電容器 電阻 二极管 三极管 MOS器件基本原理 公母座 绝缘类器件 开关器件 散熱片 塑膠CASE 线材 压敏电阻型号及电感计算...

    Java面试宝典5.0And6.0.zip

    该宝典系统地整理了Java初级,中级,高级的基础知识,代码质量,解题思路,优化效率等面试要点,面试的基础知识从编程语言,数据结构及算法三方面总结程序员面试知识点,世间事,很多都可投机取巧,但技术却必须靠日积月累的...

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料.zip

    JAVA面试基础知识点总结.docx Java面试笔记.docx 写出正则表达式,从一个字符串中提取链接地址.docx 出现几率最高和覆盖范围最广的一套经典Java面试题.docx 最新Java编程面试题全集(共50道题+答案).docx 遇到的...

    C语言实例解析精粹_曹衍龙(PDF)(含程序实例代码)

    本书共分8篇,分别为基础篇、数据结构篇、数值计算与趣味数学篇、图形篇、系统篇、常见试题解答篇、游戏篇和综合实例篇,汇集了近200个实例,基本涵盖了目前C语言编程的各个方面。  书中以具体的实例为线索,特别...

    《C语言实例解析精粹第二版》源码

    共分8篇,以“基础篇→数据结构篇→数值计算与趣味数学篇→图形篇→系统篇→常见试题解答篇→游戏篇→综合实例篇”具体展开,共汇集220个实例,基本涵盖了目前C语言编程的各个方面。书中以具体的实例为线索,特别...

    C语言实例解析精粹

    本书共分 8 篇,分别为基础篇、数据结构篇、数值计算与趣味数学篇、图形篇、系统篇、常见试题解答篇、游戏篇和综合实例篇,汇集了近 200 个实例,基本涵盖了目前C 语言编程的各个方面。 书中以具体的实例为线索,...

Global site tag (gtag.js) - Google Analytics