写出程序容易,写对难啊!!麻烦给看一下到底怎么错了啊?
题目要求,已知有两个链表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)
再次感谢