初學數據結構,感覺還是應該多練習才好,于是
寫了一個“ADT多項式”的實現,同時也當作一個學習

,代碼如下,gcc編譯通過,由于寫的倉促,注釋較少,有什么問題可以給小弟留言。
#include<stdio.h>#define MAX_TERMS 100typedef struct{ float coef; /*系數*/ int expon; /*指數*/} 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;}