⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 add.c

📁 多项式的加法 用链接表实现两个多项式的相加 输出结果多项式
💻 C
字号:
//多项式加法操作实现
#include <stdio.h>
#include <malloc.h>
#include <assert.h>

typedef struct polynode {
 int coef;
 int exp;
 struct polynode *next;
}Polynomial;


Polynomial* creat(void)
{
 Polynomial *h, *s, *head;
 int c=1, e;

 h = s = head = NULL;
 while (c != 0) {
  printf("input coef:");
  scanf("%d", &c);
  if (c) {
   s = (Polynomial*)malloc(sizeof(Polynomial));
   assert(s);
   printf("input exp:");
   scanf("%d", &e);
   s->coef = c;
   s->exp  = e;
   s->next = h;
   h = s;
  }
 }
 head = (Polynomial*)malloc(sizeof(Polynomial));
 head->next = h;
 return(head);
}

//增加一个节点
Polynomial* Insert(Polynomial* pc, int c, int e)
{
 Polynomial *s;

 s = (Polynomial*)malloc(sizeof(Polynomial));
 s->coef = c; s->exp = e;
 s->next = pc->next;
 pc->next = s;
 return(s);
}

//删除一个节点
void Delete(Polynomial* pc, Polynomial* pre)
{
 pre->next = pc->next;
 free(pc);
}


//多项式相加
Polynomial* AddPolynomial(Polynomial *a, Polynomial *b)
{
 Polynomial *p, *pre, *q;
 char c;
 int  sum;

 assert(a); assert(b);

 p = a->next; q = b->next; pre = a;
 while (p && q) {
  if (p->exp == q->exp)
   c = '=';
  else if (p->exp > q->exp)
   c = '>';
  else
   c = '<';

  switch(c) {
  case '>':
   pre = p;
   p = p->next;
   break;
  case '<':
   pre =Insert(pre, q->coef, q->exp);
   q = q->next;
   break;
  case '=':
   sum = p->coef + q->coef;
   if (sum) {
    p->coef = sum;
    pre = p;
    p = p->next;
    q = q->next;
   }
   else
   {
    Delete(p, pre);
    p = pre->next;
    q = q->next;
   }
   break;
  default:
   break;
  }
 }
 if (q)
  pre->next = q;
 return(a);
}

//输出
void Print(Polynomial* h)
{
 Polynomial *p;
 p = h->next;
 while (p) {
  printf("coef: %d exp: %d\n", p->coef, p->exp);
  p = p->next;
 };
}

void main()
{
 Polynomial *A, *B;
 A = creat();
 Print(A);
 B = creat();
 Print(B);

 A = AddPolynomial(A, B);
 printf("result:\n");
 Print(A);
 getchar();
 getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -