对n个记录的线性表进行快速排序为减少算法的递归深度,每次分区后,先处理较短的部分
对于长度为无穷大的广义表,由于存储空间的限制,不能在计算机中实现
哈希表可以做范围检查
在(非空)广义表中:表头head可以是原子或者一个表,表尾tail一定是一个表
静态链表:数组的每一个下标都对应一个data和一个cur。数据域data用来存放数据元素,;而游标cur相当于单链表中的next指针,存放该元素的后继在数组中的下标。
若某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用(D)存储方式最节省运算时间。 A、单链表; B、仅有头指针的单循环链表; C、双链表;D、仅有尾指针的单循环链表
为了很方便的插入和删除数据,可以使用双向链表存放数据,因为在双向链表中,我们可以直接删除当前指针所指向的节点。而不需要像单向链表中,删除一个元素必须找到其前驱。因此在插入数据时,单向链表和双向链表操作复杂度相同,而删除数据时,双向链表的性能优于单向链表
判断一个单向链表中是否存在环的最佳方法是快慢指针,让快慢指针都从链表表头开始,快指针一次向前移动连个位置,慢指针每次向前移动一个位置。如果快指针到达了NULL,说明不存在环,但如果快指针追上了慢指针,说明存在环。
单链表中,增加一个头结点的目的是为了方便运算的实现,其好处有: (1) 对带头结点的链表,在表的任何结点之前插入结点或删除表中任何结点,所要做的都是修改前一结点的指针域,因为任何元素结点都有前驱结点。若链表没有头结点,则首元素结点没有前驱结点,在其前插入结点或删除该结点时操作会复杂些。 (2) 对带头结点的链表,表头指针是指向头结点的非空指针,因此空表与非空表的处理是一样的。
设一个链表最常用的操作是在末尾插入结点和删除尾结点,则选用(D)最节省时间 A、单链表 B、单循环链表 C、带尾指针的单循环链表 D、带头结点的双循环链表
集合与线性表的区别是是否允许元素重复,集合不允许元素重复,线性表允许元素重复
随着装填因子a的增大,用闭哈希法解决冲突,其平均搜索长度比用开哈希法解决冲突时的平均搜索长度增长得慢()错
开哈希表-------链式地址法 闭哈希表-------开放地址法 装填因子增大,意味着哈希表的空间利用率在增大。开哈希和闭哈希主要的区别在于,随着哈希表的密集度提高,使用闭哈希时,不仅会与相同哈希值的元素发生冲突,还容易与不同哈希值的元素发生冲突;而开哈希则不受哈希表疏密与否的影响,始终只会与相同哈希值的元素冲突而已。所以在密集度变大的哈希表中查找时,显然开哈希的平均搜索长度不会增长。
常用构造散列函数的方法有:直接定址法,数字分析法,折叠法,平方取中法,乘余取整法、减去法,基数转换法,除留余数法,随机乘数法,字符串数值哈希法,旋转法,伪随机数法。
采用线性探测法处理散列时的冲突,当从哈希表删除一个记录时,不应将这个记录的所在位置置空,因为这会影响以后的查找
以下哪个不属于单向哈希表的特征(B)
A、它把任意长度的信息转换成固定的长度输出
B、它把固定的信息转换成任意长度信息输出
C、根据特定的哈希值,它可以找到对应的原信息值
D、不同的信息很难产生一样的哈希值
常见哈希冲突解决办法:
1.开放地址法 2.线性探测法 3.链地址法(拉链法) 4.二次探测法 5.伪随机探测法 6.再散列(双重散列,多重散列) 7.建立一个公共溢出区
单旋转法是建立散列函数的一种方法,将最后一位数,旋转放置到第一位
常见的散列函数有,直接定址法,数字分析法,平法取中法,取余法,折叠法,随机法
数据结构之表相关
最新推荐文章于 2020-11-20 10:35:57 发布