请用c语言的链表表示两个一元多项式相加
时间: 2023-05-21 19:03:41 浏览: 99
目前有很多教室预约系统,其中一些比较流行的包括:Teachworks、Booked、Acuity Scheduling、SimplyBook.me、Skedda、BookSteam等。这些系统都提供了方便的预约管理和日程安排功能,可以帮助学校、机构和企业更好地管理教室资源。
相关问题
C语言用链表实现一元多项式相加
#include <stdio.h>
#include <stdlib.h>
struct node { // 定义节点结构体
int coef; // 系数
int exp; // 指数
struct node *next; // 指向下一个节点的指针
};
typedef struct node Node;
Node* create_node(int coef, int exp) { // 创建一个节点
Node *new = (Node*)malloc(sizeof(Node));
new->coef = coef;
new->exp = exp;
new->next = NULL;
return new;
}
Node* add_poly(Node *poly1, Node *poly2) { // 两个多项式相加
Node *head = create_node(0, 0); // 头结点,作为新的多项式的起点
Node *p1 = poly1, *p2 = poly2, *p3 = head;
while (p1 != NULL && p2 != NULL) {
if (p1->exp > p2->exp) { // 计算结果多项式的该项为第一个多项式的当前项
p3->next = create_node(p1->coef, p1->exp);
p1 = p1->next;
} else if (p1->exp < p2->exp) { // 计算结果多项式的该项为第二个多项式的当前项
p3->next = create_node(p2->coef, p2->exp);
p2 = p2->next;
} else { // 计算结果多项式的该项为两个多项式的当前项之和,系数相加
p3->next = create_node(p1->coef + p2->coef, p1->exp);
p1 = p1->next;
p2 = p2->next;
}
p3 = p3->next;
}
// 处理没有计算过的多项式项
while (p1 != NULL) {
p3->next = create_node(p1->coef, p1->exp);
p1 = p1->next;
p3 = p3->next;
}
while (p2 != NULL) {
p3->next = create_node(p2->coef, p2->exp);
p2 = p2->next;
p3 = p3->next;
}
return head->next; // 返回新的多项式
}
void print_poly(Node *poly) { // 输出多项式
Node *p = poly;
while (p != NULL) {
printf("%dX^%d ", p->coef, p->exp);
if (p->next != NULL && p->next->coef > 0) {
printf("+ ");
}
p = p->next;
}
printf("\n");
}
int main() {
Node *poly1, *poly2, *result;
// 创建第一个多项式
poly1 = create_node(3, 5);
poly1->next = create_node(-2, 3);
poly1->next->next = create_node(1, 1);
// 创建第二个多项式
poly2 = create_node(2, 4);
poly2->next = create_node(-7, 3);
poly2->next->next = create_node(4, 1);
result = add_poly(poly1, poly2); // 两个多项式相加
printf("多项式1:");
print_poly(poly1); // 输出第一个多项式
printf("多项式2:");
print_poly(poly2); // 输出第二个多项式
printf("相加结果:");
print_poly(result); // 输出相加结果
// 释放内存
while (poly1 != NULL) {
Node *p = poly1;
poly1 = poly1->next;
free(p);
}
while (poly2 != NULL) {
Node *p = poly2;
poly2 = poly2->next;
free(p);
}
while (result != NULL) {
Node *p = result;
result = result->next;
free(p);
}
return 0;
}
c语言构造两个按指数递增的有序链表,实现两个一元多项式相加
以下是C语言实现两个按指数递增的有序链表,实现两个一元多项式相加的代码:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int coef; // 系数
int exp; // 指数
struct node *next; // 下一个节点指针
} Node, *Polynomial;
// 创建一个新节点
Node *createNode(int coef, int exp) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->coef = coef;
newNode->exp = exp;
newNode->next = NULL;
return newNode;
}
// 将一个节点插入到多项式中
void insertNode(Polynomial *p, Node *newNode) {
if (*p == NULL) {
*p = newNode;
return;
}
Node *prev = NULL;
Node *curr = *p;
while (curr != NULL && curr->exp > newNode->exp) {
prev = curr;
curr = curr->next;
}
if (curr != NULL && curr->exp == newNode->exp) {
curr->coef += newNode->coef;
free(newNode);
} else {
if (prev == NULL) {
newNode->next = *p;
*p = newNode;
} else {
newNode->next = curr;
prev->next = newNode;
}
}
}
// 从标准输入中读取多项式
Polynomial readPolynomial() {
Polynomial p = NULL;
int coef, exp;
while (scanf("%d %d", &coef, &exp) == 2) {
Node *newNode = createNode(coef, exp);
insertNode(&p, newNode);
}
return p;
}
// 将多项式输出到标准输出
void printPolynomial(Polynomial p) {
if (p == NULL) {
printf("0 0\n");
return;
}
while (p != NULL) {
printf("%d %d", p->coef, p->exp);
if (p->next != NULL) {
printf(" ");
} else {
printf("\n");
}
p = p->next;
}
}
// 将两个多项式相加
Polynomial addPolynomial(Polynomial p1, Polynomial p2) {
Polynomial p = NULL;
while (p1 != NULL && p2 != NULL) {
if (p1->exp > p2->exp) {
insertNode(&p, createNode(p1->coef, p1->exp));
p1 = p1->next;
} else if (p1->exp < p2->exp) {
insertNode(&p, createNode(p2->coef, p2->exp));
p2 = p2->next;
} else {
int coef = p1->coef + p2->coef;
if (coef != 0) {
insertNode(&p, createNode(coef, p1->exp));
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
insertNode(&p, createNode(p1->coef, p1->exp));
p1 = p1->next;
}
while (p2 != NULL) {
insertNode(&p, createNode(p2->coef, p2->exp));
p2 = p2->next;
}
return p;
}
int main() {
Polynomial p1, p2, p;
printf("请输入第一个多项式的系数和指数,以空格分隔,每个节点一行,以-1 -1结束:\n");
p1 = readPolynomial();
printf("请输入第二个多项式的系数和指数,以空格分隔,每个节点一行,以-1 -1结束:\n");
p2 = readPolynomial();
p = addPolynomial(p1, p2);
printf("相加后的多项式为:\n");
printPolynomial(p);
return 0;
}
```