| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
只看楼主 加入收藏
Free自然
Rank: 1
等 级:新手上路
帖 子:23
专家分:3
注 册:2008-3-23
收藏
得分:1 
哈哈 笔下误这种事的确经常会有  其他的就不知道了
2010-06-22 17:28
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:3 
/*一下是算法核心*/
struct student *HB(struct student *ah,struct student *bh)/*函数定义合并两个链表*/
{
    struct student *pa1;
    pa1 = ah;
    while(ah->next!=NULL)
        ah=ah->next;
   ah->next = bh;
    return pa1;
}
这样子就可以把俩张表合并起来!
2010-06-22 18:28
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:0 
是不是感觉很简单啊?!
2010-06-22 18:28
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 13楼 zhujianiu
貌似懂了!但是我的为啥就错了呢?谢谢你
2010-06-22 18:31
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 13楼 zhujianiu
就多了一个return语句啊!咋差别就那么大
2010-06-22 18:32
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:1 
在单链表中我不喜欢用--(p->next)。感觉很不好。你怎么知道系统分配飞它的内存就一定是连续的呢?!
 个人意见!
2010-06-22 18:33
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:5 
这个能运行,并能得到正确结果(TC3)
你那个排序应该有问题!自己处理吧!

程序代码:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct student)
struct student
{long  num;
    float score;
    struct student *next;
};
    float x;
int n,sum=0;/*为全局变量*/
void main()
{

scanf("%f",&x);   /*这一句是专为可以输入浮点数而加的,随便输入一个数即可,否则在运行时可能出现:scanf : floating   point   formats   not   linked 的错误*/
    struct student *creat(void);/*函数声明建立链表*/
        struct student *HB(struct student *,struct student *);/*函数声明合并两个链表*/
    void print(struct student *);/*函数声明输出合并后的链表*/
    struct student *ahead ,*bhead,*abh;
    printf("请输入链表A:\n");
        ahead=creat();/*调用函数输入链表A*/
    sum=sum+n;
    printf("请输入链表B:\n");
    bhead=creat();/*调用函数输入链表B*/
    sum=sum+n;
    abh=HB(ahead,bhead);/*调用函数将两链表合并*/
    print(abh);/*调用函数输出合并后的链表*/
}
struct student *creat(void)/*定义函数建立链表,此函数带回一个指向表头的指针*/
{
    struct student *head=NULL;
    struct student *p1,*p2;
    n=0;
    p1=p2=(struct student *)malloc(LEN);/*开辟一个新单元,注意此时p1和p2指向的位址相同*/
    printf("input number&score of student :\n");
    printf("if number is 0 ,stop inputing ,\n");
    scanf("%ld,%f",&p1->num,&p1->score);
    printf("%ld,%f\n",p1->num,p1->score);
    while(p1->num !=0)
    {
        n=n+1;
        if(n==1)
            head=p1;/*使head指向新开辟的结点*/
        else
            p2->next=p1;/*把新结点的地址赋给第一个结点的next成员*/
        p2=p1;/*使p2指向刚才建立的结点*/
        p1=(struct student *)malloc(LEN);/*开辟另一个结点*/
        scanf("%ld,%f",&p1->num,&p1->score);
        printf("%ld,%f\n",p1->num,p1->score);
    }
    p2->next=NULL;/*链表建立结束*/
    return head;
}
/*一下是算法核心*/
struct student *HB(struct student *ah,struct student *bh)/*函数定义合并两个链表*/
{
    struct student *pa1,*pa2,*pb1,*pb2;
     long po;/*中间值*/
    pa1=pa2=ah;
    pb1=pb2=bh;
    while(pa2->next!=NULL)
        pa2=pa2->next;/*使pa2指向另一个结点*/
    pa2->next=pb2;/*把链表B的起始位址接到链表A后*/
    /*接下来是实现排序*/                                        /*这个排序应该是有问题的先注释掉*/
    /*
    while(pa1->next!=NULL)
    {
            if(pa1->num>pb1->num)
            {
                po=pa1->num;
                pa1->num=pb1->num;
                pb1->num=po;
            }
            pa1=pa1->next;
            pb1=pb1->next;
    }
    */
    return ah;
}
void print(struct student *head)/*输出函数*/
{
    struct student *p;
    p=head;
    printf("\n There are %d records:  \n",sum);
    printf("输出合并后的链表\n");
    while(p!=NULL)
    {
        printf("%ld,%f\n",p->num,p->score);
        p=p->next;/*指向下一个结点*/
    }
}

★★★★★为人民服务★★★★★
2010-06-23 08:19
magicstory
Rank: 2
等 级:论坛游民
帖 子:6
专家分:16
注 册:2009-9-21
收藏
得分:1 
回复 10楼 遮天云
你程序写的太难看了,就算你知道那些运算符的优先级和结核性,也建议你加上(),阅读程序方便很多。后面这个问题最好描述详细点
2010-06-23 11:01
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 18楼 magicstory
嗯,以后注意下
2010-06-23 17:06
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 17楼 cnfarer
谢谢
2010-06-23 17:10
快速回复:写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
数据加载中...
 
   



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

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