非循环双向链表题目

        设头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pre((前驱指针)、data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被启用前,其值均初始化为零。每当在链表中进行一次 locate(L,x)运算时令元素值为ⅹ的结点中freq域的值増1,并使此链表中结点保持按访冋频度非增递减)的顺序排列,同时最近访问的结点排在频度相冋的结点前面,以便使频繁访问的结点总是靠近表头。试编写符合上述要求的 Locate(L,x)运算的算法,该运算为函数过程,返回找到结点的地址,类型为指针型

DLinkList Locate(DLinkList &L,ElemType x)
{
	DNode *p=L->next,*q;
	while(p&&p->data!=x)
		p=p->next;
	if(!p)
		exit(0);
	else
	{
		p->freq++;
		if(p->next!=NULL)
			p->next->pred=p->pred;
		p->pred->next=p->next;
		q=p->pred;
		while(q!=L&&q->freq<=p->freq)
			q=q->pred;
		p->next=q->next;
		q->next->pred=p;
		p->pred=q;
		q->next=p;
	}
	return p;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值