问题 问答题

例如:设散列函数为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,建立的散列文件内容如图所示。


为简化起见,散列文件的存储单位以内存单元表示。
函数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[i]=NULLKEY)
Bucket[Index].KeyData[i]=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[i]== NULLKEY”(0≤i<ITEMS),则可将元素NewElemKey放入Bucket[Index].KeyData[i],至此元素已经插入散列桶中,函数可返回,因此空(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”。

阅读理解与欣赏

阅读下面的文字,完成以下小题。

艺术家的智慧

一个星期日早晨,我在罗丹的工作室中,立在他最动人的作品之一的模型前面。这是一个美丽的少妇,苦痛地扭着身子。她像是沉浸在一种神秘的忧愁中——低垂着头,闭着嘴唇和眼皮像是睡了;但是她面目的苦痛表情,显露出她内心的斗争。看这座雕像时,最使人惊讶的是她没有手,没有足。雕塑家似乎对自己不满,一时生气,把她的手足截断了。这是一个有力的形象,可是手足不全,不免令人惋惜,可怜她受到摧残。我想着罗丹的作品时常引起不满的批评,既然我不牵连在内,我便向大师说了,看他怎样回答。

罗丹对我说:“你要相信,把这座像塑成这样,是我预定的计划:冥思。所以没有手来动作,没有足来走路。”罗丹激动地说:“如果我的塑像不好,如果我犯了解剖学上的错误,如果没有把动作表现得恰当,如果我不懂得使石像具有生命的学问,那末这些批评家非常有道理。但如果我的人像是正确而生动的,他们还有什么可说的呢?而且他们又有什么权利禁止我在作品中结合一些思想呢?他们又有什么可抱怨的呢,如果我在我本行技术之外,又贡献给他们一些思想,如果我为了悦目的形象更加充实而给以一种意义?这是非常错误的。如果有人认为真正的艺术家可以满足于成为一个灵巧的工匠,而智慧是不必要的。恰巧相反,对于他们,智慧是不可少的,无论描绘形象或是塑造形象,甚至一些好像最缺少思想性的仅仅悦人眼目的形象。当一位雕塑家塑造人像时,第一要全盘考虑总的动作;然后,一直到工作完成为止,要胸有竹,牢牢记住这座人像的总的概念是什么。为了把作品最细微的地方不断地归结到这个中心思想上去的和它紧密地结合在一起,如果没有十分强烈的思想上的努力, 这是做不到的。”

这个女人,现在我了解,她是人的智慧的象征——她被她所不能解决的问题紧缠着,她被她所不能实现的理想逼恼着。像身的减缩是表示思想的折磨。有人相信艺术家可以不要智慧,毫无疑问,那是因为他们中间有不少人在现实生活中似乎缺少智慧,在著名的画家与雕塑家的传记里,满载某某前辈天真可笑的趣闻;但是要知道,伟大的人物,常因不断思考自己的作品而忽略日常生活。更要知道,虽然他们颇有智慧,但表面上好像肤浅得很,只是因为他们没有口才和答应不敏捷的缘故;可是对于那些浅薄的观察家来说,善于辞令是聪明伶俐的唯一标志。

小题1:第一段结尾处说,下面可能属于“我”说的内容的两项是 (5分)

A.这少妇塑像美丽、动人,却显得那样苦痛忧愁,真令人惊讶。

B.这样一个美丽有力的形象,您却截掉了她的手足,实在可惜。

C.近来您的作品时常引起不满的批评一一当然这与我无关,您知道吗?

D.这少妇塑像是这个样子,您不担心它会引来批评家的非议吗?E.您似乎是要表现一种预定计划,但可能有人认识它象征的智慧吗?

小题2:造成“有人相信艺术家可以不要智慧”这种误解的原因是什么?选出理解正确的一项:  (3分)

A.因为一些浅薄的观察家认为,艺术家中间有不少人在现实生活中缺少智慧。

B.因为许多艺术家虽然颇有智慧,但表面上好像肤浅得很。

C.因为一些观察家比较浅薄,许多艺术家常忽略日常生活、不善辞令。

D.因为一些观察家比较浅薄,他们认为善于词令是聪明伶俐的唯一标志。小题3:第一段中说“罗丹的作品时常引起不满的批评”。这种“批评”的共同点是什么?(不超过20字)(4分)无视罗丹作品是艺术性与思想性相结合的杰作。

答:                                                                        

小题4:第二段中罗丹说“把这座像塑成这样,是我预定的计划”,请根据文章内容说明罗丹按“预定的计划”雕塑少妇塑像的大致过程( 60字左右)(4分)

答:                                                                        

多项选择题