
C语言 数据结构题目一道 在线等答案~快~试写一符合上述要求的LocateNode运算的算法。
设有一个带头结点的非循环双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。每当在链表进行一次L...
设有一个带头结点的非循环双链表,每个结点中除有prior、data和next三个域外,还有一个访问频度域freq,在链表被起用之前,其值均初始化为零。每当在链表进行一次LocateNode(L,x)运算时,若查找失败,在在表伪插入值为X的结点;若查找成功,则将元素值为x的结点中freq域的值加1,并调整表中结点的次序,使其按访问频度的递减序排列,以便使频繁访问的结点总是靠近表头。
展开
2个回答
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;
}
}
{
//从表头向后查找值为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 一个排序
一个IF 一个排序
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询