| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1784 人关注过本帖
标题:没人帮忙哦,飞燕帮我来看下哪里错了啊
只看楼主 加入收藏
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
 问题点数:0 回复次数:17 
没人帮忙哦,飞燕帮我来看下哪里错了啊
建立两个链表 a, b,每个链表中的节点包括学号、成绩。要求把两个链表合并,按学号升序排列。
#include "stdio.h"
#include "malloc.h"
#define null 0
#define len sizeof(struct student)
int n;
struct student
{
    long num;
    long score;
    struct student *next;
};
struct student *creat(void)
{   
    struct student *p1,*p2,*head;
    head=null;
    printf("please input the students' data:\n");
    p1=p2=(struct student *)malloc(len);
    scanf("%ld %ld",&p1->num,&p1->score);
    n=0;
    while(p1->num!=0)
    {
        n++;
        if(n==1)head=p1;
        else
        {
            p2->next=p1;
            p2=p1;
        }
            p1=(struct student *)malloc(len);
            scanf("%ld %ld",&p1->num,&p1->score);
    }    
    p2->next=null;
    return(head);
}
void print(struct student *head)
{
    struct student *p;
    p=head;
    while(p!=null)
    {
        printf("%ld %ld\n",p->num,p->score);
         p=p->next;
    }
    
   
}
struct student *insert(struct student *head,struct student *p)
{
    struct student *p1,*p2;
    p1=p2=head;
        if(head==null)head=p;
        else
        {
            while(p->num>p1->num&&p1->next!=null)
            {
                p2=p1;p1=p1->next;
            }
            if(p->num<=p1->num)
            {
                if(p==head)
                {
                    head=p;p1->next=p;
                }
                else
                {
                    p2->next=p;p->next=p1;
                }
            }
            else
            {
                p1->next=p;p->next=null;
            }

        n++;
        
    }
    
    return(head);
}
    
    
main()
{
    struct student *a,*b,*p1;
    a=creat();
    print(a);
    b=creat();
    print(b);
    p1=a;
    while(p1!=null)
    {
        b=insert(b,p1);
        p1=p1->next;
    }
    printf("the %d data:",n);
    print(b);
   
}
搜索更多相关主题的帖子: 飞燕 student struct 链表 
2008-04-19 18:27
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
你在没有排序的情况下就插入是不对的

" border="0" />
2008-04-19 18:37
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
得分:0 
困扰一个下午了,==到花儿也谢鸟,
燕子快来啊。。。。
2008-04-19 18:40
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
得分:0 
我这个程序本身也有错误
比如我先输入两个已排好序的链表:
链表a                  1 11
                       3 33
                       5 55
                       0 0

然后输入b              2 22
                       4 44
                       6 66
                       0 0
然后就是个光标在在哪里,没什么反应了,不知道怎么回事
2008-04-19 18:45
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
我知道了,你等一下

" border="0" />
2008-04-19 18:58
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
#include "stdio.h"
#include "malloc.h"
#define null 0
#define len sizeof(struct student)
struct student
{
    long num;
    long score;
    struct student *next;
};
struct student *creat(void) //此函数重大修改
{
    struct student *p1,*p2,*head;
    long n,s;
    printf("please input the students' data:\n");
    head=p1=p2=(struct student *)malloc(len);
    while(scanf("%ld %ld",&n,&s)!=EOF && n!=0)
    {
        p1=(struct student *)malloc(len);
        p1->num=n;    p1->score=s;
        p2->next=p1;p2=p1;
    }
    p2->next=null;
    return head;
}
void print(struct student *head)
{
    struct student *p;
    for(p=head->next; p!=null; p=p->next)//此处有修改
    {
        printf("%ld %ld\n",p->num,p->score);
    }
}
//此函数几乎重写,无排序的排入,你自己加排序吧
struct student *insert(struct student *head,struct student *p)
{
    struct student *p1,*p2;
    p1=head;
    if(head==null)head=p;
    else if(p1==null)
    {
        p->next=null;
        p1->next=p;
    }
    else
    {
        for(; ; p1=p1->next)
        {
            p2 = p1->next;
            if(p1->next == NULL)
            {
                p->next=null;
                p1->next=p;
            }
            else if(p2->num > p->num)
            {
                p->next = p2;
                p1->next = p;
            }
            else continue;
            break;
        }
    }
    return head;
}
int main()
{
    struct student *a,*b,*p1,*p2;
    a=creat();
    print(a);
    b=creat();
    print(b);
    for(p1=a->next; p1!=null; p1=p2) //此处有修改
    {
        p2=p1->next;
        insert(b,p1);
    }
    printf("the data:\n");
    print(b);
    return 0;
}


" border="0" />
2008-04-19 19:33
bianfeng
Rank: 1
等 级:新手上路
帖 子:199
专家分:0
注 册:2007-11-28
收藏
得分:0 
链表..........

欢迎长期在线的朋友加入此群:21135958
2008-04-19 22:00
yaozidm124
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2008-4-20
收藏
得分:0 
链表..........是什么啊?作用大吗?
2008-04-20 03:48
zyhfbim1a9
Rank: 1
等 级:新手上路
帖 子:80
专家分:0
注 册:2008-3-15
收藏
得分:0 
链表,链表。。。
链表就是由很多个结构体数据组成,每个结构体数据的内部成员中有一个指向下一个结构体数据的指针变量,从而使所有的结构体数据一个接一个的关联起来。每个结构体数据就像一个节点,只要知道到其中一个,就可以找到其他的节点。
   兄弟,我刚看完结构体和链表,了解不够深入,反正自己就是这样认为了。有机会自己去看下吧。
2008-04-20 10:03
flyue
Rank: 10Rank: 10Rank: 10
来 自:江南西道
等 级:贵宾
威 望:19
帖 子:3465
专家分:1563
注 册:2006-6-20
收藏
得分:0 
链表?C语言实现起来不太容易啊,用C++的类进行封装感觉会更好!
6#的朋友是用了什么软件把代码着色的啊?

天之道,损有余而补不足.人之道则不然,损不足以奉有余.孰能有余以奉天下,唯有道者.
2008-04-20 10:06
快速回复:没人帮忙哦,飞燕帮我来看下哪里错了啊
数据加载中...
 
   



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

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