C语言数据结构一元多项式

    //定义多项式最大项数
    #include<stdio.h>
    #include<malloc.h>
    #define MAX 20
    //定义存放多项式的数组类型
    typedef struct{
    	float  coef;
    	int   exp;
    }PolyArray[MAX];
    //定义单链表结点类型
    typedef struct  pnode{
    	float coef;
    	int exp;
    	struct  pnode *next;
    }PolyNode;
    //输出多项式链表
    void  DispPoly(PolyNode  *L){
    	PolyNode  *p = L->next;
    	while (p != NULL){
    		printf("%gX^%d", p->coef, p->exp);
    		p = p->next;
    	}
    	printf("\n");
    }
    //一元多项式的表示
    //建立多项式链表)
    void  createListR(PolyNode *L, PolyArray a, int n){
    	PolyNode *s, *r;
    	int i;
    	L = (PolyNode *)malloc(sizeof(PolyNode));
    	L->next = NULL;
    	r = L;
    	for (i = 0; i<n; i++){
    		s = (PolyNode*)malloc(sizeof(PolyNode));
    		s->coef = a[i].coef;
    		s->exp = a[i].exp;
    		s->next = NULL;
    		r->next = s;
    		r = s;
    	}
    	r->next = NULL;
    }
    //原多项式链表排序
    void sort(PolyNode *head)
    {
    	PolyNode *p = head->next, *q, *r;
    	if (p != NULL)
    	{
    		r = p->next;
    		p->next = NULL;
    		p = r;
    		while (p != NULL){
    			r = p->next;
    			q = head;
    			while (q->next != NULL && q->next->exp >p->exp)
    				q = q->next;
    			p->next = q->next;
    			q->next = p;
    			p = r;
    		}
    	}
    }
    //一元多项式的相加
    void add(PolyNode *ha, PolyNode *hb, PolyNode *hc)
    {
    	PolyNode*pa = ha->next, *pb = hb->next, *s, *tc;
    	float c;
    	hc = (PolyNode*)malloc(sizeof(PolyNode));
    	tc = hc;
    	while (pa != NULL && pb != NULL)
    	{
    		if (pa->exp > pb->exp)
    		{
    			s = (PolyNode*)malloc(sizeof(PolyNode));
    			s->exp = pa->exp; s->coef = pa->coef;
    			s->next = NULL;
    			tc->next = s;
    			tc = s;
    			pa = pa->next;
    		}
    		else if (pa->exp <pb->exp)
    		{
    			s = (PolyNode *)malloc(sizeof(PolyNode));
    			s->exp = pb->exp;
    			s->coef = pb->coef;
    			s->next = NULL;
    			tc->next = s;
    			tc = s;
    			pb = pb->next;
    		}
    		else {
    			c = pa->coef + pb->coef;
    			if (c)
    			{
    				s = (PolyNode *)malloc(sizeof(PolyNode));
    				s->exp = pa->exp;
    				s->coef = c;
    				s->next = NULL;
    				tc->next = s; tc = s;
    			}
    			pa = pa->next;
    			pb = pb->next;
    		}
    	}
    	if (pb != NULL)
    		pa = pb;
    	while (pa != NULL)
    	{
    		s = (PolyNode*)malloc(sizeof(PolyNode));
    		s->exp = pa->exp;
    		s->coef = pa->coef;
    		s->next = NULL;
    		tc->next = s;
    		tc = s;
    		pa = pa->next;
    	}
    	tc->next = NULL;
    }
    //主函数的设定及调用
    void main(){
    	PolyNode *ha, *hb, *hc;
    	PolyArray a = { { 1.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 } };
    	PolyArray b = { { 3.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 }, { 5.4, 10 } };
    	createListR(ha, a, 4);
    	createListR(hb, b, 5);
    	printf("原多项式A :"); DispPoly(ha);
    	printf("原多项式 B :"); DispPoly(hb);
    	sort(ha);
    	sort(hb);
    	printf("有序多项式A :");
    	DispPoly(ha);
    	printf("有序多项式B :");
    	DispPoly(hb);
    	add(ha, hb, hc);
    	printf("多项式相加:");
    	DispPoly(hc);
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    //定义多项式最大项数
    #include<stdio.h>
    #include<malloc.h>
    #define MAX 20
    //定义存放多项式的数组类型
    typedef struct{
    	float  coef;
    	int   exp;
    }PolyArray[MAX];
    //定义单链表结点类型
    typedef struct  pnode{
    	float coef;
    	int exp;
    	struct  pnode *next;
    }PolyNode,*linklist;
    //输出多项式链表
    void  DispPoly(linklist L){
    	linklist  p = L->next;
    	while (p != NULL){
    		printf("%gX^%d", p->coef, p->exp);
    		p = p->next;
    	}
    	printf("\n");
    }
    //一元多项式的表示
    //建立多项式链表)
    void  createListR(linklist &L, PolyArray a, int n){
    	linklist s, r;
    	int i;
    	L = (linklist)malloc(sizeof(PolyNode));
    	L->next = NULL;
    	r = L;
    	for (i = 0; i<n; i++){
    		s = (linklist)malloc(sizeof(PolyNode));
    		s->coef = a[i].coef;
    		s->exp = a[i].exp;
    		s->next = NULL;
    		r->next = s;
    		r = s;
    	}
    	r->next = NULL;
    }
    //原多项式链表排序
    void sort(linklist head)
    {
    	linklist p = head->next, q, r;
    	if (p != NULL)
    	{
    		r = p->next;
    		p->next = NULL;
    		p = r;
    		while (p != NULL){
    			r = p->next;
    			q = head;
    			while (q->next != NULL && q->next->exp >p->exp)
    				q = q->next;
    			p->next = q->next;
    			q->next = p;
    			p = r;
    		}
    	}
    }
    //一元多项式的相加
    void add(linklist ha, linklist hb, linklist hc)
    {
    	linklist pa = ha->next, pb = hb->next, s, tc;
    	float c;
    	hc = (linklist)malloc(sizeof(PolyNode));
    	tc = hc;
    	while (pa != NULL && pb != NULL)
    	{
    		if (pa->exp > pb->exp)
    		{
    			s = (linklist)malloc(sizeof(PolyNode));
    			s->exp = pa->exp; s->coef = pa->coef;
    			s->next = NULL;
    			tc->next = s;
    			tc = s;
    			pa = pa->next;
    		}
    		else if (pa->exp <pb->exp)
    		{
    			s = (linklist)malloc(sizeof(PolyNode));
    			s->exp = pb->exp;
    			s->coef = pb->coef;
    			s->next = NULL;
    			tc->next = s;
    			tc = s;
    			pb = pb->next;
    		}
    		else {
    			c = pa->coef + pb->coef;
    			if (c)
    			{
    				s = (linklist)malloc(sizeof(PolyNode));
    				s->exp = pa->exp;
    				s->coef = c;
    				s->next = NULL;
    				tc->next = s; tc = s;
    			}
    			pa = pa->next;
    			pb = pb->next;
    		}
    	}
    	if (pb != NULL)
    		pa = pb;
    	while (pa != NULL)
    	{
    		s = (linklist)malloc(sizeof(PolyNode));
    		s->exp = pa->exp;
    		s->coef = pa->coef;
    		s->next = NULL;
    		tc->next = s;
    		tc = s;
    		pa = pa->next;
    	}
    	tc->next = NULL;
    }
    //主函数的设定及调用
    void main(){
    	linklist ha, hb, hc;
    	PolyArray a = { { 1.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 } };
    	PolyArray b = { { 3.2, 0 }, { 2.5, 1 }, { 3.2, 3 }, { 2.5, 5 }, { 5.4, 10 } };
    	createListR(ha, a, 4);
    	createListR(hb, b, 5);
    	printf("原多项式A :"); DispPoly(ha);
    	printf("原多项式 B :"); DispPoly(hb);
    	sort(ha);
    	sort(hb);
    	printf("有序多项式A :");
    	DispPoly(ha);
    	printf("有序多项式B :");
    	DispPoly(hb);
    	add(ha, hb, hc);
    	printf("多项式相加:");
    	DispPoly(hc);
    }

猜你喜欢

转载自blog.csdn.net/qq_40738945/article/details/85217705