7-2 一元多项式运算器——建立与输出 通过键盘接收一组多项式的系数和指数,建立多项式(要求各项按指数升序排列),并按指定格式输出。要求使用单链表
时间: 2024-09-12 13:04:49 浏览: 67
在C语言中,可以使用单链表结构来表示多项式,每个节点包含两个部分:系数(coefficient)和指数(exponent)。链表中的节点按指数的升序排列,即每个节点的指数都小于其后继节点的指数。
建立多项式的过程通常包括以下几个步骤:
1. 定义节点结构:定义一个结构体类型,包含系数、指数和指向下一个节点的指针。
2. 创建节点:根据用户输入的系数和指数,创建新的节点。
3. 插入节点:将新创建的节点按照指数升序插入到链表中。
4. 输出多项式:遍历链表,按照一定的格式输出每个节点的系数和指数。
以下是一个简单的实现示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义节点结构体
typedef struct PolyNode {
int coefficient; // 系数
int exponent; // 指数
struct PolyNode *next; // 指向下一个节点的指针
} PolyNode;
// 创建节点
PolyNode* createNode(int coefficient, int exponent) {
PolyNode* newNode = (PolyNode*)malloc(sizeof(PolyNode));
newNode->coefficient = coefficient;
newNode->exponent = exponent;
newNode->next = NULL;
return newNode;
}
// 插入节点到多项式中
void insertNode(PolyNode **poly, int coefficient, int exponent) {
PolyNode *newNode = createNode(coefficient, exponent);
if (*poly == NULL || exponent < (*poly)->exponent) {
newNode->next = *poly;
*poly = newNode;
} else {
PolyNode *current = *poly;
while (current->next != NULL && current->next->exponent < exponent) {
current = current->next;
}
newNode->next = current->next;
current->next = newNode;
}
}
// 输出多项式
void printPolynomial(PolyNode *poly) {
while (poly != NULL) {
printf("%dx^%d", poly->coefficient, poly->exponent);
if (poly->next != NULL) {
printf(" + ");
}
poly = poly->next;
}
printf("\n");
}
int main() {
PolyNode *poly = NULL; // 初始化为空链表
int coefficient, exponent;
// 通过键盘输入多项式系数和指数
while (scanf("%d %d", &coefficient, &exponent) != EOF) {
insertNode(&poly, coefficient, exponent);
}
// 输出建立的多项式
printPolynomial(poly);
// 释放链表占用的内存
while (poly != NULL) {
PolyNode *temp = poly;
poly = poly->next;
free(temp);
}
return 0;
}
```
在上述代码中,我们首先定义了一个多项式节点的结构体,然后实现了创建节点、插入节点和输出多项式的函数。在`main`函数中,我们通过循环接收用户输入的系数和指数,使用`insertNode`函数将它们按指数升序插入链表。最后,我们调用`printPolynomial`函数输出建立的多项式,并释放了链表占用的内存。
阅读全文