首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列函数说明、图和C代码,将应填入(n)处的字句。 [说明] 散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放
阅读下列函数说明、图和C代码,将应填入(n)处的字句。 [说明] 散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放
admin
2008-01-15
31
问题
阅读下列函数说明、图和C代码,将应填入(n)处的字句。
[说明]
散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放到另一个称为“溢出桶”的桶中。相对地,称存放前m个同义词的桶为“基桶”。溢出桶和基桶大小相同,用指针链接。查找指定元素记录时,首先在基桶中查找。若找到,则成功返回,否则沿指针到溢出桶中进行查找。
例如:设散列函数为Hash(Key)=Key mod 7,记录的关键字序列为15,14,21,87,97,293,35,24,149,19,63,16,103,77,5,153,145,356,51,68,705,453,建立的散列文件内容如图4-1所示。
[图4-1]
为简化起见,散列文件的存储单位以内存单元表示。
函数InsertToHashTable(int NewElemKey)的功能是:将元素NewEIemKey插入散列桶中,若插入成功则返回0,否则返回-1。
采用的散列函数为Hash(NewElemKey)=NewElemKey % P,其中P为设定的基桶数目。
函数中使用的预定义符号如下:
#define NULLKEY -1 /*散列桶的空闲单元标识*/
#define P 7 /*散列文件中基桶的数目*/
#define ITEMS 3 /*基桶和溢出桶的容量*/
typedef struct BucketNode{ /*基桶和溢出桶的类型定义*/
int KcyData[ITEMS];
struct BucketNode *Link;
}BUCKET;
BUCKET Bucket[P]; /*基桶空间定义*/
[函数]
int lnsertToHashTable(int NewElemKey){
/*将元素NewElemKey插入散列桶中,若插入成功则返回0,否则返回-1*/
/*设插入第一个元素前基桶的所有KeyData[]、Link域已分别初始化为NULLKEY、
NULL*/
int Index; /*基桶编号*/
int i,k;
BUCKET *s,*front,*t;
(1) ;
for(i=0; i<ITEMS;i++)/*在基桶查找空闲单元,若找到则将元素存入*/
if(Bucket[Index].KeyData
=NULLKEY){
Bucket[Index].KeyData
=NewElemKey; break;
}
if( (2) ) return 0;
/*若基桶已满,则在溢出桶中查找空闲单元,若找不到则申请新的溢出桶*/
(3) ; t=Bucket[Index].Link;
if(t!=NULL) {/*有溢出桶*/
while (t!=NULL){
for(k=0; k<ITEMS; k++)
if(t->KeyData[k]=NULLKEY){/*在溢出桶链表中找到空闲单元*/
t->KeyData[k]=NewElemKey; break;
}/*if*/
front=t;
if( (4) )t=t->Link;
else break;
}/*while*/
}/*if*/
if( (5) ) {/*申请新溢出桶并将元素存入*/
s=(BUCKET*)malloe(sizeof(BUCKET));
if(!s) return-1;
s->Link=NULL;
for(k=0; k<ITEMS; k++)
s->KeyData[k]=NULLKEY;
s->KeyData[0]=NewElemKey;
(6) ;
}/*if*/
return 0;
}/*InsertToHashTable*/
选项
答案
(1) Index=NewElemKey % P (2) i<ITEMS (3) front=&Bucket[Index] (4) k==ITEMS (5) t==NULL,或!t (6) front->Link=s
解析
本题考查元素的散列存储。
元素作散列存储时,首先用设定的散列函数计算元素的存储位置。在本题中,将元素存储在预先设定的基桶或根据需要申请的溢出桶中,只要基桶中有空闲单元,就将新元素NewElemKey插入在基桶中,若基桶中无空闲单元,则看是否存在溢出桶,若存在,则在溢出桶中查找空闲单元,若不存在溢出桶或溢出桶中无空闲单元,则申请一个溢出桶并存入新元素。
在基桶查找空闲单元时使用的桶号为Index,可知空(1)处应填入“Index= NewElemKey % P”。显然,一旦在基桶中找到空闲单元,即“Bucket[Index].KeyData
== NULLKEY”(0≤i<ITEMS),则可将元素NewElemKey放入Bucket[Index].KeyData
,至此元素已经插入散列桶中,函数可返回,因此空(2)处应填入“i<ITEMS”;反之,若在基桶中没有找到空闲单元,则需查找溢出桶。“t=Bucket[Index].Link”,指针t首先指向桶号Index的第一个溢出桶。下面的代码即为在溢出桶中查找空闲单元。
if(t!=NULL) {/*有溢出桶*/
while(t!=NULL){
for(k=0; k<ITEMS;k++)
if(t->KeyData[k]==NULLKEY){/*在溢出桶链表中找到空闲单元*/
t->KeyData[k]=NewElemKey; break;
}/*if*/
front=t;
if((4))t=t->Link;
else break;
}/*while*/
}/*if*/
由于每个溢出桶都可以存储ITEMS个元素,所以在溢出桶中查找空闲单元与在基桶中的查找过程相同,代码如下。
for(k=0;k<ITEMS;k++)
if(t->KcyData[k]==NULLKEY){/*在溢出桶链表中找到空闲单元*/
t->KeyData[k]=NewElemKey; break;
}/*if*/
若在指针t指向的溢出桶中找到空闲单元则插入元素,否则,由“t=t->Link”得到下一个溢出桶的指针,因此“k<ITEMS”可作为是否在当前溢出桶中找到空闲单元的判定条件。
显然,在桶号Index的基桶和其所有溢出桶都已满的情况下,t的值为空指针。此时才需要申请新的溢出桶并建立链接关系,因此在上面查找溢出桶中空闲单元时,进行指针t的后移“t=t->Link”前应先用front记录t的值,以便于后面建立链接关系。所以空(3)处应给front置初值,即“front=&Bucket[Index]”,空(4)填入“k==ITEMS”,空(5)填入“t=NULL”。空(6)处建立新申请溢出桶的链接关系“front->Link=s”。
转载请注明原文地址:https://jikaoti.com/ti/ghi7FFFM
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
在系统转换的过程中,旧系统和新系统并行工作一段时间,再由新系统代替旧系统的策略称为(20);在新系统全部正式运行前,一部分一部分地代替旧系统的策略称为(21)。
下列测试工具中,使用(68)执行自动化负载压力测试,使用(69)执行代码静态结构分析,使用(70)执行网络测试。
设关系模式R(A,B,C),传递依赖指的是(16);下列结论错误的是(17)。
以下控制流程图的环路复杂性V(G)等于(54)。
软件开发人员可以用(18)软件编写和修改程序。
以下关于软件质量特性测试的叙述,正确的是(44)。①成熟性测试是检验软件系统故障,或违反指定接口的情况下维持规定的性能水平有关的测试工作②功能性测试是检验适合性、准确性、互操作性、安全保密性、功能依从性的测试工作③易学性测试是
软件测试原则中指出“完全测试是不可能的”,主要原因是______。A.输入量太大、输出结果太多以及路径组合太多B.自动化测试技术不够完善C.测试的时间和人员有限D.仅仅靠黑盒测试不能达到完全测试
在C程序中,若表达式中的算术运算对象的类型不同,则需要先统一为相同类型后再进行计算。例如,表达式“a-b”中,若a是双精度浮点型变量,b是整型变量,为了尽可能保证运算精度,通常进行的处理是______。
在编译过程中,进行类型分析和检查是()阶段的一个主要工作。
造成故障1的原因是什么?如何解决?1.路由器2上采用了NAT技术。NAT中的动态地址翻译和IP地址伪装有什么区别?2.图4-2是路由器2上的地址伪装表,将图4-2中(1)~(5)处空缺的信息填写在相应位置。
随机试题
在一次家庭面谈中,孙女士向社会工作者老于数落了丈夫和儿子的很多不是,她还提出希望儿子能够改变学习习惯和提高学习成绩,希望丈夫能够多关心儿子的学习和教育。为帮助孙女士理清希望解决的问题,老于拟运用聚焦技巧进行提问,适宜的问法有()。
维生素A侧链上的双键数维生素A在以内经几次脱氢酶氧化生成维生素A酸
膈的外周为(),附着于体壁
A.毒蛋白B.强心苷C.皂苷D.汞E.内酯马桑的主要毒性成分是()。
2019年4月2日,甲公司设备部门在例行检查过程中发现1号发酵窑池有两台冷媒槽运行过程中存在渗漏问题,2019年4月5日,甲公司委托设备厂家乙公司对1号发酵窑池渗漏的冷媒管道系统进行改造。4月6日8时30分.乙公司工程师钱某带领施工人员到达1号发酵窑池(
北京市的城市道路系统属于以下()类型。
背景资料:某机电设备安装公司经邀请招标投标,获得某10000t/d水泥熟料生产线的机电设备安装工程的总承包资格,并与业主签订了施工合同。合同规定了工程范围、工期、质量标准、安全环境要求。其中质量标准和要求按部颁标准执行,主要材料如钢材、电缆、φ50以上的
[2000年MBA真题](1)一(2)题基于以下题干:所有安徽来京打工人员,都办理了暂住证;所有办理了暂住证的人员,都获得了就业许可证;有些安徽来京打工人员当上了门卫;有些业余武术学校的学员也当上了门卫;所有的业余武术学校的学员都未获得就业许可证。以下
Yourcoughwillgetworse______yougiveupsmoking.
【1】【4】
最新回复
(
0
)