函数功能说明:
Void InitList(PolyNode &L) /初始化多项式单链表*/
Int GetLength(PolyNode*L) /求多项式单链表的长度/
PolyNode GetElem(PolyNode *L,int i) /返回多项式单链表中第i个结点的指针*/
PolyNode Locate(PolyNode *L,float c,inte) /在多项式单链表中按值查找*/
int InsElem(PolyNode &L,float c,inte,int i) /在多项式单链表中插入一个结点*/
int DelElem(PolyNode L,int i) /在多项式单链表中删除一个结点*/
void DispList(PolyNode L) /输出多项式单链表的元素值*/
void CreaPolyList(PolyNode &L,floatC[],int E[],int n) /创建一个链表 */
void SortPloy(PolyNode &L) /对L的多项式单链表按expn域递增排序*/
PolyNode AddPoly(PolyNode *pa,PolyNode*pb) /两个多项式单链表合并*/
2、以单链表作为存储结构插入多项式:多项式按幂从高到低,以“系数,幂”的格式输入,并以“0,0”结束。
3、多项式相加,单链表合并 :
1)两个多项式对应的单链表头节点开始,依次扫描各节点;
2)若两表的节点均非空:比较二者的幂,按幂大者先入表。如果幂相等,则系数相加再入表;
3) 若有一链表已空,则将非空链表插入新表;
4) 输出合并后的链表;
5) 主函数调用,完成多项式相加。
算法实现:
一.一元多项式加法:
1.建立多项式:尾插法建立一元多项式的链表,通过键盘输入多项式的系数和指数,以输入系数0为结束标志,并约定建立一元多项式链表时,总是按指数从小到大的顺序排列。
2.输出多项式:从单链表的第一项开始逐项读出系数和指数,按多项式的形式输出。
3.多项式相加:设La和Lb分别表示两个多项式。Lc表示和多项式。p,q,r分别表示指向单链表的当前项比较指数大小。
(1)若La->expexp,则结点p应是和多项式中的一项,将p复制到r,并使p后移。
(2)若La->exp = Lb->exp,则将两个结点中的系数相加,当和不为0时,La的系数域加上Lb的系数域作为Lc的系数域;若和为0,则和多项式中没有这一项,p,q后移。
(3)若La->exp > Lb->exp,则将结点q复制到Lc中,q后移。
二.一元多项式减法
算法:将减数多项式的所有系数先变为相反数,然后调用多项式相加的函数进行运算。
三.一元多项式乘法
两个多项式相乘,应该是第一个多项式中的每一项分别与第二个多项式相乘,将相乘得到的结果都存在第一个多项式中,再调用合并多项式的函数。我写的多项式相乘用到了两重循环,合并多项式也用到了两重循环。
代码如下:
#include <stdio.h>
#include <malloc.h>
typedef struct node
{ float coef; /*序数*/
int expn; /*指数*/
struct node *next; /*指向下一个结点的指针*/
} PolyNode;
void InitList(PolyNode *&L) /*初始化多项式单链表*/
{
L=(PolyNode *)malloc(sizeof(PolyNode)); /*建立头结点*/
L->next=NULL;
}
int GetLength(PolyNode *L) /*求多项式单链表的长度*/
{
int i=0;
PolyNode *p=L->next;
while (p!=NULL) /*扫描单链表L,用i累计结点个数*/
{
i++;p=p->next;
}
return i;
}
PolyNode *GetElem(PolyNode