| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1061 人关注过本帖
标题:写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
只看楼主 加入收藏
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:19 
写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
题目要求,已知有两个链表a和b,每个链表总的节点包括学号,成绩,要求把两个链表合并,按学号升序排列
由于我们检查出来,我也不知道我的算法对不对,如果您检查出来了,请看看我的算法对不!能不能实现题目要求,若不能请您给改下!谢谢
以下是我写的程序:
#include<stdio.h>
#include<malloc.h>
#define LEN sizeof(struct student)
struct student
{long  num;
    float score;
    struct student *next;
};
int n,sum=0;/*为全局变量*/
void main()
{
    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 srudent *creat(void)/*定义函数建立链表,此函数带回一个指向表头的指针*/
{
    struct student *head;
    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);
    head=NULL;/*先使链表为空*/
    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);
    }
    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("%s,%lf",p->num,p->score);
        p=p->next;/*指向下一个结点*/
    }
}

一下是编译器报出的错误:我不知道为什么错了
--------------------Configuration: 简单链表 - Win32 Debug--------------------
Compiling...
简单链表.cpp
f:\c\简单链表.cpp(47) : error C2440: 'return' : cannot convert from 'struct student *' to 'struct srudent *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.

简单链表.obj - 1 error(s), 0 warning(s)




再次感谢












搜索更多相关主题的帖子: 麻烦 
2010-06-22 11:27
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:2 
struct srudent *creat(void)/*定义函数建立链表,此函数带回一个指向表头的指针*/
student输错了

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2010-06-22 11:53
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 2楼 waterstar
郁闷!我无语了,搞了半天居然是笔下误啊!!!绝对不能原谅自己,太谢谢你了
2010-06-22 12:01
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:1 
回复 楼主 遮天云
其实这种错误看下编译出错提示就知道了!

★★★★★为人民服务★★★★★
2010-06-22 12:04
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 4楼 cnfarer
我试着改了的,不过没改出来   自己
2010-06-22 12:06
南国利剑
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:29
帖 子:1165
专家分:3536
注 册:2010-4-12
收藏
得分:1 
路过,祝楼主好运!

南国利剑
2010-06-22 12:33
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:2 
--pa2->next=pb2;/*把链表B的起始位址接到链表A后*/
这个能行吗?!!!

★★★★★为人民服务★★★★★
2010-06-22 12:59
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:1 
那错误提示好像是你返回值有问题
2010-06-22 15:14
zhujianiu
Rank: 4
等 级:业余侠客
帖 子:126
专家分:244
注 册:2010-5-14
收藏
得分:2 
一个结构体名字错了
2010-06-22 15:19
遮天云
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:农村一小伙
等 级:贵宾
威 望:12
帖 子:1132
专家分:2671
注 册:2010-6-1
收藏
得分:0 
回复 7楼 cnfarer
我的这个程序确实晕行不起,麻烦给个思路啊,那怎么连接两个链表啊?不就是让第一个的表尾指向另一个的表头吗?我怎么越分析我就是找不到这错误呢,我运行时直接弹"出内存不能为read"
2010-06-22 17:14
快速回复:写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
数据加载中...
 
   



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

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