Advertisement
Bewin

LLpoly

Nov 22nd, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.93 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. struct node
  4. {
  5.     int exp;
  6.     int coeff;
  7.     struct node *next;
  8. };
  9.  
  10. struct node *ReadPoly();
  11. struct node *AddPoly(struct node *p1,struct node *p2);
  12. struct node *MultiplyPoly(struct node *p1,struct node *p2);
  13. void Display(struct node *head);
  14. int main()
  15. {
  16.     struct node *Phead,*Qhead,*Rhead;
  17.     Phead=Qhead=Rhead=NULL;
  18.     int c;
  19.     printf("***FIRST POLYNOMIAL***");
  20.     Phead=ReadPoly();
  21.     printf("\nThe Inputted Polynomial 1 is: \n");
  22.     Display(Phead);
  23.     printf("\n");
  24.     printf("\n***SECOND POLYNOMIAL***");
  25.     Qhead=ReadPoly();
  26.     printf("\nThe Inputted Polynomial 2 is: \n");
  27.     Display(Qhead);
  28.     printf("\n");
  29.     do
  30.     {
  31.         printf("\n***LINKED LIST OPERATIONS***\n");
  32.         printf("1.ADD POLYNOMIAL\n2.MULTIPLY POLYNOMIAL\n3.EXIT");
  33.         printf("\nEnter your choice: ");
  34.         scanf("%d",&c);
  35.         switch(c)
  36.         {
  37.             case 1:
  38.                 Rhead=AddPoly(Phead,Qhead);
  39.                 printf("\nResultant Polynomial is: \n");
  40.                 Display(Rhead);
  41.                 break;
  42.             case 2:
  43.                 Rhead=MultiplyPoly(Phead,Qhead);
  44.                 printf("Resultant Polynomial is: \n");
  45.                 Display(Rhead);
  46.                 break;
  47.             case 3:
  48.                 printf("EXIT");
  49.                 break;
  50.             default:
  51.                 printf("Enter valid choice(1,2,3)");
  52.                 break;
  53.         }
  54.     }while(c!=3);
  55. }
  56.  
  57. struct node *ReadPoly()
  58. {
  59.     int terms,i,c,e;
  60.     struct node *n,*head=NULL,*ptr;
  61.     printf("\nEnter the number of terms: ");
  62.     scanf("%d",&terms);
  63.     for(i=0;i<terms;i++)
  64.     {
  65.         n=(struct node*)malloc(sizeof(struct node));
  66.         printf("\nEnter the coefficient (%d): ",(i+1));
  67.         scanf("%d",&c);
  68.         printf("\nEnter the exponent (%d): ",(i+1));
  69.         scanf("%d",&e);
  70.         n->coeff=c;
  71.         n->exp=e;
  72.         n->next=NULL;
  73.         if(head==NULL)
  74.         {
  75.             head=ptr=n;
  76.         }
  77.         else
  78.         {
  79.             ptr->next=n;
  80.             ptr=n;
  81.         }
  82.         ptr->next=NULL;
  83.     }
  84.     return head;
  85. }
  86.  
  87. void Display(struct node *head)
  88. {
  89.     struct node *ptr;
  90.     ptr=head;
  91.     while(ptr->next!=NULL)
  92.     {
  93.         printf("%d(x^%d)+",ptr->coeff,ptr->exp);
  94.         ptr=ptr->next;
  95.     }
  96.     printf("%d(x^%d)",ptr->coeff,ptr->exp);
  97. }
  98.  
  99. struct node *AddPoly(struct node *p1,struct node *p2)
  100. {
  101.     struct node *p,*q,*n,*head=NULL,*ptr;
  102.     p=p1;
  103.     q=p2;
  104.     while(p!=NULL &&q!=NULL)
  105.     {
  106.         n=(struct node*)malloc(sizeof(struct node));
  107.         n->next=NULL;
  108.         if(p->exp==q->exp)
  109.         {
  110.             n->exp=p->exp;
  111.             n->coeff=p->coeff + q->coeff;
  112.             p=p->next;
  113.             q=q->next;
  114.         }
  115.         else if(p->exp>q->exp)
  116.         {
  117.             n->exp=p->exp;
  118.             n->coeff=p->coeff;
  119.             p=p->next;
  120.         }
  121.         else
  122.         {
  123.             n->exp=q->exp;
  124.             n->coeff=q->coeff;
  125.             q=q->next;
  126.         }
  127.         if(head==NULL)
  128.         {
  129.             head=ptr=n;
  130.         }
  131.         else
  132.         {
  133.             ptr->next=n;
  134.             ptr=n;
  135.         }
  136.     }
  137.     while(p!=NULL)
  138.     {
  139.         n=(struct node*)malloc(sizeof(struct node));
  140.         n->exp=p->exp;
  141.         n->coeff=p->coeff;
  142.         n->next=NULL;
  143.         p=p->next;
  144.         if(head==NULL)
  145.         {
  146.             head=ptr=n;
  147.         }
  148.         else
  149.         {
  150.             ptr->next=n;
  151.             ptr=n;
  152.         }
  153.     }
  154.     while(q!=NULL)
  155.     {
  156.         n=(struct node*)malloc(sizeof(struct node));
  157.         n->exp=q->exp;
  158.         n->coeff=q->coeff;
  159.         n->next=NULL;
  160.         q=q->next;
  161.         if(head==NULL)
  162.         {
  163.             head=ptr=n;
  164.         }
  165.         else
  166.         {
  167.             ptr->next=n;
  168.             ptr=n;
  169.         }
  170.     }
  171.     return head;
  172. }
  173.  
  174. struct node *MultiplyPoly(struct node *p1,struct node *p2)
  175. {
  176.     struct node *p,*q,*r,*n,*head,*prev;
  177.     p=p1;
  178.     q=p2;
  179.     head=NULL;
  180.     while(p!=NULL)
  181.     {
  182.         while(q!=NULL)
  183.         {
  184.             n=(struct node*)malloc(sizeof(struct node));
  185.             n->exp=p->exp + q->exp;
  186.             n->coeff=p->coeff * q->coeff;
  187.             n->next=NULL;
  188.             if(head==NULL)
  189.             {
  190.                 head=r=n;
  191.             }
  192.             else
  193.             {
  194.                 r->next=n;
  195.                 r=n;
  196.             }
  197.             q=q->next;
  198.         }
  199.         p=p->next;
  200.         q=p2;
  201.     }
  202.     p=head;
  203.     while(p!=NULL)
  204.     {
  205.         prev=p;
  206.         q=p->next;
  207.         while(q!=NULL)
  208.         {
  209.             if(p->exp==q->exp)
  210.             {
  211.                 p->coeff=p->coeff + q->coeff;
  212.                 prev->next=q->next;
  213.                 free(q);
  214.                 q=prev->next;
  215.             }
  216.             else
  217.             {
  218.                 prev=q;
  219.                 q=q->next;
  220.             }
  221.         }
  222.         p=p->next;
  223.     }
  224.     return head;
  225. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement