一元稀疏多项式的运算
实现要求
⑴ 输入并建立多项式;
⑵ 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。所有输出都按指数降序排列。
⑶ 多项式A和B相加,建立多项式A+B,输出相加的多项式;
⑷ 多项式A和B相减,建立多项式A-B,输出相减的多项式;
⑸ 多项式A和B相乘,建立多项式A×B,输出相乘的多项式;
⑹ 设计一个菜单,至少具有上述操作要求的基本功能。
一元稀疏多项式的运算分析
⑴ 输入并建立有序多项式
每输入一项(c,e),将其插入到多项式链表的合适位置,在插入时:
*有同类项(指数相同):系数相加(或者不插入,显示已存在该项的提示)
* 没有同类项(指数不相同):直接插入
当输入和插入完成后,所建立的多项式链表是按指数大小有序的。
⑵ 多项式A和B相加/相减
① 将多项式A的每一项(c,e),将其插入到和/差多项式链表的合适位置;
② 将多项式B的每一项(c,e),根据其指数e找到在和/差多项式链表的正确位置,在插入时:
*有同类项(指数相同):系数相加/相减
*没有同类项(指数不相同):直接插入
当多项式B的所有项插入完成后,所建立的多项式链表是按指数大小有序的。(类似于集合的并操作)
⑶ 多项式A和B相乘
对于多项式A的每一项(ca,ea)和多项式B的每一项(cb,eb),将积项(ca×cb,ea+eb)插入到积多项式链表的合适位置,在插入时中:
*有同类项(指数相同):系数相加
*没有同类项(指数不相同):直接插入
当所有的积项(ca×cb,ea+eb)插入完成后,所建立的多项式链表是按指数大小有序的。
实现代码
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct Node{
float data;
int flag;
struct Node *next;
}Dnode;
// 输出多项式
void Display(Dnode *L){
//打印多项式
Dnode *p;
p = L->next;
if (p != NULL){
printf("多项式为\t");
if (p->flag==0)
printf("%0.2f", p->data);
else
printf("%0.2f*x^%d", p->data, p->flag);
p = p->next;
while (p != NULL)
{
if (p->data > 0)
printf("+%0.2f*x^%d", p->data, p->flag);
else
printf("%0.2f*x^%d", p->data, p->flag);
p = p->next;
}
printf("\n");
}
else
printf("无数据!\n");
}
//插入
void add_Dnode_item(Dnode *L, float c, int e, int k)
/* 将项(c,e)以k的方式插入到以L为头指针的一元多项式链表中 */
/* 插入后的一元多项式链表是按指数从小到大有序 */
{
Dnode *pre = L, *p = L->next, *q; float x;
while (p != NULL&&p->flag<e)
{
pre = p; p = p->next;
}
if (p == NULL) /* 已到链表最后,开辟新结点,插入到最后 */
{
q =