利用单链表实现多项式相加
·
用链表实现多项式相加的优点(相比于顺序表实现):
- 无需分配额外的空间,空间复杂度低
- 插入和删除操作方便
用链表实现多项式相加的具体代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef int ElemType;
typedef int Status;
#define OK 1
#define ERROR 0
typedef struct PNode{
float coef;//多项式系数
int index;//多项式指数
struct PNode *next;
}PNode,*Polynomial;
//初始化多项式
Status InitPolyn(Polynomial &p){
p=new PNode;
if(!p) return ERROR;
p->next=NULL;
return OK;
}
//创建多项式(尾插法)
void CreatePolyn(Polynomial &p,int n){
PNode *l=p;
for(int i=0;i<n;i++){
PNode *q=new PNode;
q->next=NULL;
cout<<"请输入多项式系数:";
cin>>q->coef;
cout<<"请输入多项式指数:";
cin>>q->index;
l->next=q;
l=q;
}
}
//多项式相加(以La作为相加后的多项式链表的头节点)
void AddPolyn(Polynomial &La,Polynomial &Lb){
PNode *pa=La->next;
PNode *pb=Lb->next;
PNode *pc=La;
PNode *temp_pa=NULL;
PNode *temp_pb=NULL;
while(pa&&pb){
//当指数相等时,比较系数
if(pa->index==pb->index){
//若系数相加为0,则将pa,pb均后移一位,并销毁它们之前指向的节点,pc保持不变
if(!(pa->coef+pb->coef)){
temp_pa=pa;
temp_pb=pb;
pa=pa->next;
pb=pb->next;
delete temp_pa;
delete temp_pb;
}
//若系数相加不为0,则将指数相加的结果保存在pa,并先将pa赋值给pc->next,再将pa赋值给pc;之后,pa,pb均后移,并销毁pb之前指向的节点
else{
pa->coef=pa->coef+pb->coef;
pc->next=pa;
pc=pa;
pa=pa->next;
temp_pb=pb;
pb=pb->next;
delete temp_pb;
}
}
//若pa系数小于pb系数,则先将pa赋值给pc->next,再将pa赋值给pc;之后pa后移一位,pb不变
else if(pa->index<pb->index){
pc->next=pa;
pc=pa;
pa=pa->next;
}
//若pb系数小于pa系数,则先将pb赋值给pc->next,再将pb赋值给pc;之后pb后移一位,pa不变
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
//循环结束后,若pa未到达表尾,则将pa所指节点插入到"和多项式"链表中;pb同理
pc->next=pa?pa:pb;
//销毁Lb
delete Lb;
}
//遍历多项式并打印出其中的系数和指数
Status ShowPolyn(Polynomial p){
PNode *q=p->next;
if(!q) return ERROR;;
while(q){
cout<<"多项式系数为:"<<q->coef<<endl;
cout<<"多项式指数为:"<<q->index<<endl;
q=q->next;
}
return OK;
}
int main(){
Polynomial La,Lb;
InitPolyn(La);
CreatePolyn(La,3);
InitPolyn(Lb);
CreatePolyn(Lb,4);
AddPolyn(La,Lb);
ShowPolyn(La);
}
更多推荐



所有评论(0)