代码如下:希望对大家有帮助,也希望大家对不足之处指正。
链表:
#include <iostream>
using namespace std;
class Polynomial{
public:
//多项式系数
double coefficient ;
//多项式指数
double index ;
//指针域
Polynomial *next ;
//打印
void display(Polynomial *head) ;
//获取链表长度
int getLengthOfPloy(Polynomial *head) ;
//多项式相加
Polynomial * addtionPolynomial(Polynomial *poly1 , Polynomial *poly2) ;
//删除指定位置的结点
void deletePolynomial(Polynomial *head , int order) ;
//插入某个某个节点
void insertPolynomial(Polynomial *head , int coefficient , int index) ;
};
//链表的创建
Polynomial* createPoly(Polynomial **flag , int n){
//创建头结点
Polynomial *head = new Polynomial ;
//上一个结点
Polynomial *pre = head ;
//for循环创建链表
for(int begin = 0 ; begin < n ; begin++) {
Polynomial *poly = new Polynomial ;
//输入相关多项式系数和指数
cout<<"请输入第"<<begin+1<<"个多项式系数和指数: " ;
cin>>poly->coefficient>>poly->index ;
//链接当前结点
pre->next = poly ;
//将前驱结点改为当前新建的poly结点
pre = poly ;
//将当前结点后继结点设置为空
poly->next = NULL ;
*flag = poly ;
}
//返回
return head ;
}
//获取链表长度(不含头结点)
int Polynomial::getLengthOfPloy(Polynomial *head){
Polynomial *pre = head->next ;
int count = 0 ;
while(pre != NULL){
pre = pre->next ;
count++ ;
}
return count ;
}
//插入设置
void Polynomial::insertPolynomial(Polynomial *head , int coefficient , int index){
//创建将要插入的结点
Polynomial *newPoly = new Polynomial ;
newPoly->coefficient = coefficient ;
newPoly->index = index ;
//由于链表中指数默认从小到大,所以 首先要定位插入位点
Polynomial * pre = head->next ;
//如果比第一个指数都小,则需要与头结点链接
if(index < pre->index){
head->next = newPoly ;
newPoly->next = pre ;
} else{
//将指针指向目标结点的前驱结点
while(index > pre->next->index){
pre = pre->next ;
//如果插入多项式的系数比其他都大,需要另外插入设置
if(pre->next == NULL){
break ;
}
}
//插入的多项式的系数最大的插入方法
if(pre->next == NULL){
pre->next = newPoly ;
newPoly->next = NULL ;
}
//并非最大最小的插入方法
else{
newPoly->next = pre->next ;
pre->next = newPoly ;
}
}
}
//删除设置
void Polynomial::deletePolynomial(Polynomial *head , int order){
if(order < 0 || order >= head->getLengthOfPloy(head)){
throw"删除操作失败,请检查是否越界" ;
}
Polynomial *p = head;
for(int begin = 0 ; begin < order ; begin++){
p = p->next ;
}
p->next = p->next->next ;
}
//多项式求和
Polynomial* Polynomial::addtionPolynomial(Polynomial *poly1 , Polynomial *poly2) {
//利用链表一的储存空间存储合并后的多项式
Polynomial *first , *second , *third ;
//判断系数之和是否为零的标记
int flag ;
first = poly1->next ;
second = poly2->next ;
third = poly1 ;
//下面进行多项式相加操作
while(first && second){
if(first->index < second->index){
third->next = first ;
first = first->next ;
third = third->next ;
}
else if(first->index == second->index){
//计算系数和并判断是否为零
flag = first->coefficient + second->coefficient ;
if(flag){
first->coefficient = flag ;
third->next = first ;
first = first->next ;
second = second->next ;
third = third->next ;
}else{
first = first->next ;
second = second->next ;
}
}else{
third->next = second ;
second =second->next ;
third = third->next ;
}
}
//判断哪个链表较长并将多余的接到third后面
third->next = (first ? first : second) ;
return poly1 ;
}
//打印链表
void Polynomial::display(Polynomial *head) {
//指向第一个结点
Polynomial *p = head->next;
while(p != NULL){
if(p->next != NULL){
if(p->next->coefficient<0){
//如果系数为负数,则不需要"+"
cout<<p->coefficient<<"x^"<<p->index;
}else{
cout<<p->coefficient<<"x^"<<p->index<<"+";
}
}else{
//如果是多项式的最后一次则其后也不需要"+"
cout<<p->coefficient<<"x^"<<p->index<<endl ;
}
p = p->next ;
}
}
int main() {
//设置尾结点
cout<<" **********欢迎使用多项式计算程序********** "<<"\n"<<endl ;
Polynomial *tail ;
int n ;
cout<<"请输入多项式中单项式的个数:" ;
cin>>n ;
Polynomial *poly1 = createPoly(&tail , n) ;
cout<<"第一个多项式为"<<"(其长度为:"<<poly1->getLengthOfPloy(poly1)<<"):"<<endl ;
poly1->display(poly1) ;
cout<<"\n" ;
int a , b ;
cout<<"请输入要插入的单项式系数和指数:" ;
cin>>a>>b ;
poly1->insertPolynomial(poly1 , a , b) ;
cout<<"插入后的多项式为"<<"(其长度为:"<<poly1->getLengthOfPloy(poly1)<<"):"<<endl ;
poly1->display(poly1) ;
cout<<"\n" ;
int c ;
cout<<"请输入删除单项式的位置:" ;
cin>>c ;
poly1->deletePolynomial(poly1 , c) ;
cout<<"删除后的多项式为"<<"(其长度为:"<<poly1->getLengthOfPloy(poly1)<<"):······①"<<endl ;
poly1->display(poly1) ;
cout<<"\n" ;
int m ;
cout<<"请输入多项式中单项式的个数:" ;
cin>>m ;
Polynomial *after ;
Polynomial *poly2 = createPoly(&after , m) ;
cout<<"第二个多项式为"<<"(其长度为:"<<poly2->getLengthOfPloy(poly2)<<"):·······②"<<endl ;
poly2->display(poly2) ;
cout<<"\n" ;
Polynomial *poly3 = poly1->addtionPolynomial(poly1 , poly2) ;
cout<<"① + ②的结果为"<<"(其长度为:"<<poly3->getLengthOfPloy(poly3)<<"):"<<endl ;
poly3->display(poly3) ;
return 0 ;
}
数组:
#include <iostream>
using namespace std ;
//定义多项式类
class Poly{
public:
// 定义两个动态数组分别储存多项式的系数和指数
int *coefficient;
int *index;
};
//构建一个多项式的方法
void createPoly(Poly &poly , int count){
//创建动态数组存储系数和指数
poly.coefficient = new int[count] ;
poly.index = new int[count] ;
//输入 对应的系数和系数
for(int begin = 0 ; begin < count ; begin++){
cout<<"请输入第"<<begin+1<<"项的系数和指数:" ;
cin>>poly.coefficient[begin]>>poly.index[begin] ;
}
}
//构造多项式相加方法
Poly addPolynomial(Poly &poly1 , int count1 , Poly &poly2 , int count2){
//创建一个新的多项式对象存储西相加后的多项式
Poly poly ;
poly.coefficient = new int[count1 + count2] ;
poly.index = new int[count1 + count2] ;
//遍历数组
int flag1=0 , flag2=0 , flag=0 ;
//数组相加
while(flag1 < count1 && flag2 < count2 ){
if(poly1.index[flag1] < poly2.index[flag2]){
poly.index[flag] = poly1.index[flag1] ;
poly.coefficient[flag] = poly1.coefficient[flag1] ;
flag++ ;
flag1++ ;
}else if(poly1.index[flag1] == poly2.index[flag2]){
if(poly1.coefficient[flag1] + poly2.coefficient[flag2]){
poly.index[flag] = poly1.index[flag1] ;
poly.coefficient[flag] = poly1.coefficient[flag1] + poly2.coefficient[flag2] ;
flag++ ;
flag1++ ;
flag2++ ;
}else{
flag1++ ;
flag2++ ;
}
}else{
poly.index[flag] = poly2.index[flag2] ;
poly.coefficient[flag] = poly2.coefficient[flag2] ;
flag++ ;
flag2++ ;
}
}
//将较长的多项式的余项连接上
if(flag1 == count1 ){
for( ; flag2 < count2 ; flag2++ ){
poly.coefficient[flag] = poly2.coefficient[flag2];
poly.index[flag] = poly2.index[flag2] ;
flag++ ;
}
}else if(flag2 == count2){
for( ; flag1 < count1 ; flag1++ ){
poly.coefficient[flag] = poly1.coefficient[flag1];
poly.index[flag] = poly1.index[flag1] ;
flag++ ;
}
}
return poly ;
}
//打印多项式的方法
void display(Poly &poly,int count){
for(int start = 0 ; start < count ; start++){
if(start != count-1){
if(poly.coefficient[start+1] < 0){
cout<<poly.coefficient[start]<<"x^"<<poly.index[start];
}else{
if(poly.index[start+1] == 0){
cout<<poly.coefficient[start]<<"x^"<<poly.index[start] ;
}else{
cout<<poly.coefficient[start]<<"x^"<<poly.index[start]<<"+" ;
}
}
}
else{
cout<<poly.coefficient[start]<<"x^"<<poly.index[start] ;
}
//如果出现某项指数为零 则停止打印
if(poly.index[start+1] == 0){
break ;
}
}
}
int main(){
cout<<" **********欢迎使用多项式计算程序********** "<<"\n"<<endl ;
int n ;
cout<<"请输入多项式中单项式的个数:" ;
cin>>n ;
Poly poly1 ;
createPoly(poly1 , n);
display(poly1,n);
cout<<"···········①" ;
cout<<"\n" ;
int m ;
cout<<"请输入多项式中单项式的个数:" ;
cin>>m ;
Poly poly2 ;
createPoly(poly2 , m);
display(poly2,m);
cout<<"···········②" ;
cout<<"\n" ;
cout<<"① + ② 的和为:" <<endl ;
Poly poly = addPolynomial(poly1 , n , poly2 , m) ;
display(poly , m+n) ;
return 0;
}