一元多项式的加法和乘法

#include <iostream>
#include <stdlib.h>
using namespace std;

typedef struct
{
	int coef;	//系数项
	int exp;	//指数项
}ElemType; 

typedef struct Node
{
	ElemType data;
	struct Node *next;
}LNode,*LinkList;

void InitList(LinkList &L);
void PolyCreate(LinkList l);
void Output(LinkList l);
LinkList PolyAdd(LinkList La,LinkList Lb);
LinkList Multiply(LinkList l,int coef,int exp);
LinkList PolyMultiply(LinkList la,LinkList lb);

void ShowMenu()
{
    cout<<"1、演示一元多项式的加法:"<<endl;
    cout<<"2、演示一元多项式的乘法:"<<endl;
    cout<<"0、退出"<<endl;
}

int main()
{
    ShowMenu();
    int x;
    while(1)
    {
        cout<<"请输入你要进行的操作:";
        cin>>x;
        switch(x)
        {
            case 1:{
                LinkList l;
                InitList(l);
                PolyCreate(l);
                Output(l); 

                LinkList L;
                InitList(L);
                PolyCreate(L);
                Output(L);
                LNode *p = PolyAdd(l,L);
                cout<<"相加后的多项式为:"<<endl;
                Output(p);
                break;
            }
            case 2:{
                LinkList l1;
                InitList(l1);
                PolyCreate(l1);
                Output(l1);
                LinkList l2;
                InitList(l2);
                PolyCreate(l2);
                Output(l2);
                LNode *temp = PolyMultiply(l1,l2);
                cout<<"相乘后的多项式为:"<<endl;
                Output(temp);
                break;
            }
            case 0:{
                exit(0);
                break;
            }
        }
    }

	return 0;
}

void InitList(LinkList &L)
{
	L = new LNode;
	L->next = NULL;
}

void PolyCreate(LinkList l)
{
	int c,e;
	LNode *p = l;
	cout<<"请按照指数递增的顺序建立该一元多项式:"<<endl;
	while(1)
	{
		cout<<"input the coef,exp of term ,exp=-1 will end:"<<endl;
		cin>>c;
		cin>>e;
		if(e==-1)
			break;
		LNode *s = new LNode;
		s->data.coef = c;
		s->data.exp = e;
		p->next = s;
		p = s;
	}
	p->next = NULL;
}

void Output(LinkList l)
{
	cout<<"The poly is:"<<endl;
	LNode *p;
	p=l->next;
	while(p)
	{
		cout<<p->data.coef;
		if(p->data.exp)
			cout<<"X^"<<p->data.exp;
		if(p->next && p->next->data.coef>0)
			cout<<"+";

		p = p->next;
	}
	cout<<"\n";
}

LinkList PolyAdd(LinkList La,LinkList Lb)
{
	LNode *p,*q,*tail,*temp;
	int sum;
	p = La->next;
	q = Lb->next;
	tail = La;

	while(p && q)
	{
		if(p->data.exp<q->data.exp)
		{
			tail->next = p;
			tail = p;
			p = p->next;
		}
		else if(p->data.exp == q->data.exp)
		{
			sum = p->data.coef+q->data.coef;
			if(sum!=0)
			{
				p->data.coef = sum;
				tail->next = p;		tail = p;
				p = p->next;
				temp = q;	q = q->next;
				delete temp;
			}
			else	//若系数和为0,删除节点p,q;并将指针指向下一个节点
			{
				temp = p;	p = p->next; 	delete temp;
				temp = q;	q = q->next;	delete temp;
			}
		}
		else
		{
			tail->next = q;
			tail = q;
			q = q->next;
		}
	}

	if(p)
		tail->next = p;
	else
		tail->next = q;

		delete Lb;

	return La;
}

//多项式与单项式相乘,该单项式为coef X^exp
LinkList Multiply(LinkList l,int coef,int exp)
{
    LNode *p,*q;
    LinkList Poly = new LNode;
    p = Poly;
    q = l->next;
    while(q)
    {
        p->next = new LNode;
        p = p->next;
        p->data.coef = (q->data.coef*coef);
        p->data.exp = (q->data.exp+exp);
        q = q->next;
    }
    p->next = NULL;

    return Poly;
}

//多项式与多项式相乘
LinkList PolyMultiply(LinkList la,LinkList lb)
{
    LinkList Poly;
    InitList(Poly);
    LNode *p = lb->next;
    while(p)
    {
        PolyAdd(Poly,Multiply(la,p->data.coef,p->data.exp));
        p = p->next;
    }

    return Poly;
}

时间: 2024-08-28 18:55:13

一元多项式的加法和乘法的相关文章

数据结构之一元多项式的加法和乘法

Polynomial.h 1 #define _CRT_SECURE_NO_DEPRECATE 2 #include "Polynomial.h" 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 int ListLength(NormLinkList *L) 7 { 8 int num = 0; 9 Link p = NextPos(L, GetHead(L)); 10 while(p) 11 { 12 num++;

数据结构第二次上机实验【链表实现多项式的加法和乘法】

利用链表实现一元多项式的加法和乘法 #define null 0 #include "stdio.h" #include "stdlib.h" #include "math.h" int op; typedef struct { float coef;//系数 int expn;//指数 }term; typedef struct Lnode { term data; Lnode *next; }*Link,*Linklist; int cmp(

一元多项式的加减乘法

输入一元多项式的参数,然后根据一元多项式加法减法乘法的计算法则,求解最终结果.用到了结构体,指针,操作的时候要注意. 不多说,上代码: 1 #include <stdio.h> 2 #include <malloc.h> 3 4 typedef struct node{ 5 float coef; 6 int expn; 7 struct node *next; 8 }PLOY; 9 10 void start(){ 11 printf("****************

一个基础而奇怪的问题:算法执行加法、乘法、除法性能无区别?

一个基础而奇怪的问题:算法执行加法.乘法.除法性能无区别? 计算机原理分析觉得:加法.乘法和除法的计算性能依次减少,但减少到什么程度? 编写C程序用30次百万数据计算来測试时间差异性,代码例如以下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i

[DataStructure]多项式加法与乘法--B.链表存储(适用于零元系数多的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 基本思想:加法和乘法都是把得数项直接链接在链表后面,最后统一做一个Merge&Sort工作即可.方便又快捷. (1)建立存储结构 1 struct _Poly 2 { 3 int factor;//系数 4 int Index;//幂 5 struct _Poly* next;//下一节点 6 }; 7 _Poly* poly[MAXTIMES+1]; 8 int Sum[MAXTIMES+1

[DataStructure]多项式加法与乘法--A.数组存储(适用于零元系数少的多项式)

数据结构大作业…… 发出来大家乐呵乐呵…… 一.问题描述 给出N个多项式,求他们的和与积 二.解题报告 (1)建立存储结构 1 struct _Poly 2 { 3 double Data[MAXTIMES+1]; 4 int Times; 5 }; 6 struct _Poly Poly[N+1]; (2)主程序架构 1 int main() 2 { 3 int Sum; 4 cout<<"请输入要做运算的多项式数量"<<endl; 5 cin>>

2015 蓝桥杯:6.加法变乘法

*/--> pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;} pre.src {background-color: Black; color: White;}

大数加法、乘法

1 #include<iostream> 2 3 #include<stdio.h> 4 5 #include<string.h> 6 7 #define Len 3000//大数的长度 8 9 using namespace std; 10 11 int Input (char n[])//将大数读入的函数 12 13 { 14 15 char s[Len]; 16 17 int i,l; 18 19 20 21 for(i=0; i<Len; i++) n[i

一个基础而奇怪的问题:算法运行加法、乘法、除法性能无差别?

一个基础而奇怪的问题:算法运行加法.乘法.除法性能无差别? 计算机原理分析认为:加法.乘法和除法的计算性能依次降低,但降低到什么程度? 编写C程序用30次百万数据计算来测试时间差异性,代码如下: #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 1000000 void add(float x[], long n) { float sum = 0; for(long i = 0; i &