DS||一元多項式求積、求和(線性表)

#include"stdio.h"
#include<malloc.h> 

#define Maxlen 1000
typedef int ElemType;

#define Success 1
#define ERROR 0
typedef int Status;

typedef struct PolyNode
{
	int coef;
	int exp;
	struct PolyNode *next;
}PolyNode,*PolyList;

Status CreatPoly(PolyList *Lp)
{
	int c;
	int e;
	PolyNode *rear,*newnode;
	(*Lp)=(PolyNode *)malloc(sizeof(PolyNode));
	rear = (*Lp);
	while(scanf("%d %d",&c,&e)!=EOF)
	{
		if(c==-1&&e==-1)
			break;
		newnode = (PolyNode *)malloc(sizeof(PolyNode));
		newnode->coef =c;
		newnode->exp =e;
		rear->next =newnode;
		rear = newnode;
	}
	rear->next = NULL;
	return Success;
}
Status Print(PolyList L)
{
	PolyNode *p = L->next;
	if(p==NULL)
	{
		printf("0 ");
	}
	while(p!=NULL)
	{
		printf("%d %d ",p->coef ,p->exp );
		p=p->next ;
	}
	printf("\n");
}
Status PolyAdd(PolyList La,PolyList Lb,PolyList *Lc)
{
	PolyNode *pa=La->next,*pb=Lb->next,*pc,*newnode;
	int c,e;
	(*Lc)=(PolyNode *)malloc(sizeof(PolyNode));
	pc = (*Lc);
	while(pa!=NULL||pb!=NULL)
	{
		if(pb==NULL||(pa!=NULL && pa->exp > pb->exp ))
		{
			c= pa->coef ;
			e=pa->exp ;
			pa=pa->next ;
		}
		else if(pa==NULL||(pb!=NULL&&pa->exp <pb->exp ))
		{
			c=pb->coef ;
			e=pb->exp ;
			pb=pb->next ;
		}
		else if(pa!=NULL && pb!=NULL)
		{
			c=pa->coef +pb->coef ;
			e= pa->exp ;
			pa=pa->next ;
			pb=pb->next ;
		}
		if(c!=0)
		{
			newnode=(PolyNode *)malloc(sizeof(PolyNode));
			newnode->coef =c;
			newnode->exp =e;
			pc->next =newnode;
			pc = newnode;
		}
	}
	pc->next =NULL;
	return Success;
}
Status PolyAdd2(PolyList Temp,PolyList *Lc)
{
	PolyNode *pt,*pc,*q;
	pt=Temp->next;
	pc = (*Lc);
	while(pc->next &&pt)
	{
		if(pc->next->exp <pt->exp )
		{
			q=pt->next ;
			pt->next =pc->next ;
			pc->next =pt;
			pt=q; 
		}
		else if(pc->next->exp >pt->exp )
		{
			pc=pc->next ;
		}
		else
		{
			pc=pc->next ;
			pc->coef +=pt->coef ;
			q=pt->next ;
			free(pt);
			pt=q;
		}
	}
	if(pt)
		pc->next =pt;
	return Success;
}
Status PolyMultiple(PolyList La,PolyList Lb,PolyList *Lc)
{
	PolyNode *pa=La->next,*pb,*pc,*pt,*newnode;
	int c,e;
	PolyList Temp=(PolyNode *)malloc(sizeof(PolyNode));
	
	(*Lc)=(PolyNode *)malloc(sizeof(PolyNode));
	(*Lc)->next =NULL;
	while(pa)
	{
		pb=Lb->next;
		pt=Temp;
		while(pb)
		{
			c=pa->coef *pb->coef ;
			e=pa->exp +pb->exp ;
			if(c!=0)
			{
				newnode = (PolyNode *)malloc(sizeof(newnode));
				newnode->coef =c;
				newnode->exp =e;
				pt->next =newnode;
				pt=newnode;
			}
			pb=pb->next ;
		}
		pt->next =NULL;
		PolyAdd2(Temp,Lc);
		pa=pa->next ;
	}
	return Success;
}

int main()
{
	PolyList La,Lb,Lc;
	CreatPoly(&La);
	CreatPoly(&Lb);
	PolyMultiple(La,Lb,&Lc);
	Print(Lc);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章