多项式的加法实现 要求:(1).利用链式存储结构实现,插入、删除、创建、加法等各功能模块独立编辑实现
时间: 2023-10-19 19:23:30 浏览: 52
好的,下面是多项式加法的链式存储结构实现,包括插入、删除、创建和加法等功能模块。
首先定义多项式的结构体:
```c
typedef struct PolyNode *PtrToPolyNode;
struct PolyNode {
int coef; // 系数
int expon; // 指数
PtrToPolyNode next; // 指向下一个节点的指针
};
typedef PtrToPolyNode Polynomial;
```
接下来是各个模块的具体实现。
1. 创建多项式
```c
Polynomial createPoly() {
Polynomial p, rear, tmp;
int c, e;
p = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建头结点
rear = p;
scanf("%d %d", &c, &e);
while (e != -1) {
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = c;
tmp->expon = e;
rear->next = tmp;
rear = tmp; // 更新rear指针
scanf("%d %d", &c, &e);
}
rear->next = NULL; // 将rear指针的下一个节点置为NULL,表示链表的结束
return p;
}
```
2. 插入操作
```c
void insertPolyNode(int coef, int expon, Polynomial p) {
Polynomial tmp, pre;
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = coef;
tmp->expon = expon;
pre = p;
while (pre->next != NULL && pre->next->expon > expon) {
pre = pre->next;
}
// 找到插入位置,插入新节点
if (pre->next != NULL && pre->next->expon == expon) {
pre->next->coef += coef; // 指数相同,系数相加
} else {
tmp->next = pre->next;
pre->next = tmp;
}
}
```
3. 删除操作
```c
void deletePolyNode(int expon, Polynomial p) {
Polynomial pre, tmp;
pre = p;
while (pre->next != NULL && pre->next->expon != expon) {
pre = pre->next;
}
if (pre->next == NULL) {
printf("未找到要删除的节点!\n");
} else {
tmp = pre->next;
pre->next = tmp->next;
free(tmp);
}
}
```
4. 输出多项式
```c
void printPoly(Polynomial p) {
if (p->next == NULL) {
printf("0\n");
return;
}
while (p->next != NULL) {
printf("%d", p->next->coef);
printf("x^%d", p->next->expon);
p = p->next;
if (p->next != NULL && p->next->coef > 0) {
printf("+"); // 正数打印“+”号
}
}
printf("\n");
}
```
5. 多项式加法
```c
Polynomial addPoly(Polynomial p1, Polynomial p2) {
Polynomial front, rear, tmp;
front = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建头结点
rear = front;
while (p1 && p2) {
if (p1->expon > p2->expon) {
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = p1->coef;
tmp->expon = p1->expon;
rear->next = tmp;
rear = tmp; // 更新rear指针
p1 = p1->next;
} else if (p1->expon < p2->expon) {
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = p2->coef;
tmp->expon = p2->expon;
rear->next = tmp;
rear = tmp; // 更新rear指针
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum) { // 系数之和不为0
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = sum;
tmp->expon = p1->expon;
rear->next = tmp;
rear = tmp; // 更新rear指针
}
p1 = p1->next;
p2 = p2->next;
}
}
// 将未处理完的节点添加到结果多项式中
for (; p1; p1 = p1->next) {
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = p1->coef;
tmp->expon = p1->expon;
rear->next = tmp;
rear = tmp; // 更新rear指针
}
for (; p2; p2 = p2->next) {
tmp = (Polynomial) malloc(sizeof(struct PolyNode)); // 创建新节点
tmp->coef = p2->coef;
tmp->expon = p2->expon;
rear->next = tmp;
rear = tmp; // 更新rear指针
}
rear->next = NULL; // 将rear指针的下一个节点置为NULL,表示链表的结束
return front;
}
```
这样,就完成了多项式的链式存储结构实现,包括插入、删除、创建和加法等功能模块。
相关推荐
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)