单链表第二十题(按频度排序)

文章描述了一个带有访问频度域的双向链表数据结构,每次Locate运算时会增加目标节点的访问频度并重新按频度排序,保持最近访问的节点在链表前端。提供的C代码实现了Locate函数,首先查找节点并更新其频度,然后在链表中找到合适位置进行插入,以保持链表的排序规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 20.设头指针为L的带有表头节点的非循环双向链表,

      其每个节点中除有pred(前缀指针),data(数据)和next(后继指针)域外,

      还有一个访问频度域freq。在链表被启用前,其均值初始化为零。

      每当在链表中进行一次Locate(L,x)运算时,令元素值为X的节点中freq域的值增1,

       并使此链表中节点保持按访问频度非增(递减)的顺序排列,

       同时最近访问的节点排在频度相同的节点前面,以便使频繁访问的节点总是靠近表头。

      试编写符合要求的Locate(L,x)运算的算法,

       该运算为函数过程,返回找到节点的地址,类型为指针型。

/*

   给一个非循环双向链表增加一个free值,用以表示它的访问频率,每访问一次freq就+1,

   然后需要将该链表按照非增的顺序排列,同时最近访问的节点排在相同频度的节点的前面,

   以便使频繁访问的节点总是靠近表头。

   试编写符合上述要求的Locate(L,x)函数,该运算为函数过程,返回找到节点的地址,

    类型为指针型。

    分析:

           这道题咋一看很唬人,还引入了一个新概念,其实并不难,

            拆分开来其实就是:查找+排;

           我们需要先找到我们要访问的节点,更改它的ferq值,

         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值