【分析解答题】
【说明】
设有一个带表头结点的双向循环链表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"); /*没找到*/
查看答案解析
参考答案:
正在加载...
答案解析
正在加载...
根据网考网移动考试中心的统计,该试题:
0%的考友选择了A选项
0%的考友选择了B选项
0%的考友选择了C选项
0%的考友选择了D选项