大家帮我看看这个程序的问题!!
#include<iostream>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;
cout<<"输入第"<<i<<"个数"<<endl;
i++;
cin>>p->data;
if(p->data==-1)
{
p->next=h;
h->pre=p;
e=p;
break;
}
}
return h;
}
void sxlb::shuchu(sxlb* L)
{
sxlb* p;
p=L;
p=p->next;
while(1)
{
cout<<p->data<<"freq:"<<p->freq<<endl;
p=p->next;
if(p->data==-1) break;
}
}
int sxlb::locate(sxlb* L,int x)
{
sxlb *p,*h,*p1,*p2;
int t,i=1,o;
h=L;
p=h;
p=p->next;
while(1)
{
if(p->data==x)
{
p->freq++;
cout<<"freq:"<<p->freq;
break;
}
if(p->data==-1)
{
cout<<"没有"<<endl;
break;
}
p=p->next;
i++;
}
p1=h;
p1=p1->next;
p2=p1->next;
while(p1->data!=x)
{
while(p2->data!=x)
{
if(p2->freq>(p1->freq))
{
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)
{
cout<<"输入要查的数:";
cin>>s;
i=k.locate(L,s);
cout<<"此数在第"<<i<<"个"<<endl;//不管我同一个数查几次这个i始终不变
}
k.shuchu(L);
cout<<"输入要查的数:";
cin>>s;
i=k.locate(L,s);
cout<<"此数在第"<<i<<"个"<<endl;//只有跳出了上面那个循环后的i值才变!!为什么啊!!!
}