03-多项式的加减乘除

程序目标:

  1. 基本多项式加乘功能实现
  2. 零多项式输出0 0
  3. 合并同类项时有抵消
  4. 输出格式要求

代码实现细节:

  • 多项式链表实现的输入:
    对于链表的指针p而言,要想增加结点,必须对p->next进行操作使用malloc申请内存。如果对p直接进行操作相当于是p的重定向,就与原来的链表无关了。小小的怀疑,可能链表头一般默认有个空的头结点也是跟这个有关。
void input(Node *p){		//错误的定义方法
	Node *p;
	int i;
	p = q -> Next;			//对p的第一次定义
	for (i = 0; i < num; i++){
		p = (Node*)malloc(sizeof(Node));	//相当于是对p的第二次定义,把p的值给改了,而不是在q后面接上,断链了
		scanf("%d %d", p -> a, p -> n);
	}
}

void input(Node *p){		//正确的定义方法
	Node *p;
	int i;
	p = q;			//对p的定义;
	for (i = 0; i < num; i++){
		p -> next = (Node*)malloc(sizeof(Node));	//先把链给接上,再把p往后移;
		p = p -> next;
		scanf("%d %d", p -> a, p -> n);
	}
}
  • 对于乘法而言,直接使用一个插入函数即刻,插入的情况分三种:表头插入、中间,表尾。首先定位至需要插入的位置,然后根据三种情况不同进行操作即可。代码如下:
LNode * insert(LNode * list, int xs, int zs)
{
	//插入有三种情况:开头、中间、结尾
	LNode* p = list, *q;
	//定位
	while (p->Next != NULL && p ->Next ->Zs > zs)
		p = p->Next;
	//处理
	if (p-> Next== NULL) {
		p->Next = (LNode*)malloc(sizeof(LNode));
		p = p->Next; 
		p->Xs = xs; p->Zs = zs; p->Next = NULL;
	}
	else if (p->Next->Zs < zs) {
		q = (LNode*)malloc(sizeof(LNode));
		q->Xs = xs; q->Zs = zs; q->Next = p->Next; p->Next = q;
	}
	else if (p->Next->Zs == zs) {
		p->Next->Xs +=xs;
	}
	return list;
}
  • 对于有零多项式的问题选择运算过程中先不管,最后再检查处理,代码如下:
void check(LNode* list) {
	LNode *p, *q;
	p = list->Next; q = list;
	while (p) {
		if (p->Xs == 0)
			q->Next = p->Next;
		p = p->Next; q = q->Next;
	}
	if (list->Next == NULL) {
		p = list->Next = (LNode*)malloc(sizeof(LNode));
		p->Next = NULL;
		p->Zs = 0;
		p->Xs = 0;
	}
	return;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
用C++写的实现了基本的功能 #include<iostream> #include"PolyList.h" using namespace std; Polynomial::Polynomial() { coefs = NULL; exps = NULL; size = 0; cout<<"构造完成"<<endl; } Polynomial::~Polynomial() { delete []coefs; delete []exps; coefx = NULL; expx= NULL; cout<<"析构调用"<<endl; } Polynomial::Polynomial(double coef[],int exp[],int s) { coefs = new double[s]; exps = new int[s]; size = s; for(int i = 0; i<size; i++) coefs[i] = coef[i]; for(i = 0;i<size;i++) exps[i] = exp[i]; cout<<"complete!"<<endl; } Polynomial::Polynomial(const Polynomial &p) { coefs = new double[p.size]; exps = new int[p.size]; size = p.size; for(int i = 0;i < size; i++) coefs[i]= p.coefs; for(i = 0; i < size; i++) exps[i] = p.exps[i]; cout<<"copy调用"<<endl; } const Polynomial& Polynomial::operator=(const Polynomial &p)//完成测试 { if(this!=&p) { delete []coefs; delete []exps; size = p.size; coefs = new double[size]; exps = new int[size]; for(int i = 0;i < size;i++) coefs[i] = p.coefs[i]; for(int i = 0; i<size;i++) exps[i]=p.exps[i]; } return *this; }//完成测试 int Polynomial::degree() const //完成测试 { return size - 1; } double Polynomial::evaluate(double x) const//完成测试 { double sum=coefs[0]; for(int i = 1;i < size;i ++) { for(int j = 1;j <= i;j++) x*= x; sum+=coefs[i] * x; } return sum; } bool Polynomial::operator ==(const Polynomial &p) const { if (size != p.size) return false; return false; for(int i = 0; i < size; i++) if(coefs[i]!= p.coefs[i]) return false; return true; } bool Polynomial::operator !=(const Polynomial &p) const { return !(operator==(p)); } Polynomial Polynomial::operator +(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int [maxsize]; for(int i = 0;i < minsize;i ++) temp.coefs[i]=coefs[i] + p.coefs[i] for(;i < maxsize;i++) temp.coefs[i]=coefs[i]; for(int j = 0;j < maxsize;j++) temp.exps[j] = j; temp.size=maxsize; return temp; } Polynomial Polynomial::operator -(const Polynomial &p) const { int maxsize = (size > p.size) ? size:p.size; int minsize = (size < p.size) ? size:p.size; Polynomial temp; temp.coefs = new double[maxsize]; temp.exps = new int[maxsize]; for(int i = 0;i < minsize;i++) temp.coefs[i]=coefs[i] - p.coefs[i]; for(;i <maxsize;i++) temp.coefs[i]=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值