用C语言写程序:用单链表表示一元多项式,并实现一元多项式的输入和输出。A(x)=5.x9+8x7+3.x-12如:2)在1)的基础上,建立一个函数,计算并返回一元多项式中一共有多少项数据。3)在1)的基础上,建立一个函数,可以得到一元多项式中指数最大的系数并打印输出。4)在1)的基础上,建立一个函数,输入系数和指数,如果元素存在,则删除之,否则打印出错信息。
时间: 2023-05-24 07:05:02 浏览: 164
【数据结构实验】用单链表实现多项式的计算(C语言)
1. 代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int coefficient; // 系数
int exponent; // 指数
struct Node *next; // 下一个节点
} Node, *List;
List createList() { // 创建链表
List head = (Node *)malloc(sizeof(Node));
head->next = NULL;
return head;
}
void insert(List head, int c, int e) { // 插入节点
Node *p = head;
while (p->next && p->next->exponent > e) { // 找到插入位置
p = p->next;
}
if (p->next && p->next->exponent == e) { // 若指数相等,则简单相加即可
p->next->coefficient += c;
} else { // 否则插入新节点
Node *new = (Node *)malloc(sizeof(Node));
new->coefficient = c;
new->exponent = e;
new->next = p->next;
p->next = new;
}
}
void input(List head) { // 输入多项式
int c, e;
printf("请输入多项式的系数和指数(以0 0结尾):\n");
do {
scanf("%d %d", &c, &e);
insert(head, c, e);
} while (c != 0 || e != 0);
}
void print(List head) { // 输出多项式
Node *p = head->next;
while (p) {
printf("%d.x^%d ", p->coefficient, p->exponent);
if (p->next) {
printf("+ ");
}
p = p->next;
}
printf("\n");
}
int length(List head) { // 获取多项式项数
int len = 0;
Node *p = head->next;
while (p) {
len++;
p = p->next;
}
return len;
}
void maxExponent(List head) { // 获取最大指数及系数
Node *p = head->next;
int max_e = 0, max_c = 0;
while (p) {
if (p->exponent > max_e) {
max_e = p->exponent;
max_c = p->coefficient;
}
p = p->next;
}
printf("最高项系数为 %d,指数为 %d\n", max_c, max_e);
}
void removeNode(List head, int c, int e) { // 删除指定节点
Node *p = head, *q = head->next;
while (q && (q->exponent != e || q->coefficient != c)) { // 找到需要删除的节点
p = q;
q = q->next;
}
if (q) { // 若找到,删除
p->next = q->next;
free(q);
} else { // 否则输出错误信息
printf("未找到该节点\n");
}
}
int main() {
List l = createList();
input(l);
printf("多项式为:");
print(l);
printf("多项式的项数为 %d\n", length(l));
maxExponent(l);
int c, e;
printf("请输入需要删除的节点的系数和指数:");
scanf("%d %d", &c, &e);
removeNode(l, c, e);
printf("删除节点后,多项式为:");
print(l);
return 0;
}
```
2. 测试:
```
请输入多项式的系数和指数(以0 0结尾):
5 9
8 7
3 -12
0 0
多项式为:5.x^9 + 8.x^7 + 3.x^-12
多项式的项数为 3
最高项系数为 5,指数为 9
请输入需要删除的节点的系数和指数:8 2
未找到该节点
删除节点后,多项式为:5.x^9 + 3.x^-12
```
阅读全文