数据结构
实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器 代码部分
一个一元稀疏多项式简单计算器
代码
/*
时间:2021/03/25
作者:瑞雪流年
功能:1.输入并建立多项式;
2.(2)输出多项式,
输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,
ci,ei分别是第i项的系数和指数,序列按指数降序排列;
3.多项式a和b相加,建立多项式a+b;
4.(4)多项式a和b相减,建立多项式a-b。
*/
#include <iostream>
using namespace std;
//---------------------分界符-----------------------
//链表声明
typedef struct PNode
{
float coef; //系数
int expn; //指数
struct PNode *next;//指针域
}PNode,*PnodeList;
//初始化线性表
int InitList(PnodeList &L)
{
L=new PNode;
L->next=NULL; //创建头结点,其next域置为NULL
return 0;
}
//创建链表
void Createlist(PnodeList &P,int n)
{
PnodeList s,pre,q;
for(int i=1;i<=n;++i) //依次输入n个非零项
{
s=new PNode;
cin>>s->coef>>s->expn;
pre=P; //用于保存q的前驱,初值为头结点
q=P->next; //q初始化指向首元结点
while(q&&q->expn>s->expn) //通过比较指数找到第一个小于输入项指数的项*q
{
pre=q;
q=q->next;
}
s->next=q; //将输入项s插入到q和其前驱结点pre之间
pre->next=s;
}
}
//多项式运算:加法pa=pa+pb
void Opertion(PnodeList &pa,PnodeList &pb)
{
PnodeList p1,p2,p3,r;
int sum;
p1=pa->next;//p1,p2初值指向首元结点
p2=pb->next;
p3=pa; //p3指向和多项式当前结点,初值为pa
while(p1&&p2)
{
if(p1->expn==p2->expn)
{
sum=p1->coef+p2->coef;
if(sum!=0)
{
p1->coef=sum;//修改pa为两系数的和
p3->next=p1;p3=p1;//将修改后的pa当前结点链在p3之后,p3指向p1
p1=p1->next;
r=p2;p2=p2->next;delete r;//删除pb当前结点
}
else
{
r=p1;p1=p1->next;delete r;//删除当前结点,指向后一项
r=p2;p2=p2->next;delete r;
}
}
else if(p1->expn>p2->expn)
{
p3->next=p1; //将p1链在p3之后
p3=p1;
p1=p1->next;
}
else
{
p3->next=p2; //将p2链在p3之后
p3=p2;
p2=p2->next;
}
}
p3->next=p1