C语言 数据结构题目一道 在线等答案~快~试写一符合上述要求的LocateNode运算的算法。

设有一个带头结点的非循环双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。每当在链表进行一次L... 设有一个带头结点的非循环双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。每当在链表进行一次LocateNode(L,x)运算时,若查找失败,在在表伪插入值为X的结点;若查找成功,则将元素值为x的结点中freq域的值加1,并调整表中结点的次序,使其按访问频度的递减序排列,以便使频繁访问的结点总是靠近表头。 展开
 我来答
匿名用户
2013-10-24
展开全部
LocateNode(L,x)
{
//从表头向后查找值为x的节点
Node *p = L;
while(p->data != x && p->next != NULL)
{
p = p->next;
}

//判断是否找到
if (p->data == x)
{
p->freq += 1;
//从头节点根据freq的值调节节点顺序
Node *pTmp = L;
while (pTmp->freq > p->freq && pTmp->next != NULL)
{
pTmp = pTmp->next;
}

//新的插入位置不是尾部
if (pTmp->next != NULL)
{
//断开p在链表中的连接
p->prior->next = p->next;
p->next->prior = p->prior;
//新位置插入p
pTmp->prior->next = p;
p->prior = pTmp->prior;
p->next = pTmp;
pTmp->prior = p;
}

}
else
{
//在尾部插入新的节点
Node *pNewNode = new Node;
p->next = pNewNode;
pNewNode->prior = p;
pNewNode->data = x;
pNewNode->next = NULL;
pNewNode->freq = 0;
}
}
七鑫易维信息技术
2024-09-02 广告
Play Video 七鑫易维是致力于机器视觉和人工智能领域的高新科技企业,迄今已专注眼球追踪技术的研发、创新与应用超过14年,拥有完全自主知识产权,全球专利总量500余项。 作为眼球追踪技术领域的全球知名品牌,七鑫易维的产品体系覆盖眼动分... 点击进入详情页
本回答由七鑫易维信息技术提供
匿名用户
2013-10-24
展开全部
就按你所说的顺序写代码不就成了
一个IF 一个排序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式