标题:如何将单链表转换成双链表
只看楼主
qq854722791
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-12-17
结帖率:0
已结贴  问题点数:20 回复次数:5 
如何将单链表转换成双链表
#include<iostream.h>
#include<string.h>
#define N 5
class user
{
    friend class node;
private:
    char *name;
    long code;
    user *next;
public:
    void setName(char *na);
    void setCode(long c);
    char* getName();
    long getCode();
    void dispName();
    void dispCode();
};
void user::setName(char *na)
{
    name = new char(strlen(na)+1);
    if(name!=NULL)
    {
        strcpy(name, na);
    }
}
void user::setCode(long c)
{
    code = c;
}
char * user::getName()
{
    return name;
}
long user::getCode()
{
    return code;
}

void user::dispName()
{
    cout<<name<<" ";
}

void user::dispCode()
{
    cout<<code<<endl;
}
class node
{
protected:
    user *head, *tail;
public:
    node()
    {
        head=NULL;
        tail=NULL;
    }
    ~node()
    {}
    void Puttail(char *na, long num)//链表尾法,建立数据链表
    {
        user *p=new user;
        if(head==NULL)
        {
            head=p;
            tail=p;
        }
        p->setName(na);
        p->setCode(num);
        p->next = NULL;
        tail->next = p;
        tail = p;
    }
    void find(long x,user s[])//按电话号码查找用户信息
    {
        long low=0, high=N-1, mid;
        low = 0;
        high = N-1;
        while(low<=high)
        {
          mid = (low+high)/2;
          if(x==s[mid].getCode())
          {
             break;
          }
          else if(x>s[mid].getCode())high=mid-1;
               else low=mid+1;
        }

       cout<<"找到该用户的信息为:"<<"第"<<mid+1<<"个   ";
       s[mid].dispName();
       s[mid].dispCode();
    }
    void find(char *a,user s[])//按名字顺序查找用户信息
    {
        int i;
        for(i=0;i<N;i++)
        {
            if(strcmp(a,s[i].getName())==0)break;
        }
   
        cout<<"找到该用户的信息为:"<<"第"<<i+1<<"个   ";
        s[i].dispName();
        s[i].dispCode();
    }
    void show()//链表的输出
    {
        user *p;
        p=head;
        while(p!=NULL)
        {
            cout<<(*p).getName()<<"        ";
            cout<<(*p).getCode()<<endl;
            p=p->next;
        }
    }
};
void main()
{
    int i,j;
    user a[N],b,c[N],d[N];
    node x,y;
    char na[20],na1[20];
    long num,num1;
    for(i=0; i<N; i++)
    {
        cout<<"输入第"<<i+1<<"个人的姓名:";
        cin>>na;
        cout<<"输入第"<<i+1<<"个人的电话:";
        cin>>num;
        cout<<endl;
        a[i].setName(na) ;
        a[i].setCode(num) ;
        c[i]=a[i];
        d[i]=a[i];
    }
    for(i=1;i<=N; i++)//按号码冒号排序
    {
        for(j=0;j<N-i;j++)
        {
            if(c[j].getCode()<c[j+1].getCode())
            {
                b=c[j];
                c[j]=c[j+1];
                c[j+1]=b;
            }
        }
    }
    for(i=1;i<N; i++)//按名字冒号排序
    {
        for(j=0;j<N-i;j++)
            if(strcmp(d[j].getName(),d[j+1].getName())<0)
            {
                b=d[j];
                d[j]=d[j+1];
                d[j+1]=b;
            }
        
    }
    for(i=0;i<N; i++)
    {
        x.Puttail(c[i].getName(), c[i].getCode());
        y.Puttail(d[i].getName(), d[i].getCode());
    }
    cout<<"按电话号码由大到小输出"<<endl;
    x.show();
    cout<<endl;
    cout<<"请输入要查找用户的号码:";
    cin>>num1;
    x.find(num1,c);
    cout<<endl;
    cout<<"按名字顺序由大到小输出"<<endl;
    y.show();
    cout<<endl;
    cout<<"请输入要查找用户的名字:";
    cin>>na1;
    y.find(na1,d);

}
搜索更多相关主题的帖子: include private public friend 如何 
2013-12-17 19:59
qq854722791
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-12-17
得分:0 
这是自己做、无序输入多个用户的记录电话号码、但是是单链表做的  现在想求各位大神帮我改成双链表   如何更改
2013-12-17 20:01
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
得分:10 
自己照着书上讲的双链表的结构改不就是了?

我能帮你的只能到这里了。。。
2013-12-17 21:11
qq854722791
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2013-12-17
得分:0 
回复 3楼 左手拉一只猫
就是不知道 从何处下手~~
2013-12-18 09:43
左手拉一只猫
Rank: 4
来 自:杭州
等 级:业余侠客
帖 子:70
专家分:250
注 册:2013-10-27
得分:0 
回复 4楼 qq854722791
和单链表一样的构造思路呗!

我能帮你的只能到这里了。。。
2013-12-18 16:31
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
得分:10 
改成双向链表?

我觉得你想让别人给你改,你得先说说改成双向链表的目的吧,

比如说改成双向链表之后有什么方便之处,或者想实现什么单链表实现不了的功能等等。

这样才能知道怎么改。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-12-18 23:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-425323-1-1.html




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

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