利用C语言设计一种单链表存储结构,每个结点存储一项的系数和指数,类型都是整型,编写完成产生多项式的函数、多项式相加及输出多项式的函数。
时间: 2024-09-20 18:04:06 浏览: 110
在C语言中,我们可以使用结构体来设计一个表示多项式项的数据结构,每个结点包含一个系数和指数。首先,我们需要定义一个` PolynomialTerm` 结构:
```c
typedef struct {
int coefficient;
int exponent;
} PolynomialTerm;
```
接着,为了方便操作多项式,我们可以创建一个`Polynomial` 结构,用于存储一系列的`PolynomialTerm` 结点:
```c
typedef struct {
PolynomialTerm* terms;
int count; // 存储项的数量
int max_size; // 最大能容纳项数
} Polynomial;
```
接下来,我们实现一些函数:
1. **初始化多项式** (`create_polynomial`):
- 创建一个新的多项式,并分配内存给项数组。
```c
Polynomial* create_polynomial(int size) {
Polynomial* poly = malloc(sizeof(Polynomial));
poly->terms = malloc(size * sizeof(PolynomialTerm));
poly->count = 0;
poly->max_size = size;
return poly;
}
```
2. **添加多项式项** (`add_term`):
- 检查是否有空间添加新的项,如果没有则动态扩容。
```c
void add_term(Polynomial* poly, int coefficient, int exponent) {
if (poly->count == poly->max_size) {
poly->max_size *= 2;
poly->terms = realloc(poly->terms, poly->max_size * sizeof(PolynomialTerm));
}
poly->terms[poly->count].coefficient = coefficient;
poly->terms[poly->count].exponent = exponent;
poly->count++;
}
```
3. **多项式相加** (`polynomial_addition`):
- 遍历两个多项式,分别将对应位置的项相加。
```c
void polynomial_addition(Polynomial* result, Polynomial* poly1, Polynomial* poly2) {
for (int i = 0; i < MIN(poly1->count, poly2->count); i++) {
result->terms[i].coefficient = poly1->terms[i].coefficient + poly2->terms[i].coefficient;
// 如果其中一个多项式的指数大于另一个,则保持原指数
}
// 将剩余项添加到结果
if (poly1->count > poly2->count)
copy_remaining_terms(result, poly1);
else if (poly2->count > poly1->count)
copy_remaining_terms(result, poly2);
}
// 辅助函数,将剩余未相加的项复制到结果多项式
void copy_remaining_terms(Polynomial* dest, Polynomial* src) {
for (int i = src->count; i < src->max_size; i++) {
dest->terms[i] = src->terms[i];
}
}
```
4. **输出多项式** (`print_polynomial`):
- 格式化输出多项式的所有项。
```c
void print_polynomial(Polynomial* poly) {
printf("Polynomial:\n");
for (int i = 0; i < poly->count; i++) {
printf("%d * x^%d ", poly->terms[i].coefficient, poly->terms[i].exponent);
}
printf("\n");
}
```
阅读全文