以下算法实现若开散列表HP中无键值为K的结点,则插入一个这样的结点。请分析程序,并在______上填充
void insert_openhash(keytype K,openhash HP)
{ if(research_openhash(K,HP)==NULL)
{ i=H(K);
q=malloc(size);q—>key=______; /*生成新结点*/
______=HP[i];HP[i]=______; /*前插法链入新结点*/
}
}
void insert_openhash(keytype K,openhash HP)
{ if(research_openhash(K,HP)==NULL)
{ i=H(K);
q=malloc(size);q—>key=______; /*生成新结点*/
______=HP[i];HP[i]=______; /*前插法链入新结点*/
}
}
第1题
void delete_openhash(keytype K,openhash HP)
{ i=H(K);
if(HP[i]==NULL)return; /*空表则退出*/
p=HV[i];
if(p—>key==K){______=p—>next;free(p);return;)
/*表首结点为待删除结点时的删除*/
while(p—>next!=NULL) /*其他情况下的删除*/
{ q=p;p=p—>next;
if(p—>key==K){______=p—>next;delete(p);return;)
}
}
第2题
pointer research_openhash(keytype K,openhash HP)
{ i=H(K); /*计算K的散列地址*/
p=HP[i]; /*i的同义词子表表头指针传给P*/
while(______)p=p—>next; /*未达到表尾且未找到时,继续扫描*/
______;
}
第3题
int binsearch(sqtable R,keytype K)
{ low=l;hig=R.n;/*置查找区间初值。low,hig分别标记查找区间的下、上界*/
while(low<=hig)
{ mid=(low+hig)/2;
switch
{ case K==R.item[i].key:return(mid); /*找到,返回位置mid*/
case K<R.item[i].key:______.break;/*缩小区间*/
case K>R.item[i].key:______;break/*缩小区间*/
}
}
return(0); /*若区间长度已为0但仍不成功,则返回0,表示查找不成功*/
}
第4题
已知一个线性表为(38,25,74,63,52,48),假定采用H(K)=K mod 7计算散列地址进行散列存储,若利用线性探测的开放定址法处理冲突,则在该散列表上进行查找的平均查找长度为();若利用链地址法处理冲突,则在该散列上进行查找的平均查找长度为()。
A.1.5,1
B.1.7,3/2
C.2,4/3
D.2.3,7/6
第5题
A、1
B、5
C、9
D、40
第6题
第7题
bitreptr search_bst(bitreptr T,keytype K)
{ if(T==NULL)return(NULL);
else switch
{ case T—>key==K:______;
case______: return(search_bst(T—>lchild,K));
case______: return(search_bst(T—>rchild,K));
}
}
第8题
第9题
A.如果s为集合,则该循环执行时,i取值会对集合中的每个元素进行遍历
B.如果s为字典,则该循环执行时,i取值会对字典中的每个键值对进行遍历
C.如果s为字符串,则该循环执行时,i取值会对字符串中的每个字符进行遍历
D.如果s为列表,则该循环执行时,i取值会对列表中的每个元素进行遍历