台灣最大程式設計社群網站
線上人數
2225
 
會員總數:245979
討論主題:189557
歡迎您免費加入會員
討論區列表 >> C/C++ >> 利用鏈結串列做多項式的相加
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
利用鏈結串列做多項式的相加
價值 : 50 QP  點閱數:948 回應數:2
樓主

曾琬婷
門外漢
0 1
19 0
發送站內信


/* 我想利用鏈結串列做多項式的相加,可是一直無法執行,我找不出錯*/



#include<stdlib.h>
#include<stdio.h>
typedef struct data
{
int coef;
int expon;
struct data *next;
}DATA;
int compare(int,int);
void attach(float,int,DATA **);
DATA padd(DATA**,DATA**);
void print(DATA *);
int main()
{
DATA *a,*b,c;
a=(DATA *)malloc(sizeof(DATA*));
b=(DATA *)malloc(sizeof(DATA*));
do{
printf("請輸入多項式1:");
scanf("%d %d",&a->coef,&a->expon);
}while(a->expon!=0);
do{
printf("請輸入多項式2:");
scanf("%d %d",&b->coef,&b->expon);
}while(b->expon!=0);
c=padd(&a,&b);

print(&c);

system("pause");
return 0;
}
DATA padd(DATA **a,DATA **b)
{

DATA *c,*rear,*temp;
int sum;
rear=(DATA *)malloc(sizeof(DATA*));
c=rear;

while((*a)->next!=NULL && (*b)->next!=NULL)
{

switch(compare((*a)->expon,(*b)->expon))
{
case -1:

attach((*b)->coef,(*b)->expon,&rear);
*b=(*b)->next;
break;
case 0:

sum=(*a)->coef+(*b)->coef;
if(sum)
{
attach(sum,(*a)->expon,&rear);
}
(*a)=(*a)->next;
(*b)=(*b)->next;
break;

case 1:
attach((*a)->coef,(*a)->expon,&rear);
(*a)=(*a)->next;
}

}
for(;(*a)!=NULL;(*a)=(*a)->next;)
{
attach((*a)->coef,(*a)->expon,&rear);
}

for(;(*b)!=NULL;(*b)=(*b)->next)
{
attach((*b)->coef,(*b)->expon,&rear);
}
rear->next=NULL;
temp=c;
c=c->next;
free(temp);
return *c;
}
int compare(int a,int b)
{
if(a<b)
{
return -1;
}
else if(a>b)
{
return 1;
}
else
{
return 0;
}
}
void attach(float coefficient,int exponent,DATA **ptr)
{
DATA *temp;
temp=(DATA *)malloc(sizeof(DATA*));
temp->coef=coefficient;
temp->expon=exponent;

(*ptr)->next=temp;
(*ptr)=temp;

}
void print(DATA *c)
{
while(c!=NULL)
{
printf("%2d %2d",c->coef,c->expon);
c=c->next;
}
}

搜尋相關Tags的文章: [ 多項式的相加 ] ,
本篇文章發表於2016-11-26 21:18
1樓
回應

建中
檢舉此回應
我把你的程式碼整理成Visual C++ 2010可以讀取的格式,
這裡用到的技巧是加上 include "stdafx.h"敘述,
再用int _tmain(int argc, _TCHAR* argv[]) 取代int main()就可以跑了。
以下是整理好的程式碼可以跑了,
初步看起來是while敘述有問題。


本篇文章回覆於2016-12-09 00:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

建中
檢舉此回應
因為你的變數只有a與b,
所以不需要do-while迴圈。
刪除do while迴圈和for迴圈以後,
程式就可以正常比較a與b了。
如果你想比較很多個a和很多個b的話,
malloc目前只有a,b兩個敘述是不夠的,
malloc敘述也要多寫很多次才能跑。
我把你的程式碼修改成下面這樣已經可以跑了。




本篇文章回覆於2016-12-13 05:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.