利用线性表的链式存储完成多项式的输入、显示并能够实现多项式的加法操作

本文介绍了一种利用链表实现多项式输入、显示及加法运算的方法。通过定义链表节点存储系数和指数,实现了多项式的动态增删,便于进行数学运算。文章详细展示了如何在链表中插入新项,计算多项式的值,并输出多项式表达式。

利用线性表的链式存储完成多项式的输入、显示并能够实现多项式的加法操作(实验报告)

#include<iostream>
#include<cstdio>
using namespace std;

struct node{
 //我们在结构体中声明系数,幂,以及下一个节点 
 int p;
 int n;
 node* next;
};
class function{
 //先在功能类中定义头节点和尾节点
 node* head;
 node* end;
public:
  function(){
   //在公有的构造函数中,先将头节点和尾节点的成员可以动态分配内存
   head = new node;
   end  = new node;
   //初始化让头节点和尾节点相连,可以理解为初始化线性表的长度为零 
   //并为头节点和尾节点赋值 (注:节点加node*,如果只是表示对应元素值,就不用加node*)
   head->n = -1;
   head->next =end;
   end->n = 999;
   end->next =NULL; 
   
  }
  //增添新的一项  
  void insert(int pi,int ni)
  {
   //让系数等于头节点,然后申明一个新的节点q,使在未插入某个数字之前
   //q永远在p的前面,且q,p相接壤 
   node* p = head;
   node* q;
   while(p->n < ni){
    //让q,p同时向后移动一个单位 
    q = p;
    p = p->next; 
   } 
   //新建一个节点,用于存放新插入的元素值,同时新的节点也可以动态分布内存 
   node* s = new node;    
   //让新建立的节点放在q节点的后面,p节点的前面,以q->s->p的顺序相连
   q->next = s;
   s->next = p;
   //给新的节点所对应的元素x赋值上它的系数pi和幂ni 
   s->p = pi;
   s->n = ni;
  }

  //计算方程最后的数值 
  int getans(int x){
  //定义一个ans值,就是最后输出的结果 
  int ans = 0;
  //先让系数在首位置  
  node* p = head;
  //然后移动光标p,使其移项 
  p = p->next;
  //循环重复上述操作 
  while(p->next){
   //定义一个x^n的值temp 
   int temp = 1;
   //循环遍历算出幂 
   for(int i = 1;i < p->n;i++){
    //确定x自身相乘的次数,就是模拟幂的运算 
    temp = temp * x;
   }
   //temp乘以它自身所对应的系数 
   ans = ans + temp * p->p;
   //接着光标调到下一个位置
 p = p->next;
 }
 //返回ans值 
 return ans;
 }
 //用于显示方程式 
 void print(){
 cout << "函数的方程是:";
 //跳过头节点(因为第一个节点不是我们想要的) 
 node* cursor = head->next; 
 cout << cursor->p << "x^" << cursor->n << " ";
 //输出一次就移动一次光标 
 cursor = cursor->next;
 //其实这里的思想和上一个getans函数的思想一模一样
  while(cursor->next)
 {
   cout << "+" << cursor->p << "x^" << cursor->n;
   cursor= cursor->next;
 } 
  cursor->next;
  cout << endl;
 }  
 };
int main()
 {
  function f;
  int size;
  int a,b;
  cout << "请输入项数:";
  cin >> size;
  
  for(int i = 0;i < size;i++){
  cout << "请按照升幂输入系数和幂次:" ;
  cin >> a >> b;
  f.insert(a,b);
 }
  
f.print();
int x;
cout << "请输入x:";
cin >> x;
cout << "结果是:" << f.getans(x);
return 0;}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值