| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 311 人关注过本帖
标题:大家帮我看看这个程序的问题!!
只看楼主 加入收藏
hellengoodd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-4-17
结帖率:75%
收藏
已结贴  问题点数:15 回复次数:2 
大家帮我看看这个程序的问题!!
#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值才变!!为什么啊!!!
}
搜索更多相关主题的帖子: next private include public 
2011-05-04 17:59
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:15 
程序代码:
    while(1)
    {
        if(p->data==x)
        {
            p->freq++;
            cout<<"freq:"<<p->freq;
            break;
        }
        if(p->data==-1)
        {
            cout<<"没有"<<endl;
            break;
        }
        p=p->next;
        i++;
    }
就这段使用到了i  其他的地方没有用到  i表示的是结点在链表当中的顺序位置  每次查找只要链表保持不变i的值就是一定的
不知道你想让i变化成什么?

用的是C++ 类进行封装的  按照你这样子封装不好
最起码要定义两个类  一个结点类  一个双向循环链表类    这样定义数据 逻辑上才清楚  自己可以动手改改
2011-05-04 23:57
hellengoodd
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-4-17
收藏
得分:0 
回复 2楼 寒风中的细雨
怎么会不变呢  
 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;
        }//我这段代码不是把链表里两个节点中data的值互换了吗
while(1)
    {
        if(p->data==x)
        {
            p->freq++;
            cout<<"freq:"<<p->freq;
            break;
        }
        if(p->data==-1)
        {
            cout<<"没有"<<endl;
            break;
        }
        p=p->next;
        i++;
    }//这段代码不是可以查data的值在第i个节点吗  既然已经互换了  那i的值就应该改变啊
还有,你的意思是不是把节点和操作分成两个类比较好啊
2011-05-05 14:50
快速回复:大家帮我看看这个程序的问题!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015067 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved