資料結構:實驗一 實現一元多項式加法運算。
1.問題描述:利用帶頭結點的連結串列結構,開發一個一元稀疏多項式加法運算器。建立一元多項式並按照指數升序排列輸出多項式,將一元多項式輸入並存儲在記憶體中,能夠完成兩個多項式的加減運算並輸出結果。
2.基本要求:要求程式具備以下操作介面:(1)CreatPolyn(多項式建立函式)(2)PrintPolyn(多項式列印函式)(3)AddPolyn(多項式相加函式)
3.程式執行的步驟包括:(1)輸入多項式的項數及係數,建立多項式;(2)實現多項式的相加;(3)輸出相加結果
4.測試資料 (1)(2x+5x^8-3x^11)+(7-5x^8+11x^9) (2)(3x+4x^2-2x^9)+(-6x+5x^2+7x^15)
方法/步驟
一、問題描述:
利用帶頭結點的連結串列結構,開發一個一元稀疏多項式加法運算器。建立一元多項式並按照指數升序排列輸出多項式,將一元多項式輸入並存儲在記憶體中,能夠完成兩個多項式的加減運算並輸出結果
二、程式
#include
#include
#define LEN sizeof(struct PolyNode)
typedef struct PolyNode//
{
float coef;//
int expn;//
struct PolyNode *next;//
}PolyNode,*polynomial;//
int n;//
polynomial CreatPolyn()//
{
polynomial head,p,q;//
p=q=(polynomial)malloc(LEN);//
scanf("%f,%d",&p->coef,&p->expn);//
head=NULL;//
while(p->coef!=0)
{
n=n+1;
if(n==1)
{
head=p;
}else
{
q->next=p;
q=p;
p=(polynomial)malloc(LEN);
scanf("%f,%d",&p->coef,&p->expn);//
}
}
q->next=NULL;
return(head);
}
void TopPolyn(polynomial L)
{
polynomial a,b;
float temp_co;
int temp_ex;
a=L;
for(a;a!=NULL;a=a->next){
b=L;
for(b;b->next!=NULL;b=b->next){
if(b->expn>b->next->expn){
temp_co=b->coef;
temp_ex=b->expn;
b->coef=b->next->coef;
b->expn=b->next->expn;
b->next->coef=temp_co;
b->next->expn=temp_ex;
}
}
}
return;
}
void PrintPolyn(polynomial head){
polynomial p;
printf("該多項式按升序輸出為:");
p=head;
if(head!=NULL)
do
{
printf("%.2fx^%d ",p->coef,p->expn);
p=p->next;
}while(p!=NULL);
}
polynomial AddPolyn(polynomial P,polynomial Q,polynomial R){
// polynomial P,Q;
P=CreatPolyn();
Q=P->next;
while(Q!=NULL){
if(P->expn==P->next->expn){
P->coef=P->next->coef+P->coef;
P->next=P->next->next;
free(Q);
}else
{
P=P->next;
Q=Q->next;
}
R=P;
}
return (R);
}
void main(){
polynomial A,B,Ans;
printf("請輸入多項式A的係數和指數,輸入格式為“coefficient,expn”,中間以逗號隔開\n");
A=CreatPolyn();
// printf("多項式A按升序輸出為:");
TopPolyn(A);
PrintPolyn(A);
printf("\n\n請輸入多項式B的係數和指數,輸入格式為“coefficient,expn”,中間以逗號隔開\n");
B=CreatPolyn();
// printf("多項式B按升序輸出為:");
TopPolyn(B);
PrintPolyn(B);
printf("\n兩個多項式相加得出的結果為:");
//Ans=NULL;
AddPolyn(A,B,Ans);
TopPolyn(Ans);
PrintPolyn(Ans);
}
三、測試
多項式:1:(2x+5x^8-3x^11)+(7-5x^8+11x^9)
多項式2:(3x+4x^2-2x^9)+(-6x+5x^2+7x^15)
注意事項
部分資料來自網路