|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 youngk1997 于 2018-5-1 15:07 编辑
#include <stdio.h>
#include <stdlib.h>
typedef struct pnode
{
int m,n;
struct pnode *next;
}pnode;
void creatpolyn(pnode *s,int b)
{
pnode *p,*q,*pre;
int i=1;
p=(pnode*)malloc(sizeof(pnode));
p->next=NULL;
for(i=1;i<=b;i++)
{
s=(pnode*)malloc(sizeof(pnode));
printf("请输入第%d项的系数:",i);
scanf("%d",&(s->m));
printf("请输入第%d项的指数:",i);
scanf("%d",&(s->n));
pre=p;
q=p->next;
while(q&&(q->n)<(s->n))
{
pre=q;
q=q->next;
}
s->next=q;
pre->next=s;
}
printf("输入完成!\n");
}
void sumpolyn(pnode *x1,pnode *x2)
{
pnode *p1,*p2,*p3,*r;
int sum=0;
p1=(pnode*)malloc(sizeof(pnode));
p2=(pnode*)malloc(sizeof(pnode));
p3=(pnode*)malloc(sizeof(pnode));
p1=x1->next;
p2=x2->next;
p3=x1;
while(p1&&p2)
{
if((p1->n)==(p2->n))
{
sum=(p1->m)+(p2->m);
if(sum!=0)
{
p1->m=sum;
p3->next=p1;
p3=p1;
p1=p1->next;
r=p2;p2=p2->next;free(r);
}
else
{
r=p1;p1=p1->next;free(r);
r=p2;p2=p2->next;free(r);
}
}
else if((p1->n)<(p2->n))
{
p3->next=p1;
p3=p1;
p1=p1->next;
}
else
{
p3->next=p2;
p3=p2;
p2=p2->next;
}
}
p3->next=p1? p1:p2;
free(x2);
}
int main()
{
pnode *p1=NULL;
pnode *p2=NULL;
int m,n;
printf("请输入几项数据:");
scanf("%d",&m);
creatpolyn(p1,m);
printf("请输入几项数据:");
scanf("%d",&n);
creatpolyn(p2,n);
sumpolyn(p1,p2);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
typedef struct pnode
{
int m,n;
struct pnode *next;
}pnode,*polyn;
void creatpolyn(polyn *x,int n)
{
pnode *p,*s,*q,*pre;
int i=1;
p=(polyn)malloc(sizeof(pnode));
p->next=NULL;
for(i=0;i<n;i++)
{
s=(polyn)malloc(sizeof(pnode));
printf("请输入第%d项的系数:",i+1);
scanf("%d",&s->m);
printf("请输入第%d项的指数:",i+1);
scanf("%d",&s->n);
if(p->next==NULL)// 判断是不是头节点
{
p->next = s;
s->next = NULL;
}
else
{
pre=p;
q=p->next;
while( q && (q->n)<(s->n) ) // 开始迭代
{
pre=q;
q=q->next;
}
if(q) // 判断是不是在链表的中间位置。
{
pre->next = s;
s->next=q;
}
else// 说明在链表尾
{
pre->next = s;
s->next = NULL;
}
}
}
}
int main()
{
polyn p1;
int m;
printf("请输入几项数据:");
scanf("%d",&m);
creatpolyn(&p1,m);
/*sumpolyn(p1,p2);*/
}
|
-
|