已知一个带头结点单链表的结点类型nextNode定义为struct nextNode{int data;int freq;struct nextNode *next; };其中,data为结点值域,freq为该结点元素的访问计数,初始为O;next为指向链

admin2017-04-28  30

问题 已知一个带头结点单链表的结点类型nextNode定义为struct nextNode{int data;int freq;struct nextNode *next; };其中,data为结点值域,freq为该结点元素的访问计数,初始为O;next为指向链表中该结点后继结点的指针域,设该链表所有结点按照freq值从大到小链接。请设计一个时间和空间上尽可能高效的算法,编写一个查找函数Search,从链表首结点开始查找结点data值与给定值相等的结点。如果找到,则将该结点的freq值加1,然后把它前移到与结点freq值相等的结点的后面,使得所有结点仍然都保持按照freq值从大到小链接。
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法描述如下: bool selfOrganizationList (nextNode *f,int value,nextNode*&p); nextNode *pre,*q; p=f—>next; q=pre=f; while(p !—NULL&&p—>data !=value) { //出现次数改变的时候记录q if(pre !=f&&pre—>freq>p—>freq) q=pre; pre=p; p=p—>next; } //找不到的时候返回 if (p==NULL) return false; p—>freq++; pre—>next=p—>next, p—>next=q—>next; q—>next=p; return true; }; }

解析
转载请注明原文地址:https://kaotiyun.com/show/CWRi777K
0

相关试题推荐
最新回复(0)