day21—选择题

文章讨论了有序单链表插入节点保持有序的时间复杂度,栈和队列的操作要求,完全二叉树的性质,以及错误的叙述识别。同时涵盖了二叉排序树、哈夫曼树、AVL树和堆的特性,并探讨了提高散列表查找效率的方法,以及堆排序的过程和不同排序算法的最坏情况时间复杂度比较。
摘要由CSDN通过智能技术生成

1. 设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度(D)

A O(log2n)
B O(1)
C O(n2)
D O(n)

思路:时间复杂度考虑最坏情况:原单链表为2->3->4->5,现在要求插入1,如果采用尾插法,插入后的结果就是2->3->4->5->1,就需要把1向前移动N次

2.设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次压入栈S,一个元素出栈后即进入队列Q,若出队列的顺序为e2,e4,e3,e6,e5,e1则栈S的容量要求最小值为(B)

A 2
B 3
C 4
D 5

思路:栈:先进后出;队列:先进先出

3.在具有 2n 个结点的完全二叉树中,叶子结点个数为(A)

A n
B n+1
C n-1
D n/2

思路:当完全二叉树的结点的个数为偶数的时候,度为1的节点的的个数为1;二叉树的结点个数 = 叶子结点的个数 + 度为1的结点的个数 + 度为2的结点的个数; 叶子结点的个数 = 度为2的结点的个数 + 1;本题中,n1 = 1;2n = n0 + n1 + n2;n0 = n2 + 1;联合三个式子可知n0 = n

4.下列叙述中错误的是(B )

A 二叉链表是二叉树的存储结构
B 循环链表是循环队列的存储结构
C 栈是线性结构
D 循环队列是队列的存储结构

思路:二叉链表可以看做是Node left和Node right;循环队列使用的是数组;

5.下述二叉树中,哪一种满足性质:从任一结点出发到根的路径上所经过的结点序列按其关键字有序(D)

A 二叉排序树
B 哈夫曼树
C AVL树
D 堆

思路:AVL数是平衡二叉搜索树,左右子树的高度差小于等于 1并且每一棵子树也是一棵平衡二叉搜索树,要保证左树小于根结点,右树大于根结点;哈夫曼树是带权值的数(与元素大小顺序无关);对于堆,以大根堆为例,堆满足根结点大于左右孩子;所以以大根堆的任意一个节点走到根结点都是一个递增的序列

6.为提高散列(Hash)表的查找效率,可以采取的正确措施是( D)

Ⅰ.增大装填(载)因子
Ⅱ.设计冲突(碰撞)少的散列函数
Ⅲ.处理冲突(碰撞)时避免产生聚集(堆积)现象
A 仅Ⅰ
B 仅Ⅱ
C 仅Ⅰ、 Ⅱ
D 仅Ⅱ、 Ⅲ

思路:Ⅰ会增加元素冲突,使得查找变慢

7.将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是(C)

A 2-6-3-5-4-1-7
B 6-2-3-5-4-1-7
C 6-5-3-2-4-1-7
D 1-4-7-5-6-3-2

思路:按照堆排序的方式原地进行升序排列是将堆顶元素和最后一个元素进行交换,再将剩下的元素向下调整为一个大堆,下图为第一轮调整后的结果
在这里插入图片描述

8.下列各排序法中,最坏情况下的时间复杂度最低的是(C )

A 希尔排序
B 快速排序
C 堆排序
D 冒泡排序

思路:希尔排序是直接插入排序的优化,它的时间复杂度和函数有关,大概是在O(N ^ 1.3)—O(N ^ 1.5);快速排序的时间复杂度,最坏情况是O(N^2),最好情况是O(NlogN);堆排序的时间复杂度为O(NlogN);冒泡排序的时间复杂度,最坏情况是O(N ^2);最好情况是O(N)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值