ADT多項式(C實現(xiàn))
初學(xué)數(shù)據(jù)結(jié)構(gòu),感覺還是應(yīng)該多練習(xí)才好,于是寫了一個“ADT多項式”的實現(xiàn),同時也當(dāng)作一個學(xué)習(xí)
,代碼如下,gcc編譯通過,由于寫的倉促,注釋較少,有什么問題可以給小弟留言。#include<stdio.h>
#define MAX_TERMS 100
typedef struct{
float coef; /*系數(shù)*/
int expon; /*指數(shù)*/
} polynomial;
polynomial terms[MAX_TERMS-1] = {2,1000,1,0,1,4,10,3,3,2,1,0},temp[MAX_TERMS];
int avail = 0;
void padd(int,int,int,int,int*,int*);
void attach(float,int);
int compare(int,int);
int compare(int a,int b)
{
if(a > b)
return 1;
else if(a == b)
return 0;
else
return -1;
}
void padd(int starta,int finisha,int startb,int finishb,int* startd,int* finishd)
{
float coefficient;
*startd = avail;
while(starta <= finisha && startb <= finishb)
switch(compare(terms[starta].expon,terms[startb].expon))
{
case -1 :
attach(terms[startb].coef,terms[startb].expon);
startb++;
break;
case 0 :
coefficient = terms[starta].coef + terms[startb].coef;
if(coefficient)
attach(coefficient,terms[starta].expon);
starta++;
startb++;
break;
case 1 :
attach(terms[starta].coef,terms[starta].expon);
starta++;
break;
}
for( ; starta <= finisha; starta++)
attach(terms[starta].coef,terms[starta].expon);
for( ; startb <= finishb; startb++)
attach(terms[startb].coef,terms[finishb].expon);
*finishd = avail;
}
void attach(float coefficient,int exponent)
{
if(avail >= MAX_TERMS)
{
printf("Too many terms in the polynomial");
return;
}
temp[avail].coef = coefficient;
temp[avail].expon = exponent;
avail++;
}
int main()
{
int i,starta = 0,finisha = 1,startb = 2,finishb = 5,startd,finishd;
padd(starta,finisha,startb,finishb,&startd,&finishd);
printf("polynomial:\n");
for(i = 0;i < finishd;++i)
{
printf("coef %f expon %d \n",temp[i].coef,temp[i].expon);
}
return 0;
}
