一元多项式的表示及相加【代码】

  1 #include <iostream>
  2 #include<stdlib.h>
  3 
  4 using namespace std;
  5 
  6 typedef struct LNode
  7 {
  8     int coef;//系数
  9     int expn;//指数
 10     struct LNode *next;
 11 }LNode,*LinkList;
 12 
 13 
 14 int CreateList_L(LinkList &L,int n)//默认指数按升序排列
 15 {
 16     LinkList p,q;
 17     for(int i=0;i<n;i++)
 18     {
 19          p=(LinkList)malloc(sizeof(LNode));
 20          cout<<"输入元素系数:";
 21          cin>>p->coef;
 22          cout<<"输入元素指数:";
 23          cin>>p->expn;
 24          if(i==0)L=p;
 25          else q->next=p;
 26          q=p;
 27          p->next=NULL;
 28     }
 29    return 0;
 30 }
 31 
 32 
 33 int Display_L(LinkList L)
 34 {
 35     if(!L)cout<<"f(x)=0"<<endl;
 36     else
 37     {
 38         cout<<"f(x)="<<L->coef;
 39         if(L->expn)cout<<"*"<<"x^"<<L->expn;
 40         L=L->next;
 41         while(L)
 42         {
 43             if(L->coef>0)
 44             {
 45                 cout<<"+";
 46                 cout<<L->coef<<"*"<<"x^"<<L->expn;
 47             }
 48             else cout<<L->coef<<"*"<<"x^"<<L->expn;
 49             L=L->next;
 50         }
 51     }
 52     return 0;
 53 }
 54 
 55 
 56 int AddPolyn(LinkList La,LinkList Lb,LinkList &Lc)
 57 {
 58     LinkList pa,pb,p;
 59     int k=1;
 60     pa=La;pb=Lb;
 61     //确定“和多项式”的头结点
 62     while(k)
 63     {
 64          if(pa->expn<pb->expn){p=Lc=pa;pa=pa->next;k=0;}
 65          else if(pa->expn>pb->expn){p=Lc=pb;pb=pb->next;k=0;}
 66          else
 67          {
 68              pa->coef+=pb->coef;
 69              if(pa->coef)
 70              {
 71                   p=Lc=pa;
 72                   pa=pa->next;
 73                   k=0;
 74              }
 75              else
 76              {
 77                  pa=pa->next;
 78                  pb=pb->next;
 79                  if(!pa||!pb) break;
 80              }
 81          }
 82     }
 83     if(!pb&&pa){p=Lc=pa;pa=pa->next;}
 84     if(!pa&&pb){p=Lc=pb;pb=pb->next;}
 85     if(!pa&&!pb) Lc=NULL;
 86     //确定接下来的节点
 87     while(pa&&pb)
 88     {
 89         if(pa->expn<pb->expn){p->next=pa;p=pa;pa=pa->next;}
 90         else if(pa->expn>pb->expn){p->next=pb;p=pb;pb=pb->next;}
 91         else
 92         {
 93             pa->coef+=pb->coef;
 94             if(pa->coef)
 95             {
 96                   p->next=pa;
 97                   p=pa;
 98                   pa=pa->next;
 99                   pb=pb->next;
100             }
101             else
102             {
103                   pa=pa->next;
104                   pb=pb->next;
105             }
106 
107         }
108     }
109     while(!pb&&pa)
110     {
111         p->next=pa;
112         p=pa;
113         pa=pa->next;
114     }
115     while(!pa&&pb)
116     {
117         p->next=pb;
118         p=pb;
119         pb=pb->next;
120     }
121     return 0;
122 }
123 
124 
125 
126 int main()
127 {
128     LinkList La,Lb,Lc;
129     int m,n;
130     cout<<"请输入La中的元素个数:";
131     cin>>m;
132     CreateList_L(La,m);
133     cout<<"请输入Lb中的元素个数:";
134     cin>>n;
135     CreateList_L(Lb,n);
136     AddPolyn(La,Lb,Lc);
137     Display_L(Lc);
138     return 0;
139 }

 

转载于:https://www.cnblogs.com/journal-of-xjx/p/5901469.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一元多项式可以使用结构体来表示,其中结构体包括两个成员变量,一个是系数,另一个是指数。下面是一元多项式的结构体定义: ```c typedef struct node { float coef; // 系数 int expn; // 指数 struct node *next; } Polynomial; ``` 其中,`next` 是指向下一个结点的指针,可以用来构造链表。 下面是一元多项式相加的具体代码实现: ```c #include <stdio.h> #include <stdlib.h> typedef struct node { float coef; // 系数 int expn; // 指数 struct node *next; } Polynomial; // 生成多项式 Polynomial *create() { Polynomial *p, *r, *head; head = (Polynomial*)malloc(sizeof(Polynomial)); head->next = NULL; r = head; int n, i; float c; printf("请输入多项式的项数:"); scanf("%d", &n); for (i = 1; i <= n; i++) { printf("请输入第%d项的系数和指数:", i); scanf("%f %d", &c, &e); p = (Polynomial*)malloc(sizeof(Polynomial)); p->coef = c; p->expn = e; p->next = NULL; r->next = p; r = p; } return head; } // 多项式相加 Polynomial *add(Polynomial *pa, Polynomial *pb) { Polynomial *pc, *qa, *qb, *p, *q, *t; pc = (Polynomial*)malloc(sizeof(Polynomial)); pc->next = NULL; qa = pa->next; qb = pb->next; p = pc; while (qa && qb) { if (qa->expn < qb->expn) { t = (Polynomial*)malloc(sizeof(Polynomial)); t->coef = qa->coef; t->expn = qa->expn; t->next = NULL; p->next = t; p = t; qa = qa->next; } else if (qa->expn > qb->expn) { t = (Polynomial*)malloc(sizeof(Polynomial)); t->coef = qb->coef; t->expn = qb->expn; t->next = NULL; p->next = t; p = t; qb = qb->next; } else { t = (Polynomial*)malloc(sizeof(Polynomial)); t->coef = qa->coef + qb->coef; t->expn = qa->expn; t->next = NULL; p->next = t; p = t; qa = qa->next; qb = qb->next; } } while (qa) { t = (Polynomial*)malloc(sizeof(Polynomial)); t->coef = qa->coef; t->expn = qa->expn; t->next = NULL; p->next = t; p = t; qa = qa->next; } while (qb) { t = (Polynomial*)malloc(sizeof(Polynomial)); t->coef = qb->coef; t->expn = qb->expn; t->next = NULL; p->next = t; p = t; qb = qb->next; } return pc; } // 输出多项式 void print(Polynomial *p) { Polynomial *q = p; while (q->next) { q = q->next; printf("%.2fx^%d", q->coef, q->expn); if (q->next) { printf(" + "); } } printf("\n"); } int main() { Polynomial *pa, *pb, *pc; printf("请输入第一个多项式:\n"); pa = create(); printf("请输入第二个多项式:\n"); pb = create(); pc = add(pa, pb); printf("相加后的多项式为:\n"); print(pc); return 0; } ``` 此代码中使用了单链表来存储多项式,`create` 函数用来生成多项式,`add` 函数用来实现多项式相加,`print` 函数用来输出多项式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值