一元多项式的运算

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

typedef struct Node{
	float  data;//系数
    int    index;//指数
	struct Node *next;//指针->指向下一个节点
}Dnode;


void add_Dnode_item(Dnode  *L, float c, int e);
void PolyoAdd(Dnode *L1, Dnode *L2);//多项式L1与L2对应项相加得到L3
void Display(Dnode *L); // 输出多项式


int main(){
	float c;
	int e,k; 
	Dnode *LA = (Dnode *)malloc(sizeof(Dnode));
	LA->next = NULL;
	Dnode *LB = (Dnode *)malloc(sizeof(Dnode));
	LB->next = NULL;
	printf("建立多项式A(输入的第一个数为系数,第二个数为指数,以0 0结束循环):\n");	
	do{
		scanf("%f %d", &c, &e); //获取系数及幂次
		if (c != 0) {
			add_Dnode_item(LA, c, e);
		}    
	} while (c != 0);
	printf("成功建立多项式A\n");
	Display(LA);
	printf("\n建立多项式B输入的第一个数为系数,第二个数为指数,以0 0结束循环:\n");
	do
	{
		scanf("%f%d", &c, &e); //获取系数及幂次
		if (c != 0)
			add_Dnode_item(LB, c, e);
	} while (c != 0);
	printf("成功建立多项式B\n");
	Display(LB);
	getchar();
	PolyoAdd(LA, LB);
}



// 输出多项式
void Display(Dnode *L){
	Dnode *p;
	p = L->next;
	if (p != NULL){
		printf("多项式为\t");
		if (p->index==0)
			printf("%0.2f", p->data);
		else
		    printf("%0.2f*x^%d", p->data, p->index);
		p = p->next;
		while (p != NULL){
			if (p->data > 0)
				printf("+%0.2f*x^%d", p->data, p->index);
			else
				printf("%0.2f*x^%d", p->data, p->index);
			p = p->next;
		}
		printf("\n");
	}
	else
		printf("无数据!\n");
}

//插入
void  add_Dnode_item(Dnode  *L, float c, int e){
//  将项(c,e)插入到以L为头指针的一元多项式链表中   
//  插入后的一元多项式链表是按指数从小到大有序   
	Dnode  *pre = L , *p = L->next , *q ;  
	float  x;
	while (p != NULL && p->index < e){
		pre = p;  
		p = p->next;
	}
	if (p == NULL) 	{          //  已到链表最后,开辟新结点,插入到最后   
		q = (Dnode *)malloc(sizeof(Dnode));
		q->data = c;      
		q->index = e;
		q->next = p;        
		pre->next = q;
	}
	else if (p->index == e){    //   有同类项  
		x = p->data + c;
		if (x==0){             //   合并后系数为0,删除该结点 
			pre->next = p->next;
			free(p); 
			p = pre->next;
		}
		else  p->data = x;     //   合并后系数不为0,修改系数    
	}
	else{                      //   没有同类项 ,开辟新结点,直接插入   
		q = (Dnode *)malloc(sizeof(Dnode));
		q->data = c;  
		q->index = e;
		q->next = p; 
		pre->next = q;
	}
}



//多项式L1与L2对应项相加得到L3
void PolyoAdd(Dnode *L1, Dnode *L2){
	Dnode *p2, *p1;
	float c;
	int e;
	Dnode *L3 = (Dnode *)malloc(sizeof(Dnode));
	L3->next = NULL;
	p1 = L1->next;
	p2 = L2->next;
	while (p1!= NULL){
		c = p1->data;
		e = p1->index;
		if (c != 0)
		add_Dnode_item(L3, c, e);
		p1 = p1->next;
	}
	while (p2 != NULL){
		c = p2->data;
		e = p2->index;
		if (c != 0)
		add_Dnode_item(L3, c, e);
		p2 = p2->next;
	}
	getchar();
	printf("相加后");
	Display(L3);
}