数据结构 实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器 代码部分

数据结构

实验三:(线性表实验-链式存储)一元稀疏多项式简单计算器 代码部分

一个一元稀疏多项式简单计算器

代码

/*
	时间:2021/03/25 
	作者:瑞雪流年
	功能:1.输入并建立多项式; 
		  2.(2)输出多项式,
		  输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,
		  ci,ei分别是第i项的系数和指数,序列按指数降序排列; 
		  3.多项式a和b相加,建立多项式a+b;
		  4.(4)多项式a和b相减,建立多项式a-b。
	 
	
*/ 

#include <iostream>
using namespace std;

//---------------------分界符----------------------- 

//链表声明 
typedef struct PNode
{
   
    float coef;        //系数
    int expn;          //指数
    struct PNode *next;//指针域
}PNode,*PnodeList;

//初始化线性表 
int InitList(PnodeList &L)
{
   
	L=new PNode;
	L->next=NULL;	//创建头结点,其next域置为NULL 
	return 0;
 }
 
 //创建链表 
void Createlist(PnodeList &P,int n)
{
   
    PnodeList s,pre,q;
    for(int i=1;i<=n;++i)          //依次输入n个非零项
    {
   
        s=new PNode;
        cin>>s->coef>>s->expn;
        pre=P;                 //用于保存q的前驱,初值为头结点
        q=P->next;             //q初始化指向首元结点
        while(q&&q->expn>s->expn)  //通过比较指数找到第一个小于输入项指数的项*q
        {
   
            pre=q;
            q=q->next;
        }
        s->next=q;                  //将输入项s插入到q和其前驱结点pre之间
        pre->next=s;
    }
}

//多项式运算:加法pa=pa+pb
void Opertion(PnodeList &pa,PnodeList &pb)
{
   
    PnodeList p1,p2,p3,r;
    int sum;
    p1=pa->next;//p1,p2初值指向首元结点
    p2=pb->next;
    p3=pa;      //p3指向和多项式当前结点,初值为pa
    while(p1&&p2)
    {
   
        if(p1->expn==p2->expn)
        {
   
              sum=p1->coef+p2->coef;
            if(sum!=0)
            {
   
                p1->coef=sum;//修改pa为两系数的和
                p3->next=p1;p3=p1;//将修改后的pa当前结点链在p3之后,p3指向p1
                p1=p1->next;
                r=p2;p2=p2->next;delete r;//删除pb当前结点
            }
            else
            {
   
                r=p1;p1=p1->next;delete r;//删除当前结点,指向后一项
                r=p2;p2=p2->next;delete r;
            }
        }
        else if(p1->expn>p2->expn)
        {
   
            p3->next=p1;     //将p1链在p3之后
            p3=p1;
            p1=p1->next;
        }
        else
        {
   
            p3->next=p2;     //将p2链在p3之后
            p3=p2;
            p2=p2->next;
        }
    }
    p3->next=p1
  • 15
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值