| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1227 人关注过本帖
标题:求指教:两个有序链表合并(功能函数)出现问题!
取消只看楼主 加入收藏
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
求指教:两个有序链表合并(功能函数)出现问题!
程序代码:
/*已有a、b两个链表,每个链表中的结点包括学号、成绩。要求
把两个链表合并,按学号升序排列。*/
#include"stdio.h"
#include"stdlib.h"
#define LEN sizeof(Stu)
typedef struct Student
{
    int num;
    float score;
    struct Student *next;
}Stu;
void main()
{
    Stu *Creat();
    Stu *Insert(Stu *ahead,Stu *bhead);
    void Print(Stu *head);
    Stu *ahead,*bhead,*abhead;
    printf("input list a:\n");
    ahead=Creat();
    Print(ahead);
    printf("input list b:\n");
    bhead=Creat();
    Print(bhead);
    printf("The mixed:\n");
    abhead=Insert(ahead,bhead);
    Print(abhead);
}
//建立链表的函数
Stu *Creat()
{
    Stu *p1,*p2,*head;
    p1=p2=(Stu*)malloc(LEN);
    scanf("%d %f",&p1->num,&p1->score);
    head=NULL;
    while(p1->num!=0)
    {
        if(head==NULL)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=(Stu*)malloc(LEN);
        scanf("%d %f",&p1->num,&p1->score);
    }
    p2->next=NULL;
    return head;
}
//输出链表的函数
void Print(Stu *head)
{
    Stu *p;
    p=head;
    if(head!=NULL)
    {
        while(p!=NULL)//不能写成:p->next!=NULL
        {
            printf("number:%d  score:%5.1f\n",p->num,p->score);
            p=p->next;
        }
    }
}
//合并排序函数
Stu *Insert(Stu *ahead,Stu *bhead)
{
    Stu *pa1,*pa2,*pb1;
    pa1=pa2=ahead;
    pb1=bhead;
    if(ahead==NULL)
        return bhead;
    if(bhead==NULL)
        return ahead;
    do              //让链表b中的结点依次和a中的结点比较并插入
    {
        while((pb1->num>pa1->num)&&(pa1->next!=NULL))
        {
            pa2=pa1;
            pa1=pa1->next;
        }
        if(pb1->num<=pa1->num)
        {
            if(pa1==ahead)
                ahead=pb1;
            else
                pa2->next=pb1;
            pb1->next=pa1;
            pa2=pb1;
            pb1=pb1->next;
        }
    }while(pa1->next!=NULL);
    if(pa1->next==NULL)
        pa1->next=pb1;
    return ahead;
}
/*其它函数都没问题,就是那个合并排序函数有问题。
我希望大家是在我程序的基础上指出问题、帮忙修改,
而不是贴上另一种实现方法的代码。
  不甚感激!!!
*/
搜索更多相关主题的帖子: 排列 
2013-01-04 14:50
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 2楼 yaobao
有序的。
2013-01-04 15:18
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 3楼 a4811
在建立链表中,要求输入是按有序输入的。
2013-01-04 15:19
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 5楼 yaobao
就是最后一个函数有问题。
说下我的思路吧,让b链表中的结点依次和a表中的结点比较,每比较一个结点,若符合条件,则将该结点并入a链表,b结点下移。
如果a表结点为NULL时,b表还未至尾部,让b表剩下的结点结到a表后面。
你帮帮我吧,我一直都找不出问题,应该是循环出了问题。

2013-01-04 15:49
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 7楼 yaobao
哥们,我知道你热心肠。
为了表示对你的支持和感谢,我刚在版主投票中投了你一票。
2013-01-04 16:12
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 8楼 embed_xuel
不是括号的问题。哥们,有空晚上到电脑帮我看看呗。
2013-01-04 16:16
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 11楼 yaobao
呵呵,你本来就喜欢帮助人。
我在别的帖子里也经常看到你为他人解决问题的身影,咱实话实说。
刚才我那个问题的解法是参照老谭教材答案的,思路是没有问题,就是在函数功能实现上出了问题,你有空帮我理一理。
2013-01-04 16:19
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 14楼 yaobao
C程序设计<第四版>学习辅导P151-152.
就是第四版教科书第九章练习题第10题。
答案的代码感觉很乱,运行也不正确。我优化了下。
2013-01-04 16:30
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
解决了,我刚才又按照老谭的方法来,加了个pb2.
No Problem,看来我比老谭还是要嫩些。
感谢您,论坛中就是需要您这么热心和无私奉献的人,我记住您了,yaobao!


2013-01-04 17:06
a4811
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:100
专家分:107
注 册:2012-12-20
收藏
得分:0 
回复 16楼 yaobao
KO!
Thanks!
2013-01-04 17:07
快速回复:求指教:两个有序链表合并(功能函数)出现问题!
数据加载中...
 
   



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

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