[说明]
设有一个带头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现在它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
[函数]
void Locate(int &x)
<结点类型说明>
*p=first->next;
while(p!=first && (1) )p=p->next;
if(p!=first)
(2) ;
<结点类型说明>
*current=p;
current->prior->next=current->next;
current->next->prior=current->prior;
p=current->prior;
while(p!=first && (3) )p=p->prior;
current->next= (4) ;
curren->prior=p;
p->next->prior=current;
p->next= (5) ;
else printf("sorry.Not find! \n");