【正确答案】typedef struct DuLNode{
ElemType data;
int freq;
struct DuLNode *pred, *next;
}*DList;
DList locate (DList L, ElemType x){ //L是带头结点的按访问频度递减的双向链表
DList p=L->next, q; //p为L表的工作指针,q为p的前驱,用于查找插入位置
while(p && p->data !=x) p=p->next; //查找值为x的结点
if(! p){printf("不存在所查结点\n"); exit(0); }
else{
p->freq++; //令元素值为x的结点的freq域加1
p->next->pred=p->pred; //将p结点从链表上摘下
p->pred->next= p->next;
q=p->pred; //以下查找p结点的插入位置
while(q !=L && q->freq<p->fbq) q=q->pred;
p->next=q->next; q->next->pred=p; //将p结点插入
p->pred=q;q->next=p;
}
return(p); //返回值为x的结点的指针
}
【答案解析】