●试题三 阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。 【说明】 设有一

11 查阅

●试题三

阅读下列函数说明和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");/*没找到*/

}

参考答案:

●试题三【答案】(1)p->data!=x(2)p->freq++(3)current->freq>p->freq(4)p->next(5)current【解析】(1)空所在的循环是定位x,将指针指向x结点(如存在的话),因此(1)空应填写"p->data!=x"。显然,(2)空是使该结点的访问频度加1,因此(2)空应填写"p->freq++"。(3)空所在的循环是根据访问频度定位x结点的新位置,用P指向x结点的前驱,因此(3)空处应填"curre

软考初级