题目:线性表中各结点的检索概率不等时,可用如下策略提高顺序检索的效率:概率重心前移(学霸往前坐)
即:若找到指定的结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索的结点尽量位于表的前端。
试设计在顺序结构和链式结构的线性表上实现上述策略的顺序检索算法。
关键字: 线性表顺序查找;概率重心前移;两种存储结构
思路:
检索时可以从表头开始向后顺序扫描,若找到指定的结点,则将该结点和前驱节点(若存在)交换。
1.采用顺序表存储结构的算法实现:
代码:
int SeqSrch(RcdType R[],ElemType k){//顺序表查找线性表,找到后和前面的元素交换
int i=0;
while((R[i].key!=k)&&(i<n))
i++;//从前向后顺序查找指定结点
if(i<n&&i>0){//若找到,则交换
temp=R[i];
R[i]=R[i-1];
R[i-1]=temp;
return --i;//交换成功,则返回交换后的位置
}
else return -1;//交换失败
}
2.链式存储:略
注:为了保证交换结点顺序时可以找到前驱结点,需要设立三个指针