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);
    }

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值