| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 265 人关注过本帖
标题:链表的升序合并
只看楼主 加入收藏
一个孩子
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:356
专家分:954
注 册:2012-10-1
结帖率:96.77%
收藏
已结贴  问题点数:20 回复次数:1 
链表的升序合并
程序代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
struct student
{
    int num;
    int score;
    struct student *next;
};
struct student lista,listb;
int n,sum;

struct student *create(void)
{
    struct student *p1,*p2,*head;
    p1=p2=(struct student *)malloc(LEN);
    printf("input number and scores of student\n");
    printf("if number is 0,stop inputing\n");
    scanf("%d%d",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
        {
            head=p1;
        }
        else
        {
            p2->next=p1;
        }
        p2=p1;
        p1=(struct student *)malloc(LEN);
        scanf("%d%d",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return head;
}
struct student *insert(struct student *ah,struct student *bh)
{
    struct student *pa1,*pa2,*pb1,*pb2;
    pa1=pa2=ah;
    pb1=pb2=bh;
    do
    {
        while((pb1->num>pa1->num)&&(pa1->next!=NULL))
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pb1->num<=pa1->num)
        {
            if(ah==pa1)
            {
                ah=pb1;
            }
            else
            {
                pa2->next=pb1;
                /*pb1=pb1->next;
                pb2->next=pa1;
                pa2=pb2;
                pb2=pb1;*/
               
            }
            pb1=pb1->next;
            pb2->next=pa1;
            pa2=pb2;
            pb2=pb1;
        }
    }while(pa1->next!=NULL||(pa1==NULL&&pb1!=NULL));
    if((pb1!=NULL)&&(pb1->num>pa1->num)&&(pa1->next==NULL))
    {
        pa1->next=pb1;
    }
    return ah;
}
void print(struct student *head)
{
    struct student *p;
    printf("\nThere are  %d records :\n",sum);
    p=head;
    if(p!=NULL)
    do
    {
        printf("%d,%d\n",p->num,p->score);
        p=p->next;
    }while(p!=NULL);

}
void main()
{
    struct student *ahead,*bhead,*abh;
    printf("please input lista:\n");
    ahead=create();
    sum=sum+n;
    printf("please input listb:\n");
    bhead=create();
    sum=sum+n;
    abh=insert(ahead,bhead);
    print(abh);
   
}
创建函数应该没有写错,很有可能是合并函数的哪个代码出错了,我现在去吃饭了,希望高手给予指点,嘿嘿!!
搜索更多相关主题的帖子: next 
2012-10-22 17:53
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:20 

别人写的,你参考一下

/*
*功能:合并链表
*参数:两个链表首地址
*返回值:合并后链表的首地址
*/
LinkType Mergelink(LinkType La, LinkType Lb)
{
    LinkType Lc, HeadC;
    HeadC = La;
    Lc = HeadC;
    La = La->next;
    Lb = Lb->next;
    while (La && Lb)
    {
        if (La->data > Lb->data)//将data较小的连接到Lc
        {
            Lc->next = Lb;
            Lb = Lb->next;
        }
        else
        {
            Lc->next = La;
            La = La->next;
        }
        Lc = Lc->next;
    }
    Lc->next = La ? La : Lb;//将La 或 Lb剩下的部分连接到Lc
    return HeadC;
}

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2012-10-23 21:22
快速回复:链表的升序合并
数据加载中...
 
   



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

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