#include <stdio.h>
#include <stdlib.h>
/* 程式範例: Ch4-6.h */
struct Node { /* Node節點結構 */
float coef; int exp; /* 結構變數宣告 */
struct Node *next; /* 指向下一個節點 */
};
typedef struct Node PNode; /* 多項式串列節點的新型態 */
typedef PNode *PList; /* 多項式串列的新型態 */
/* 程式範例: createPoly.c */
/* 函數: 建立多項式的串列 */
PList createPoly(int len, float *array) {
int i;
PList first, ptr, newnode; /* 建立開頭節點 */
first = (PList) malloc(sizeof(PNode));
first->coef = 0.0; /* 建立開頭節點的內容 */
first->exp = -1;
ptr = first; /* 前一個節點指標 */
for ( i = len-1; i >= 0; i-- ) {
if ( array[i] != 0.0 ) { /* 配置節點記憶體 */
newnode = (PList) malloc(sizeof(PNode));
newnode->coef = array[i]; /* 建立節點的內容 */
newnode->exp = i;
ptr->next = newnode; /* 連結新節點 */
ptr = newnode; /* 成為前一個節點 */
}
}
ptr->next = first; /* 連結第1個節點, 建立環狀串列 */
return first;
}
/* 函數: 顯示多項式 */
void printPoly(PList first) {
PList ptr = first->next; /* 串列真正的開頭 */
float c;
int e;
while ( ptr != first ) { /* 顯示主迴圈 */
c = ptr->coef;
e = ptr->exp;
printf("%3.1fX^%d", c, e);
ptr = ptr->next; /* 下一個節點 */
if ( ptr != first ) printf("+");
}
printf("\n");
}
/* 主程式 */
int main() {
PList a = NULL; /* 多項式串列1的開頭指標 */
PList b = NULL; /* 多項式串列2的開頭指標 */
/* 建立多項式物件所需的陣列 */
float list1[5] = { 3, 4, 0, 5, 1};
float list2[5] = { 5, 2, 5, 0, 0};
a = createPoly(5, list1); /* 建立多項式串列1 */
b = createPoly(5, list2); /* 建立多項式串列2 */
printf("f(x)=");
printPoly(a); /* 顯示多項式1 */
printf("g(x)=");
printPoly(b); /* 顯示多項式2 */
system("PAUSE");
return 0;
}
評分: ★★★★☆
回覆刪除Excellent !