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)拉链法的缺点
拉链法的缺点是:指针需要额外的空间,故当结点规模较小时,开放定址法较为节省空间,而若将节省的指针空间用来扩大散列表的规模,可使装填因子变小,这又减少了开放定址法中的冲突,从而提高平均查找速度。
相关推荐
数据结构是计算机科学中的核心课程之一,主要研究如何在计算机中高效地组织和管理数据,以便进行快速...北京邮电大学的历年数据结构期末试题提供了一个良好的学习和复习平台,帮助学生巩固理论知识,提高实际应用能力。
在试题中,可能会考察这些基本数据结构的定义、操作以及它们在实际问题中的应用。例如,栈和队列在算法中的作用(如回溯法、深度优先搜索、广度优先搜索),二叉树的遍历(前序、中序、后序)及其性质,图的深度优先...
在中国海洋大学的数据结构课程中,学生需要掌握这些基本概念和算法,以应对期末考试,如A卷所示。这份试题旨在检验学生的理论知识和实践应用能力。 数据结构主要分为两大类:线性结构和非线性结构。线性结构包括...
通过这份试题集,学习者可以深入理解数据结构的各个方面,巩固理论知识,提升编程技能,尤其对于准备考研或期末考试的学生来说,是宝贵的复习资源。记得在完成练习后,及时核对答案,以检验自己的理解和掌握程度。...
这个压缩包“数据结构1800试题 软考必备品”显然是为考生提供了一份丰富的练习资源,包含了1800道数据结构相关的试题,旨在帮助他们全面理解和熟练应用数据结构的基本概念、方法和技术。 首先,数据结构主要涉及...
这份“知名公司笔试中常见数据结构试题”文档很可能包含了各种类型的数据结构问题,旨在测试应聘者的逻辑思维、算法设计以及问题解决能力。下面,我们将深入探讨这些关键知识点。 1. **数组**:是最基本的数据结构...
自考数据结构试题大收集是一份非常宝贵的资源,包含了从2001年至2008年间多个不同时间点的自学考试数据结构试题及部分答案,为备考者提供了全面的复习材料。 1. **数据结构的基本概念**:在学习数据结构时,首先要...
本资源“数据结构1800道试题及答案.rar”提供了丰富的学习材料,对于正在学习或准备考试的学生来说是一份极其宝贵的参考资料。 1. **链表**:数据结构的基础之一,包括单链表、双链表、循环链表等,主要涉及节点的...
本压缩包"数据结构 数据结构1800试题及答案.rar"提供了丰富的资源,包括1800道数据结构相关的习题和它们的答案,对于学习者来说是一份宝贵的资料。下面我们将深入讨论数据结构的一些关键概念和知识点。 1. **数组**...
这些知识点在“数据结构1800试题及答案”中会通过各种形式的题目来考察,如填空、选择、简答和编程题,通过大量练习,不仅可以巩固理论知识,还能提升实际问题解决能力。这份资料对于准备面试、期末考试或自我提升的...
根据提供的文件信息,“02331数据结构202010试题及答案.pdf”主要涉及的是关于数据结构这门课程的自学考试题目及其答案。由于提供的具体内容中并未包含实际的试题内容,这里将围绕数据结构这一主题展开,探讨其中的...
北京信息科技大学的数据结构试题集可能包含以上各方面的题目,旨在检验学生对基本概念的理解、算法的实现能力以及解决问题的思维能力。通过深入学习和解答这些试题,学生可以巩固所学知识,提高分析和解决实际问题的...
数组是最基础的数据结构,允许随机访问但插入和删除操作较慢;链表则在内存中非连续存储,适合频繁的插入和删除;栈是后进先出(LIFO)的数据结构,常用于函数调用和表达式求值;队列是先进先出(FIFO)结构,适用于...
综上所述,数据结构和程序设计是计算机科学中的两个核心领域,它们不仅对于考研考生来说非常重要,也是所有从事软件开发工作的人员必备的基础知识。通过系统地学习这些内容,不仅可以提高解决实际问题的能力,还能为...
同时,严蔚敏版的数据结构讲义是经典教材,复习重点归纳和试题精选及答案则为实践和检验提供了很好的资源。在复习过程中,结合实例和练习,将理论知识与实际问题相结合,可以更好地掌握和运用这些概念。
总的来说,通过中南大学历年数据结构期末试题的复习,学生可以全面掌握数据结构的基本概念、操作和高级技巧,为未来的学习和职业生涯打下坚实的基础。无论是对于提升编程技能,还是对于理解计算机系统的工作原理,...
北京科技大学2002年的数据结构考研试题及答案,会综合测试考生对上述知识点的理解和应用能力。通过深入分析和解答这些试题,可以提升对数据结构理论的掌握,为实际编程和算法设计打下坚实基础。同时,考生还应关注...
在郑州大学远程教育学院的《数据结构》课程中,学生需要掌握一系列关键概念和技能,包括数据结构的基本概念、术语,以及各种数据结构如线性表、栈、队列、串、树和图的操作和特性。 线性表是最基础的数据结构之一,...