没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
作业内容: 一、查找 1. 算法设计题 :已知n元顺序表a0, a1, … , an-1按关键字递增有序存储。给定关键字值key,编写算法用对分查找求下标i,满足ai-1<key且aikey。 2. 编程题:输入n个两两互不相等的整数,以这些整数为关键字建立平衡的二叉排序树。判断该二叉树是否为平衡的,输出判断结果;输出该二叉树的中序遍历关键字访问次序。 3. 从空树起连续插入以下20个关键字构建m=4的B-树。 50, 15, 09, 18, 03, 85, 33, 72, 48, 22, 91, 88, 11, 99, 06, 56, 68, 77, 43, 36。 4. 16个关键字组成的5阶B-树如下图所示,请按关键 字递减的次序删除所有结点至空树,画出每删除1个关键字后得到B-树,直至空树。
资源推荐
资源详情
资源评论
1 / 14
数据结构第 5 次作业
知识范畴:查找;排序
提交截止日期:2022 年 12 月 22 日
作业内容:
一、查找
1. 算法设计题 :已知 n 元顺序表 a
0
, a
1
, … , a
n-1
按关键字递增有序存储。给定关键字值 key,
编写算法用对分查找求下标 i,满足 a
i-1
<key 且 a
i
�key。
2. 编程题:输入 n 个两两互不相等的整数,以这些整数为关键字建立平衡的二叉排序树。判
断该二叉树是否为平衡的,输出判断结果;输出该二叉树的中序遍历关键字访问次序。
3. 从空树起连续插入以下 20 个关键字构建 m=4 的 B-树。
50, 15, 09, 18, 03, 85, 33, 72, 48, 22,
91, 88, 11, 99, 06, 56, 68, 77, 43, 36。
4. 16 个关键字组成的 5 阶 B-树如下图所示,请按关键
字递减的次序删除所有结点至空树,画出每删除 1 个关键字后得到 B-树,直至空树。
5. 12 个关键字如本电子教案例 1 所示,设 H(K)=K mod 13,地址空间范围 0~15,用二次探测
再散列解决冲突。画出哈希表;若各元素等概率查找,求成功查找时的平均查找长度。
二、内部排序
1. 算法设计与分析题:将直接插入排序的内循环改造为使用对分查找实现元素插入,请写
出基于对分查找的插入排序算法并给出其时间复杂度分析。
2. 算法设计:将教案给出的非递归直接插入排序和冒泡排序算法用递归算法实现。
3. 算法设计:带附加头结点单链表将各数据结点按关键字升序连接。
4. 编程题:键盘输入 n 个无符号整数,用链式基数排序实现由小到大排序,输出排序结果。
提示:对于 C 语言 32bit 宽的 unsigned 类型,可以采用 16 进制形式来实现基数排序,
即 32bit 共有 8 个 16 进制位,每个 16 进制位进行一趟分配和收集,共 8 趟。
一、1
40 50 60 70
12 20 25 28 43 46 51 57 63 66 74 79
评分
满分—3 分
2 / 14
int find(ElemTp* list,int key)
{
int head = 0,tail = n - 1;
while (head <= tail)
{
int mid = (head + tail) / 2;
if (list[mid - 1] < key && list[mid] >= key)
return mid;
if (list[mid] < key)
head = mid + 1;
else
tail = mid - 1;
}
return -1;
}
一、2
#include<iostream>
using namespace std;
typedef struct node
{
int data, bf; //数据,平衡因子
struct node* lchild = NULL, * rchild = NULL;
}Node;
Node* find(Node* bt, Node* a) //寻找 a 节点父亲
{
Node* pr = NULL, * p = bt;
while (p != a)
{
pr = p;
if (p->data > a->data)
p = p->lchild;
else
p = p->rchild;
}
return pr;
}
Node* insert(Node* bt, int data) //向以 bt 为根节点的树中添加结点
{
Node* last = bt, * pr = NULL, * p = bt, * q = new Node;
q->data = data;
q->bf = 0;
while (p != NULL)
{
pr = p;
if (p->bf != 0)
last = p;
if (data < p->data)
3 / 14
p = p->lchild;
else
p = p->rchild;
}
if (!pr) //前驱为空,插入结点根节点
return q;
if (data < pr->data) //将新节点 q 加入树
pr->lchild = q;
else
pr->rchild = q;
p = last;
while (p != q)
if (p->data > q->data) //插入左子树,平衡因子+1
{
p->bf++;
p = p->lchild;
}
else//插入右子树,平衡因子-1
{
p->bf--;
p = p->rchild;
}
if (last->bf == 2) //调整后平衡因子为 2
if (last->lchild->data > p->data) //LL 型
{
Node* A = last;
A->bf = 0;
Node* Afather = find(bt, A);
Node* B = A->lchild;
B->bf = 0;
A->lchild = B->rchild;
B->rchild = A;
if (!Afather) //A 为根结点
bt = B;
else
if (Afather->data > B->data)
Afather->lchild = B;
else
Afather->rchild = B;
}
else //LR 型
{
Node* A = last;
Node* Afather = find(bt, A);
Node* B = A->lchild;
剩余13页未读,继续阅读
资源评论
一梦三年777
- 粉丝: 4
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功