一般情况下,一元$n$次多项式可写成:
其中,$p_i$是指数为$e_i$的项的非零系数,且满足
因此,我们可以采用线性表(定义:线性表是由$n$个数据元素构成的有限序列,比如数组、向量、链表等等)来表示:
其中,每一项的指数$i$可以用其系数$p_i$的序号表示。
在通常的应用中,多项式的次数比较大,使得线性表的长度很难确定,因此我们可以考虑链表,向量也可以(c++中)。举例说明:假如我们用数组来表示下面的多项式:
    可见,我们需要一个大小为$1549$的数组来表示,而实际有用的信息只有数组中的$4$个元素,其他地方都是$0$,所以造成了空间浪费。并且如果我们事先不知道多项式的最高次项的指数,则我们需要定义一个足够大的数组来存储,这样做显然浪费了很多内存空间。我们可以使用链表来解决上述问题:
在计算机内,我们用一个结点来存放多项式的一项,为了节约空间,并和书写习惯一致,只需保留非零系数的项。每个结点分系数、指数和指针三个域,如下图所示,其中的指针next指明下一项的位置:

例如,下面多项式分别为$A,B$:
用循环链表可以表示如下:

    两个多项式相加的运算规则很简单,对所有指数相同的项,将其对应系数相加,若和不为零,则构成和多项式中的一项;将所有指数不相同的项复制到和多项式中。具体实现时,我们以上面的多项式$A$,$B$为测试样例。可采用另建链表来存储和的多项式的方法,或采用把一个多项式归并入另一个多项式的方法。我们以后种方法为例,即将$A+B$的和多项式存储到$A$中。具体程序实现如下(我采用了循环链表):
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 
 | #include<stdio.h>#include<stdlib.h>
 #include<conio.h>
 
 typedef struct pnode//用链表来存储多项式信息
 {
 float coef;
 int   exp;
 struct pnode *next;
 }polynode;
 
 polynode *Create()
 {
 float coef;
 int exp;
 polynode *head,*s,*r;
 head=(polynode*)malloc(sizeof(polynode));
 head->coef=0;
 head->exp=-1;
 r=head;
 printf("请输入各项的系数和指数:\n");
 while(1)
 {
 scanf("%f %d",&coef,&exp);
 if(coef!=0)
 {
 s=(polynode*)malloc(sizeof(polynode));
 s->coef=coef;
 s->exp=exp;
 r->next=s;
 r=s;
 }
 else
 break;
 }
 
 r->next=head;
 return head;
 
 }
 
 polynode*PolyAdd(polynode* pa,polynode* pb)
 {
 polynode *p,*q,*r,*s;
 float x;
 p=pa->next;
 q=pb->next;
 s=pa;
 
 while((p!=pa)&&(q!=pb))
 {
 if(p->exp<q->exp)
 {
 s=p;
 p=p->next;
 }
 else if(p->exp>q->exp)
 {
 r=q->next;
 q->next=p;
 s->next=q;
 s=q;
 q=r;
 }
 else
 {
 x=p->coef+q->coef;
 if(x!=0)
 {
 p->coef=x;
 s=p;
 }
 else
 {
 s->next=p->next;
 free(p);
 }
 p=s->next;
 r=q;
 q=q->next;
 free(r);
 }
 
 }
 
 if(q!=pb)
 {
 r=q;
 while(r->next!=pb)
 r=r->next;
 s->next=q;
 r->next=pa;
 }
 return pa;
 }
 
 void Output(polynode *head)
 {
 polynode *p;
 printf("系数和指数分别为:");
 p=head->next;
 while(p!=head)
 {
 printf("%.1f , %d    ",p->coef,p->exp);
 p=p->next;
 }
 printf("\n");
 }
 
 void main()
 {
 polynode* ha,*hb;
 printf("\n建立多项式A:");
 ha=Create();
 Output(ha);
 printf("\n建立多项式B:");
 hb=Create();
 Output(hb);
 
 ha=PolyAdd(ha,hb);
 printf("\n多项式A+B:");
 Output(ha);
 }
 
 | 
运行结果如下:
