我有个用C++写的,你把输入输出语句改一下就可以了,cin 改成scanf cout改成 printf,加个头文件#include
#include
#include
#include
using namespace std;
typedef struct node
{int coef,exp;
struct node *next;
}node,*linklist;
void initlinklist(linklist L)
{ L=(linklist)malloc(sizeof(node));
L->next=NULL;
}
void creatlinklist(linklist L)
{ cout<<"请输入多项式的系数和指数,直到输入系数0结束\n";
node *s,*r;
int i,j;
int flag=1;
r=L;
while(flag)//尾插法建立链表
{ cin>>i;
if(i!=0)
{ s=(linklist )malloc(sizeof(node));
cin>>j;
s->coef=i;
s->exp=j;
r->next=s;
r=s;
}
else
{flag=0;r->next=NULL;}
}
}
void orderlinklist(linklist L)
{ node *r,*p,*q,*s,*t;
r=L->next;//指向第一个元素
p=r->next;//指向第二个元素
r->next=NULL; //从第一个元素后断链
while(p!=NULL)
{ q=p->next;
s=L;
r=s->next;
if(!r)
{
s->next=p;p=q;
continue;
}
while(p->exp>r->exp&&r->next)
{ s=s->next;
r=r->next;
}
if(r->next==NULL&&p->exp>r->exp)
{ p->next=NULL;
r->next=p;
}
if(p->exp==r->exp)
{ int sum=p->coef+r->coef;
if(sum==0)
{ s->next=r->next;
free(r); t=p;p=q;free(t);
}
else
{ r->coef=sum; t=p;p=q;free(t);}
}
else
{ p->next=r;
s->next=p;
p=q;
}
}
cout<<"整理后的多项式是:\n";
}
void printlinklist(linklist L)
{ node *r;
r=L->next;
while(r)
{if(r->exp==0)
cout<
else{if(r->coef<0)
cout<<"("<
else
cout<
}
r=r->next;
if(r)
cout<<'+';
}
cout<
void unitlinklist(linklist A,linklist B)
{node *p,*q,*t,*r;
p=A->next;
q=B->next;
r=A;
while(p&&q)
{ if(p->exp
{ r->next=p;
r=p;
p=p->next;
}
else if(p->exp==q->exp)
{ int sum=p->coef+q->coef;
if(sum==0)
{t=p;p=p->next;free(t);
t=q;q=q->next;free(t);
}
else
{ p->coef=sum;
r->next=p;
r=p;
p=p->next;
t=q;
q=q->next;
free(t);
}
}
else
{r->next=q;
r=q;
q=q->next;
}
}
if(p)
r->next=p;
else
r->next=q;
cout<<"合并后的多项是:\n";
}
int main()
{
linklist A;node i;
A=&i;
initlinklist(A);
creatlinklist(A);
printlinklist(A);
orderlinklist(A);
printlinklist(A);
linklist B; node j;
B=&j;
initlinklist(B);
creatlinklist(B);
printlinklist(B);
orderlinklist(B);
printlinklist(B);
unitlinklist(A,B);
printlinklist(A);
system("pause");
return 0;
}
#include
#include
#define null 0
typedef struct node //定义用于存储每一项的结构体
{
float coef;
int exp;
struct node *next;
}slnode;
void initiate(slnode **h) //开辟新空间
{
*h=(slnode*)malloc(sizeof(slnode));
(*h)->next=null;
}
void append(slnode *p,int a,float b) //通过比较,将新加入的元素插入到适当的位置,以满足链表中X的指数递增。
{
slnode *s,*r1,*r2;
s=(slnode*)malloc(sizeof(slnode));
s->coef=b;
s->exp=a;
r1=p;
r2=p->next;
if(r2==null)
{
r1->next =s;
s->next=null;
}
else
{
while(r2!=null)
{
if(s->exp
{
s->next =r2 ;
r1->next =s;
break;
}
else
{
r1=r2;
r2=r2->next ;
}
}
if(r2==null&&s->exp >r1->exp)
{
r1->next=s;
s->next=null;
}
}
}
void travel(slnode *p) //遍历输出链表
{
slnode *s;
s=p->next;
while(s!=null)
{
printf("%.2fx^%d",s->coef,s->exp);
if(s->next!=null&&s->next->coef >0)
printf("+");
s=s->next;
}
putchar('\n');
}
void input(slnode *p,int n) // 输入
{
int i,exp; float coef;
for(i=1;i<=n;i++)
{
printf("请输入第%d个X的指数:",i);
scanf("%d",&exp);
printf("请输入第%d个X的系数(不为0):",i);
scanf("%f",&coef);
append(p,exp,coef);
}
}
void add(slnode *p,slnode *q) //实现多项式合并
{
slnode *r1,*r2,*s,*t;
r1=p;
r2=p->next ;
s=q->next;
while(s!=null)
{
if(r2!=null)
{
if(s->exp
{
t=(slnode *)malloc(sizeof(slnode));
t->coef=s->coef ;
t->exp =s->exp ;
t->next=null;
r1->next =t;
t->next =r2;
r1=t;
s=s->next ;
}
else if(s->exp == r2->exp )
{
r2->coef =r2->coef +s->coef ;
if(r2->coef ==0)
{
r1->next=r2->next ;
r2=r1->next;
}
s=s->next;
}
else if( s->exp >r2->exp )
{
r2=r2->next ;
r1=r1->next ;
}
}
else
{
t=(slnode *)malloc(sizeof(slnode));
t->coef=s->coef ;
t->exp =s->exp ;
t->next=null;
r1->next=t;
r1=r1->next ;
r2=r1->next ;
s=s->next ;
}
}
}
void main() //主函数
{
int n;
slnode *L1,*L2;
initiate(&L1);
initiate(&L2);
printf("请输入第一个多项式的位数:");
scanf("%d",&n);
printf("请输入第一个多项式:\n");
input(L1,n);
printf("请输入第二个多项式的位数:");
scanf("%d",&n);
printf("请输入第二个多项式:\n");
input(L2,n);
printf("第一个多项式为:");
travel(L1);
printf("第二个多项式为:");
travel(L2);
printf("合并后:");
add(L1,L2);
travel(L1);
}