自学内容网 自学内容网

在顺序结构和链式结构的线性表上实现顺序检索算法

线性表中各个结点的检索概率不等,可用于如下策略提高顺序检索的效率:若找到指定结点,则将该结点和其前驱结点(若存在)交换,使得经常被检索的结点尽量位于表的前端。试设计在顺序结构和链式结构的线性表上实现上述策略的顺序检索算法。

顺序表实现:

思想:查找指定结点,交换该结点与前驱

代码:

int SeqSrchArray(SSTable s,int key){
int i=0;

//找指定结点
while(s.elem[i] !=key && i<s.length) i++;

if(i<s.length && i>0){
swap(s.elem[i-1],s,elem[i]);
return i-1;//返回下标 
} else{
return -1;
}
}

链表:

思想:查找指定结点,交换该结点与前驱

代码:


LinkNode * SeqSrchLink(LinkNode *head,int key){
LinkNode *pre=head;//当前结点前驱
LinkNode *p=head->next;//当前结点

while(p!=NULL && p->data!=key) {//找指定结点和前驱 
pre=p;
p=p->next;
}
//找到了指定结点,且有前驱 
if(p!=NULL && pre!=head){
swap(pre->data,p->data);
return pre;
}else{
return NULL;
}
} 


原文地址:https://blog.csdn.net/m0_56332819/article/details/142900521

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!