案例:利用单链表的基本操作来实现多项式的相加运算
注:和顺序储存结构相比,利用链式存储更加灵活,更适合表示一般的多项式,合并过程的空间复杂度为O(1)。
分析:用链表表示多项式时,每个链表结点存储多项式中的一个非零项,包括系数(coef)和指数(expn)两个数据域以及一个指针域(next)。
对应的数据结构定义为
typedef struct PNode{
float coef;
int expn;
struct PNode *next;
}PNode,*Polynomial;
代码实现
1、创建多项式:
首先要初始化一个空链表,用来表示多项式,然后逐个输入各项,通过比较,找到第一个大于该输入项指数的项,将该输入项插入到此项的前面,这样即可保证多项式链表的有序性。
算法描述:
//单个多项式指数相同时
void CreatePolyn(Polynomial &p,int n){
p = new PNode;
PNode *s , *pre , *q;
// Polynomial s , pre , q;
p->next = NULL;
int i;
for(i = 1;i<=n;++i){
printf("请输入第%d系数和指数:\n",i);
s = new PNode;
cin>>s->coef>>s->expn;
// scanf("%f %d",&s->coef,&s-