首页
外语
计算机
考研
公务员
职业资格
财经
工程
司法
医学
专升本
自考
实用职业技能
登录
计算机
阅读下列函数说明、图和C代码,将应填入(n)处的字句。 [说明] 散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放
阅读下列函数说明、图和C代码,将应填入(n)处的字句。 [说明] 散列文件的存储单位称为桶(BUCKET)。假如一个桶能存放m个记录,当桶中已有 m个同义词(散列函数值相同)的记录时,存放第m+1个同义词会发生“溢出”。此时需要将第m+1个同义词存放
admin
2008-01-15
51
问题
阅读下列函数说明、图和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://kaotiyun.com/show/mfDZ777K
本试题收录于:
软件设计师下午应用技术考试题库软考中级分类
0
软件设计师下午应用技术考试
软考中级
相关试题推荐
下列要素中,不属于DFD的是(22)。当使用DFD对一个工资系统进行建模时,(23)可以被认定为外部实体。
高速缓存cache与主存间采用全相联地址映像方式,高速缓存的容量为4MB,分为4块,每块1MB,主存容量为256MB。若主存读写时间为30ns,高速缓存的读写时间为3ns,平均读写时间为3.27ns,则该高速缓存的命中率为(3)%。若地址变换表如下所示,
负载压力性能测试需求分析时,应该选择(63)类型的业务作为测试案例。 ①高吞吐量的业务 ②业务逻辑复杂的业务 ③高商业风险的业务 ④高服务器负载的业务 ⑤批处理的业务
以下控制流程图的环路复杂性V(G)等于(54)。
已知某高级语言源程序A经编译后得到机器C上的目标程序B,则(21)。
结构化开发方法中,(35)主要包含对数据结构和算法的设计。对算法设计时,其主要依据来自(36)。描述算法时,(37)不是理想的表达方式。(37)
如果在查找路由表时发现有多个选项匹配,那么应该根据___________(25)原则进行选择。假设路由表有4个表项如下所示,那么与地址139.17.179.92匹配的表项是____________(26)。(25)
在面向对象技术中,(43)是一组具有相同结构、相同服务、共同关系和共同语义的(44)集合,其定义包括名称、属性和操作。(43)
在结构化分析方法中,数据流图描述数据在系统中如何被传送或变换,反映系统必须完成的逻辑功能,用于(38)建模。在绘制数据流图时,(39)。(38)
设数组a[1..10,1..8]中的元素按行存放,每个元素占用4个存储单元,已知第一个数组元素a[1,1]的地址为1004,那么a[5,6]的地址为________________。
随机试题
国家出版主管部门对“数字出版”的定义中,不包含()。
A.起病急骤的单侧足趾关节炎B.膝关节的交替性疼痛C.下肢不对称性大关节炎D.手指对称性多关节炎E.手指不对称性少关节炎痛风可出现
雄激素主要由下列哪种细胞分泌
应当公开招标的建设工程项目出现下列情形时,经批准可以进行邀请招标的是()。
2016年4月,50岁的徐某在为自己投保人身保险时,申报的年龄为40岁,而该类保险对被保险人的年龄限制在45岁以下。2017年4月,保险公司发现了该情形。根据保险法律制度的规定,下列表述中,正确的是()。
甲公司为一家上市公司,为提高市场占有率及实现多元化经营,甲公司在2×18年进行了一系列投资和资本运作。甲公司与各个公司均为境内居民企业,所得税税率均为25%。甲公司的投资业务如下:(1)甲公司在2×18年1月30日,从二级交易市场上购人了A公司的股票1
阅读以下文字。完成下列题。有关人士认为,“人类基因组草图”的测绘成功仅仅预示着一个新的开端,真正的研究工作还只刚刚起步。例如,“草图”中留下了许多空白需要填补,不少可能包含着重要的医学信息的空白又顽固地拒绝“泄露自己的秘密”。除了最先完成的22号
据报道目前北京外来务工人员已近700万人,并逐步从传统的建筑、服务业等劳务性行业,向高技术、文化传媒等产业扩展。新生代外来务工人员对城市的贡献更广泛,贴合更密切,相较父辈,他们也更为强烈地渴盼融入生活、工作的城市。今天,在道路上,在办公室里,工厂、饭馆、商
根据我国《刑法》第17条第2款的规定,已满14周岁、不满16周岁的人,犯( )的,应当负刑事责任。
甲电力公司管理的一台变压器位于路旁10米处,为了防止他人接近,电力公司建造嗣墙将变压器嗣起,仅留一道小门供检修人员出人,但并不锁门,平常有守门员乙看守。某日,乙不在,顽童丙(8岁)出于好奇走入围墙内玩耍,结果被电流击伤,经抢救后双臂截肢。根据我国有关法律规
最新回复
(
0
)