●试题三
阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。
【说明】
设有一个带表头结点的双向循环链表L,每个结点有4个数据成员:指向前驱结点的指针prior、指向后继结点的指针next、存放数据的成员data和访问频度freq。所有结点的freq初始时都为0。每当在链表上进行一次L.Locate(x)操作时,令元素值x的结点的访问频度freq加1,并将该结点前移,链接到现它的访问频度相等的结点后面,使得链表中所有结点保持按访问频度递减的顺序排列,以使频繁访问的结点总是靠近表头。
【函数】
void Locate(int &x)
{<结点类型说明>
*p=first->next;
while(p!=frist && (1) )P=P->next;
if (p!=first)/*链表中存在x*/
{ (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) ;/*插入在P之后*?
Current->prior=P;
P->next->prior=current;
P->next= (5) ;
}
else printf("Sorry.Not find!\n");/*没找到*/
}