77范文网 - 专业文章范例文档资料分享平台

数据结构习题集及参考答案(重要)(7)

来源:网络收集 时间:2018-12-21 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

③ 冲突处理 ④ 散列函数和冲突处理

三、算法设计题

1. 若线性表中各结点的查找概率不等,则可用如下策略提高顺序查找的效率,若找到指定结点则将该结点和

其前驱结点(如果存在)交换。设计在顺序存储结构上实现上述策略的顺序查找算法。 2. 设计在链式存储结构上建立二叉排序树的算法。 3. 设计判断一棵二叉树是否为二叉排序树的算法。 4. 设计指定结点在二叉排序树中所在层次的算法。

5. 设散列表采用线性探测解决冲突,设计在散列表中查找指定关键字的算法。 6. 设散列表采用链地址法解决冲突,设计在散列表中查找指定关键字的算法。

31

第八章参考答案

一、填空题

1. 1,2,4,8,5,3.7 2. 6.5,37/12 3. 9

4. 索引表,块,和

5. O(n),O(log2n),O(n1/2) 6. 大于等于,n/m,大,小 7. 开放定址法,链地址法 8. 16/9,13/9

9. O(log2n),O(log2n) 10. 中序 11. 25

12. n(n-1)/2

分析:关键字k1需要0次,k2需要1次,k3需要2次,?,kn需要n-1次,则总共需要n(n-1)/2次。

二、选择题 1. (3) 2. (2) 3. (2) 4. (2) 5. (4)

三、算法设计题

1. 若线性表中各结点的查找概率不等,则可用如下策略提高顺序查找的效率,若找到指定结点则将该结点和

其前驱结点(如果存在)交换。设计在顺序存储结构上实现上述策略的顺序查找算法。 int sqsearch(int a[n],int x) {

for(i=0;i<=n-1;i++)

if (a[i]==x){t=a[i];a[i]=a[i-1];a[i-1]=t; return(i);} return(0); }

2. 设计在链式存储结构上建立二叉排序树的算法。

分析:建立二叉排序树的过程实际上就是在空二叉排序树的基础上不断插入新结点的过程,因此本算法主要部分是在二叉排序树上插入结点的算法。

void bstinsert(bitree *&bt,int key) {

if (bt==0){bt=(bitree *)malloc(sizeof(bitree)); bt->key=key;bt->lchild=bt->rchild=0;} else if (bt->key>key) bstinsert(bt->lchild,key); else bstinsert(bt->rchild,key); }

void createbsttree(bitree *&bt) {

int i;

for(i=1;i<=n;i++) bstinsert(bt,random(100)); }

3. 设计判断一棵二叉树是否为二叉排序树的算法。

32

分析:根据二叉排序树的特性可知中序遍历二叉排序树可以得到一个有序的序列,因此本算法的思想是根据中序遍历时前驱结点的值(根结点的前驱结点值可设置为机内最小的整数)是否小于等于当前结点的值来判断是否是二叉排序树。

int minnum=-32768,flag=1;

typedef struct node{int key; struct node *lchild,*rchild;}bitree; void inorderjudge(bitree *bt) {

if (bt!=0) {

inorderjudge(bt->lchild);

if(minnum>bt->key)flag=0; minnum=bt->key; inordergudge(bt->rchild); } }

4. 设计指定结点在二叉排序树中所在层次的算法。

分析:本题的算法思想是在查找的过程中记录下结点所在的层次,当到某个结点的左子树或右子树中查找时则层数加1,如果找到结点则改变标志变量flag的值并返回。

typedef struct node{int key; struct node *lchild,*rchild;}bitree; int lev=0,flag=0;

void level(bitree *bt,int x) {

if (bt!=0) {

lev++;

if (bt->key==x) {flag=1;return;}

else if (bt->key>x) level(bt->lchild,x); else level(bt->rchild,x); } }

5. 设散列表采用线性探测解决冲突,设计在散列表中查找指定关键字的算法。

struct record {int key; int flag;};

int hashsqsearch(struct record hashtable[ ],int k) {

int i,j; j=i=k % p;

while (hashtable[j].key!=k && hashtable[j].flag!=0 ){j=(j+1)%m; if (i==j) return(-1);} if (hashtable[j].key==k) return(j); else return(-1); }

6. 设散列表采用链地址法解决冲突,设计在散列表中查找指定关键字的算法。

typedef struct node {int key; struct node *next;} lklist; lklist *hashlksearch(lklist *hashtable[ ],int k) {

int i=k % p; lklist *s;

for(s=hashtable[i]->next; s!=0; s=s->next) if (s->key==k) return(s); return(0); }

33

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据结构习题集及参考答案(重要)(7)在线全文阅读。

数据结构习题集及参考答案(重要)(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/380529.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: