美好的一天!我正在使用Borland C ++在DSA中完成我的作业,我正在寻找使用链接列表实现添加和乘法多项式的示例。
幸运的是,我发现1适合我的任务。
但唯一的问题是它给了我一个错误,它声明:
"无法转换'无效*' to' polyNode *'
帮我解决这个问题。
以下是示例代码:
#include<stdio.h>
#include<malloc.h>
typedef struct polyNode *polyPointer;
struct polyNode {
int coef;
int expon;
polyPointer link; } polyNode;
void printPoly(polyPointer);
void insertTerm(int,int,polyPointer);
polyPointer addPoly(polyPointer,polyPointer);
main()
{
polyPointer p1,p2,p3;
p1=malloc(sizeof(polyNode));
p1->link=NULL;
p2=malloc(sizeof(polyNode));
p2->link=NULL;
insertTerm(2,2,p1);
insertTerm(5,5,p1);
insertTerm(7,4,p2);
insertTerm(-3,0,p2);
insertTerm(4,4,p2);
p3=addPoly(p1,p2);
printf("\n");
printPoly(p3);
printf("\n");
printPoly(p2);
printf("\n");
printPoly(p1);
}
void insertTerm(int coef,int expon,polyPointer root)
{
if(root->link)
{
while(root->link && root->link->expon>=expon)
root=root->link;
}
if(root->expon==expon)
{
root->coef+=coef;
return;
}
polyPointer temp;
temp=malloc(sizeof(polyNode));
temp->coef=coef;
temp->expon=expon;
temp->link=root->link;
root->link=temp;
}
void printPoly(polyPointer root)
{
printf("\n");
while(root->link)
{
printf("(%dx^%d)+",root->link->coef,root->link->expon);
root=root->link;
}
}
polyPointer addPoly(polyPointer p1, polyPointer p2)
{
polyPointer p3;
p3=malloc(sizeof(struct polyNode));
p3->link=NULL;
while(p1->link && p2->link)
{
while(p2->link && (p1->link->expon >= p2->link->expon))
{
insertTerm(p2->link->coef,p2->link->expon,p3);
p2=p2->link;
}
while(p2->link && p1->link && (p2->link->expon >= p1->link->expon))
{
insertTerm(p1->link->coef,p1->link->expon,p3);printf("1");
p1=p1->link;
}
}
while(p1->link)
{
insertTerm(p1->link->coef,p1->link->expon,p3);
p1=p1->link;
}
while(p2->link)
{
insertTerm(p2->link->coef,p2->link->expon,p3);
p2=p2->link;
}
return p3;
}
答案 0 :(得分:1)
编译器将根据编译器设置发出警告或错误(您可以设置它以便不再将其标记为错误)。但我会执行以下操作... malloc返回一个void *,这会导致类型不匹配,因为您将它分配给polyPointer。如果将返回值强制转换为适当的类型,则应该消除错误,如:
p1= (polyPointer)malloc(sizeof(polyNode));
所有其他分配的同意。