标题:困惑啊。不知道怎么将A链表分成奇偶的A,B链表。编了个程序,没错误但是出不 ...
只看楼主
鱼鱼儿丸子
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-4
结帖率:100%
已结贴  问题点数:5 回复次数:8 
困惑啊。不知道怎么将A链表分成奇偶的A,B链表。编了个程序,没错误但是出不来。求指导修改啊!!!
#include<iostream.h>
enum error_code{success,arrange_error};
typedef struct node{
    int data;
    struct node*next;
}node;
class list{
public:
    list();
    ~list();
   void creat_R();
    error_code get_element(const int i,int&x)const;
int length()const;
node*locate(const int x)const;
error_code insert(const int i,const int x);
error_code delete_element(const int i);
node * get_head(){return head;}
void divide(list a);
void display();
private:
    int count;
    node*head;
};
list::list (){
    head=new node;
    head->next =NULL;
    count=0;
}
int list::length ()const{
    return count;
}
void list::creat_R (){
    int x;
    cin>>x;
    node*rear=head;
    while(x!=-1){
        count++;
        node*s=new node;
        s->data =x;
        s->next =NULL;
        rear->next =s;
        rear=s;
cin>>x;
    }
}
error_code list::get_element (const int i,int&x)const{
    node*p;
    int j;
    p=head->next ; j=1;
    while(p!=NULL&&j!=i){
        p=p->next ;
        j++;
    }
    x=p->data ;
    return success;
}
node*list::locate (const int x)const{
node*p;
p=head->next ;
while(p!=NULL){
    if(p->data ==x)return p;
    else p=p->next ;
}
return NULL;
}
error_code list::insert (const int i,const int x){
    node*p;
    int j=0;
    p=head;
    while(j!=i-1&&p!=NULL){
p=p->next ;
j++;
    }
    if(i<1||i>count+1)
        return arrange_error;
    node*s=new node;
    s->data =x;
    s->next =p->next ;
    p->next =s;
    count++;
    return success;
}
error_code list::delete_element (const int i){
node *u;
    node*p=head;
int j=0;
while(j!=i-1&&p!=NULL){
    p=p->next ;
    j++;
}
if(i<1||i>count)
return arrange_error;
u=p->next ;
p->next =u->next ;
delete u;
count--;
return success;
}
list::~list (){
    node*p=head->next ;
    node*q;
    while(p!=NULL){
    q=p;
    p=p->next ;
    delete q;
    }
    p=NULL;
}
void list::display (){
        node*p=head->next ;
        while(p!=NULL){
            cout<<p->data <<" ";
            p=p->next ;
        }
    }
void list::divide (list a){
    node*pa,*pb,*u,*v;
    list b;
    pa=a.get_head()->next ;
    pb=b.get_head();
    while(pa!=NULL){
        if(pa->data %2==0){
            u=new node;
            u->data =pa->data ;
            u->next =NULL;
            pb->next =u;
            pb=u;
            b.count ++;
            v=pa;
            pa=v->next ;
            delete v;}
        }
        b.display ();
        a.display ();
}
   
    void main(){
        list a,c;
        a.creat_R ();
        c.divide (a);
    }



搜索更多相关主题的帖子: void head private display include 
2012-03-06 22:01
非死亡!
Rank: 8Rank: 8
来 自:四川
等 级:蝙蝠侠
帖 子:179
专家分:760
注 册:2011-10-31
得分:0 
分数太少了吧  我不是看重分的人 你也知道的  唉  

能力 技巧
2012-03-06 22:37
榴紫丫
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:33
专家分:135
注 册:2011-11-3
得分:0 
编译,连接没错,执行有错啊,好像creat_R ();这个函数有问题吧,自己调试一下呗
你好赖也有个注释吧,只有代码,没有文字描述
2012-03-06 23:14
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
什么叫分成奇偶的?你先用语言把意途描述清楚一点。
然后在你的代码里把有关分链表的部分变变色呀,或者给个注释,这样能帮助我们定位错误。
2012-03-06 23:33
鱼鱼儿丸子
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-4
得分:0 
回复 4楼 pangding
嗯。就是将单链表A分解成两个单链表A和B。使得A链表中含有原链表A中序号为奇数的元素。而B链表含有原链表A中序号为偶数的元素,且保持原来的相对顺序。
其实有困惑的代码为这一段。昨天对题目理解错了。
void list::display (){
        node*p=head->next ;
        while(p!=NULL){
            cout<<p->data <<" ";
            p=p->next ;
        }
    }

void list::divide (list a,list b){
    node*p,*k,*r,*q;
    k=b.get_head ();
    p=a.get_head ();
    k=a.get_head()->next ;
    r=k;
    while(p!=NULL&&p->next !=NULL){
        q=p->next ;
        p->next =q->next ;
        r->next =q;
        r=q;
        p=p->next ;
    }
    r->next =NULL;
}
void main(){
    list a,b,c;
    a.creat_R ();
c.divide (a,b);
    a.display ();
b.display ();
}
2012-03-07 09:29
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:5 
有点明白你的意思了。
你那个 main 里的 list c 是干什么用的?
2012-03-07 22:01
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
另外你要如果是想把链表 a 分到 b 里去。恐怕得传一下 b 的引用。要不然操作的是 b 的“分身”。
2012-03-07 22:37
鱼鱼儿丸子
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2012-3-4
得分:0 
回复 6楼 pangding
list c 是用来调用那个divide函数的。B不是个空链表么,为什么还是要引用??如果改成引用的形式能够跑出结果么?
2012-03-09 12:29
hebinmyland
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-3-26
得分:0 
如果是根据data来划分成两个链表的话:
         1.divide()中的if..else。。并且a的
2012-03-26 16:08



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




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

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