经典算法:用链表实现多项式加减

本文介绍了一种使用单链表实现一元多项式的方法,包括多项式的建立、排序、相加、相减等操作,并提供了完整的代码实现及测试用例。

设有两个一元多项式:

p(x)= p_0+p_1x+p_2x^2+\cdots+p_nx^n

q(x)= q_0+q_1x+q_2x^2+\cdots+q_mx^m

多项式项的系数为实数,指数为整数,设计实现一元多项式的下列操作:

  • 多项式链表建立:以(系数,指数)(例如(3,0)(-1,1))方式输入项建立多项式,返回所建立的链表的头指针;在输入一个多项式时如果遇到两项指数相同,可以选择舍弃、覆盖或者系数相加操作;
  • 多项式排序:将所建立的多项式按指数非递减(从小到大)进行排序(也可以在建立时保证有序,创建一个有序链表);3,3  2,2  4,4  1,0
  • 多项式相加:实现两个多项式相加操作。操作生成一个新的多项式,原有的两个多项式不变,可以返回生成的多项式的头指针;

P(X)=1+2x+3x^2; Q(x)= 3x+x^3+x^4; P+Q =1+5x+3x^2+x^3+x^4

P(x)-1+2x+3x^2; Q(x)= -2x+x^3; P(x)+Q(x) =1+3x^2+x^3

  • 多项式相减:实现两个多项式相减操作。操作生成一个新的多项式,原有的两个多项式不变,可以返回生成的多项式的头指针;
  • 多项式的输出:按照p_0+p_1x+p_2x^2+\cdots+p_nx^n格式输出多项式;
  • 主函数通过调用多项式链表建立函数,通过文件读取或者控制台输入两个多项式并分别输出;输出排序后的两个多项式;调用多项式相加函数实现多项式相加、相减操作,输出操作结果。

/*    多项式用单链表表示   */
typedef struct Pnode
{
    int deg;
    float coff;
    struct Pnode *next;
} PolyNode;

PolyNode * ListInitiate_poly();

int PolyListDelete(PolyNode *head, int i, PolyNode *x);
int PolyListInsert(PolyNode *head, int i, PolyNode x);
int PolyListLength(PolyNode *head);
int PolyListGet(PolyNode *head, int i, PolyNode *x);
void PolyDestroy(PolyNode *head);


PolyNode*  ListInitiate_poly()//链表初始化
{
    PolyNode * head = (PolyNode *)malloc(sizeof(PolyNode));
    head->next = NULL;
    return head;
}

int PolyListLength(PolyNode *head) //多项式的项数
{
    PolyNode *p = head;
&nb

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值