大家帮我看看这个程序的问题!

问题描述:

大家帮我看看这个程序的问题!
#include
using namespace std;
class sxlb
{
private:
int data;
sxlb *next,*pre;
int freq;
public:
sxlb::sxlb(int f=0)
{
freq=f;
}
sxlb* build();
void shuchu(sxlb* L);
int locate(sxlb* L,int x);
};
sxlb* sxlb::build()
{
sxlb *h,*e,*p,*q;
h=new sxlb;
p=h;
int i=1;
while(1)
{
q=p;
p->next=new sxlb;
p=p->next;
p->pre=q;
coutfreq))
{
o=p2->freq;
p2->freq=p1->freq;
p1->freq=o;
t=p2->data;
p2->data=p1->data;
p1->data=t;
}
p2=p2->next;
}//为什么我调换过顺序但上面出现的i值还是不变呢
p1=p1->next;
p2=p1->next;
}
return i;
}
void main()
{
sxlb* L;
sxlb k;
L=k.build();
k.shuchu(L);
int s,i;
while(s!=-1)
{
couts;
i=k.locate(L,s);
cout
1个回答 分类:综合 2014-09-17

问题解答:

我来补答
问题描述不详细.
再问: 2.38 设有一个双向循环链表,每个结点中除有pre,data和next三个域外,还增设了一个访问频度域freq。在链表被起用之前,频度域freq的值均初始化为零,而每当对链表进行一次Locate(L,x)的操作后,被访问的结点(即元素值等于x的结点)中的频度域freq的值便增1,同时调整链表中结点之间的次序,使其按访问频度非递增的次序顺序排列,以便始终保持被频繁访问的结点总是靠近表头结点。试编写符合上述要求的Locate操作的算法。
再答: 一、 while(1) { if(p->data==x) { p->freq++; coutfreq)) { o=p2->freq; p2->freq=p1->freq; p1->freq=o; t=p2->data; p2->data=p1->data; p1->data=t; } 这个是排序的代码啊!
再答: 不是说程序本身不能执行,是i++没法执行到,两种情况下,都跳出去了。
再问: 怎么会执行不到呢!你用VC++6.0试试,第一次判断显示i的值是能正确显示的,也就是i还是按我的意思正确执行的,但当我排序后i的值还是一样不变 我就是不知道为什么。。
再答: 什么时候下,p->data !=x, p->data!=-1?
 
 
展开全文阅读
剩余:2000