数据结构__稀疏多项式的加法(C语言)

本篇文章记录下稀疏多项式的加法,利用链表实现两个多项式的加法。

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef int Status;
#define OVERFLOW -1
#define ERROR 0
#define OK 1



typedef struct PNode
{
	float coef;//系数 
	int expn;//指数 
	struct PNode *next;//指针 
}PNode,*Polynomial;

int sum=0;
Polynomial Pa;
Polynomial Pb;

Status TraverseList(Polynomial L)
{
    PNode *p = L->next;             //p指向首元结点
    if(p->expn == 0)
        cout<<p->coef;
    else if(p->expn == 1)
        cout<<p->coef<<"x";
    else
        cout<<p->coef<<"x^"<<p->expn;
    p = p->next;
    while(p)
    {
        cout<<' ';
        if(p->coef > 0)
            cout<<"+ ";
        else
        {
            cout<<"- ";
            p->coef = abs(p->coef);
        }
        if(p->expn == 1)
            cout<<p->coef<<"x";
        else
            cout<<p->coef<<"x^"<<p->expn;
        p = p->next;
    }
    cout<<'\n';
    return OK;
}


void CreatePolyn(Polynomial &P,int n)
{
	P=new PNode;
	P->next=NULL;
	for(int i=1;i<=n;i++)
	{
		PNode *s=new PNode;
		cin>>s->coef>>s->expn;
		PNode *pre=P;
		PNode *q=P->next; 
		while(q&&q->expn< s->expn)
	    {
		  pre=q;
		  q=q->next;
	    }
	    s->next=q;
	    pre->next=s;
	}
}

void AddPolyn(Polynomial &Pa,Polynomial &Pb)
{
	PNode *p1=Pa->next;
	PNode *p2=Pb->next;
	PNode *p3=Pa;
    PNode *r;
	while(p1&&p2)
	{
		if(p1->expn==p2->expn)
		{
			sum=p1->coef+p2->coef;
			if(sum!=0)
			{
			  p1->coef=sum;
			  p3->next=p1;
			  p3=p1;
			  p1=p1->next;
			  
			  r=p2;p2=p2->next; delete r;	
			} 
			else 
			{
				r=p1;p1=p1->next;delete r;
				r=p2;p2=p2->next;delete r;
			}
		}
		else if(p1->expn<p2->expn)
		{
			p3->next=p1;
			p3=p1;
			p1=p1->next;
		}
		else 
		{
			p3->next=p2;
			p3=p2;
			p2=p2->next;	
		}
	}
	p3->next=p1?p1:p2;
	delete Pb; 
}

int main()
{
    int n;
    cout<<"请输入多项式A的项数:";
    cin>>n;
    cout<<"请输入多项式A的各项的系数和指数:";
    CreatePolyn(Pa, n);
    cout<<"请输入多项式B的项数:";
    cin>>n;
    cout<<"请输入多项式B的各项的系数和指数:";
    CreatePolyn(Pb, n);
    cout<<'\n';
    cout<<"A(x) = ";
    TraverseList(Pa);
    cout<<"B(x) = ";
    TraverseList(Pb);
    AddPolyn(Pa, Pb);
    cout<<"A(x) + B(x) = ";
    TraverseList(Pa);
    return 0;
}

完结!

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元稀疏多项式加法运算c语言代码实现如下: ```c #include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef struct { int coef; // 系数 int expn; // 指数 } ElemType; typedef struct { ElemType data[MAXSIZE]; int length; } SeqList; void InitList(SeqList *L) { L->length = 0; } void CreateList(SeqList *L) { printf("请输入多项式项数:"); scanf("%d", &L->length); printf("请按照指数从大到小的顺序输入多项式各项的系数和指数:\n"); for (int i = 0; i < L->length; i++) { scanf("%d%d", &L->data[i].coef, &L->data[i].expn); } } void PrintList(SeqList L) { for (int i = 0; i < L.length; i++) { printf("%dx^%d", L.data[i].coef, L.data[i].expn); if (i != L.length - 1) { printf("+"); } } printf("\n"); } void AddList(SeqList La, SeqList Lb, SeqList *Lc) { int i = 0, j = 0, k = 0; while (i < La.length && j < Lb.length) { if (La.data[i].expn > Lb.data[j].expn) { Lc->data[k++] = La.data[i++]; } else if (La.data[i].expn < Lb.data[j].expn) { Lc->data[k++] = Lb.data[j++]; } else { int sum = La.data[i].coef + Lb.data[j].coef; if (sum != 0) { Lc->data[k].coef = sum; Lc->data[k++].expn = La.data[i].expn; } i++; j++; } } while (i < La.length) { Lc->data[k++] = La.data[i++]; } while (j < Lb.length) { Lc->data[k++] = Lb.data[j++]; } Lc->length = k; } int main() { SeqList La, Lb, Lc; InitList(&La); InitList(&Lb); InitList(&Lc); printf("请输入第一个多项式:\n"); CreateList(&La); printf("请输入第二个多项式:\n"); CreateList(&Lb); printf("第一个多项式为:"); PrintList(La); printf("第二个多项式为:"); PrintList(Lb); AddList(La, Lb, &Lc); printf("它们的和为:"); PrintList(Lc); return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值