20.设头指针为L的带有表头节点的非循环双向链表,
其每个节点中除有pred(前缀指针),data(数据)和next(后继指针)域外,
还有一个访问频度域freq。在链表被启用前,其均值初始化为零。
每当在链表中进行一次Locate(L,x)运算时,令元素值为X的节点中freq域的值增1,
并使此链表中节点保持按访问频度非增(递减)的顺序排列,
同时最近访问的节点排在频度相同的节点前面,以便使频繁访问的节点总是靠近表头。
试编写符合要求的Locate(L,x)运算的算法,
该运算为函数过程,返回找到节点的地址,类型为指针型。
/*
给一个非循环双向链表增加一个free值,用以表示它的访问频率,每访问一次freq就+1,
然后需要将该链表按照非增的顺序排列,同时最近访问的节点排在相同频度的节点的前面,
以便使频繁访问的节点总是靠近表头。
试编写符合上述要求的Locate(L,x)函数,该运算为函数过程,返回找到节点的地址,
类型为指针型。
分析:
这道题咋一看很唬人,还引入了一个新概念,其实并不难,
拆分开来其实就是:查找+排;
我们需要先找到我们要访问的节点,更改它的ferq值,