数据结构:设计实现一个一元稀疏多项式计算器

来源:百度知道 编辑:UC知道 时间:2024/07/04 15:01:52
2.设计实现一个一元稀疏多项式计算器
[问题描述]
设计一个一元稀疏多项式简单计算器。
[基本要求]
一元稀疏多项式简单计算器的基本功能是:
(1) 输入并建立多项式;
(2) 输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序;
(3) 多项式a和b相加,建立多项式a+b;
(4) 多项式a和b相减,建立多项式a-b;
(5) 计算多项式在x处的值。
(6) 计算器的仿真界面。(选做)
[测试数据]
(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)
(2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3)
(3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1)
(4) (x+x3)+(-x-x3)=0
(5) (x+x2+x3)+0=( x3+ x2+ x)
[实现提示]
用带表头结点的单链表存储多项式,多项式的项数存放在头结点中。

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//定义项式项
typedef struct Polynomial
{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial;

void Insert(Polyn p,Polyn h)
{
if(p->coef==0) free(p);//系数0释放结点
else
{
Polyn q1,q2;
q1=h;
q2=h->next;
while(q2&&p->expn<q2->expn)
{
//查找插入位置
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn)
{
//指数相同相合并
q2->coef+=p->coef;
free(p);
if(!q2->coef)
{
//系数0释放结点
q1->next=q2->next;
free(q2);
}
}
else
{
//指数