利用棧實現兩個一元多項式相加

  1. 程序運行結果如下:  
程序運行結果如下:
  1. <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>  
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>
  1. # include<stdlib.h>  
  2. struct node  
  3. {  
  4.     int exp;  
  5.     float coef;  
  6.     struct node *next; /*指向結構體指針*/   
  7. };  
  8. typedef struct node ListNode;  
  9. ListNode *createpoly() //創建多項式鏈表   
  10. {  
  11.   ListNode *h=NULL,*p,*q=NULL;  
  12.   int e;  
  13.   float c;  
  14.   printf("請輸入係數和指數:");  
  15.   scanf("%f,%d",&c,&e);  
  16.   while(e!=0||c!=0)  
  17.   {  
  18.     p=(ListNode*)malloc(sizeof(ListNode));  
  19.     p->coef=c;  
  20.     p->exp=e;  
  21.     p->next=NULL;  
  22.     if(h==NULL)  
  23.     h=p;  
  24.     else  
  25.     q->next=p;  
  26.     q=p;  
  27.     printf("請輸入係數和指數:");  
  28.     scanf("%f,%d",&c,&e);  
  29.       }   
  30.       return h;  
  31. }  
  32. void disppoly(ListNode *h)  
  33. /*輸出多項式*/  
  34. {  
  35.     ListNode *p;  
  36.     p=h;  
  37.     while(p!=NULL)  
  38.     {  
  39.         if(p->exp==0)  
  40.         printf("%.2f",p->coef);  
  41.         else  
  42.         printf("%fx^%d",p->coef,p->exp);  
  43.         p=p->next;  
  44.         if(p!=NULL)  
  45.         printf("+");  
  46.     }  
  47.     printf("\n");  
  48.  }   
  49.  ListNode *addpoly(ListNode *h1,ListNode *h2)  
  50.  /*將兩個多項式相加*/  
  51.  {  
  52.     ListNode *p,*r=NULL,*s1,*s2,*s=NULL;  
  53.     float c;  
  54.     int e;  
  55.     s1=h1;  
  56.     s2=h2;  
  57.     while(s1!=NULL&&s2!=NULL)  
  58.     {  
  59.         if(s1->exp==s2->exp)  
  60.         {  
  61.             c=s1->coef+s2->coef;  
  62.             e=s1->exp;  
  63.             s1=s1->next;  
  64.             s2=s2->next;  
  65.          }  
  66.          else if(s1->exp>s2->exp)  
  67.          {  
  68.             c=s1->coef;  
  69.             e=s1->exp;  
  70.             s1=s1->next;  
  71.          }  
  72.          else  
  73.          {c=s2->coef;  
  74.          e=s2->exp;  
  75.          s2=s2->next;  
  76.          }  
  77.          if(c!=0)  
  78.          {  
  79.             p=(ListNode*)malloc(sizeof(ListNode));  
  80.             p->coef=c;  
  81.             p->exp=e;p->next=NULL;  
  82.             if(s==NULL)  
  83.             s=p;  
  84.             else  
  85.             r->next=p;  
  86.             r=p;  
  87.          }  
  88.      }  
  89.      while(s1!=NULL)  
  90.      {  
  91.         c=s1->coef;  
  92.         e=s1->exp;  
  93.         s1=s1->next;  
  94.         if(c!=0)  
  95.         {  
  96.             p=(ListNode*)malloc(sizeof(ListNode));  
  97.             p->coef=c;  
  98.             p->exp=e;p->next=NULL;  
  99.             if(s==NULL)  
  100.             s=p;  
  101.             else  
  102.             r->next=p;  
  103.             r=p;  
  104.          }  
  105.      }  
  106.      while(s2!=NULL)  
  107.      {  
  108.         c=s2->coef;  
  109.         e=s2->exp;  
  110.         s2=s2->next;  
  111.         if(c!=0)  
  112.         {  
  113.             p=(ListNode*)malloc(sizeof(ListNode));  
  114.             p->coef=c;  
  115.             p->exp=e;p->next=NULL;  
  116.             if(s==NULL)  
  117.             s=p;  
  118.             else  
  119.             r->next=p;  
  120.             r=p;  
  121.          }  
  122.      }  
  123.      return s;  
  124.   }   
  125. void deletepoly(ListNode *h)  
  126. //釋放多項式所佔的內存單元   
  127. {  
  128.     ListNode *p,*r=h;  
  129.     while(r!=NULL)  
  130.     {  
  131.         p=r->next;  
  132.         free(r);  
  133.         r=p;  
  134.     }  
  135. }  
  136. int main()  
  137. {  
  138.     ListNode *head1,*head2,*head;  
  139.     printf("創建第一個多項式:\n");   
  140.     head1=createpoly();  
  141.     printf("創建第二個多項式:\n");  
  142.     head2=createpoly();  
  143.     printf("將兩個多項式相加:\n");  
  144.     head=addpoly(head1,head2);  
  145.     disppoly(head);  
  146.     deletepoly(head);  
  147. }  
  148.   </span>  
# include<stdlib.h>
struct node
{
	int exp;
	float coef;
	struct node *next; /*指向結構體指針*/ 
};
typedef struct node ListNode;
ListNode *createpoly() //創建多項式鏈表 
{
  ListNode *h=NULL,*p,*q=NULL;
  int e;
  float c;
  printf("請輸入係數和指數:");
  scanf("%f,%d",&c,&e);
  while(e!=0||c!=0)
  {
  	p=(ListNode*)malloc(sizeof(ListNode));
  	p->coef=c;
  	p->exp=e;
  	p->next=NULL;
  	if(h==NULL)
  	h=p;
  	else
  	q->next=p;
  	q=p;
  	printf("請輸入係數和指數:");
  	scanf("%f,%d",&c,&e);
	  }	
	  return h;
}
void disppoly(ListNode *h)
/*輸出多項式*/
{
	ListNode *p;
	p=h;
	while(p!=NULL)
	{
		if(p->exp==0)
		printf("%.2f",p->coef);
		else
		printf("%fx^%d",p->coef,p->exp);
		p=p->next;
		if(p!=NULL)
		printf("+");
	}
	printf("\n");
 } 
 ListNode *addpoly(ListNode *h1,ListNode *h2)
 /*將兩個多項式相加*/
 {
 	ListNode *p,*r=NULL,*s1,*s2,*s=NULL;
 	float c;
 	int e;
 	s1=h1;
 	s2=h2;
 	while(s1!=NULL&&s2!=NULL)
 	{
 		if(s1->exp==s2->exp)
 		{
 			c=s1->coef+s2->coef;
 			e=s1->exp;
 			s1=s1->next;
 			s2=s2->next;
		 }
		 else if(s1->exp>s2->exp)
		 {
		 	c=s1->coef;
		 	e=s1->exp;
		 	s1=s1->next;
		 }
		 else
		 {c=s2->coef;
		 e=s2->exp;
		 s2=s2->next;
		 }
		 if(c!=0)
		 {
		 	p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 while(s1!=NULL)
	 {
	 	c=s1->coef;
	 	e=s1->exp;
	 	s1=s1->next;
	 	if(c!=0)
	 	{
	 		p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 while(s2!=NULL)
	 {
	 	c=s2->coef;
	 	e=s2->exp;
	 	s2=s2->next;
	 	if(c!=0)
	 	{
	 		p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 return s;
  } 
void deletepoly(ListNode *h)
//釋放多項式所佔的內存單元 
{
	ListNode *p,*r=h;
	while(r!=NULL)
	{
		p=r->next;
		free(r);
		r=p;
	}
}
int main()
{
	ListNode *head1,*head2,*head;
	printf("創建第一個多項式:\n"); 
	head1=createpoly();
	printf("創建第二個多項式:\n");
	head2=createpoly();
	printf("將兩個多項式相加:\n");
	head=addpoly(head1,head2);
	disppoly(head);
	deletepoly(head);
}
  </span>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章