c语言单链表_[内附完整源码和文档] 基于C语言实现的一元多项式的计算

一、概述
通过C语言使用链式存储结构实现一元多项式加法、减法和乘法的运算。按指数降序排列。

二、需求分析
建立一元多项式并按照指数降序排列输出多项式,将一元多项式输入并存储在内存中,能够完成两个多项式的加减运算并输出结果。

三、概要设计
3.1 存储结构
一元多项式的表示在计算机内可以用链表来表示,为了节省存储空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。

3.1.1 单连表的抽象数据类型定义
ADT List{
数据对象:
D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}
数据关系:
R1={<ai-1,ai>| ai-1, ai∈D,i=2,…,n}
基本操作:
InitList(&L)
//操作结果:构造一个空的线性表
CreatPolyn(&L)
//操作结果:构造一个以单连表存储的多项试
DispPolyn(L)
//操作结果:显示多项试
Polyn(&pa,&pb)
//操作结果:显示两个多项试相加,相减的结果
} ADT List;
3.1.2 本程序包含模块
//定义单链表
typedef struct LNode
{
}LNode,*LinkList;
//定义一个空表
void InitList(LinkList &L)
{}
//用单链表定义一个多项式
void CreatPolyn(LinkList &L)
{}
//显示输入的多项式
void DispPolyn(LinkList L)
{}
void Polyn(LinkList &pa,LinkList &pb)
{}
void main()
{
//定义一个单连表;
cout<<endl<<" **欢迎来到一元多项式计算程序 "<<endl;
LNode *L1,*L2;
Polyn(L1,L2);
}
各模块之间的调用关系如下:

e9046c2e3ca34486db6d41d8bce062d1.png


四、详细设计
4.1 单连表存储结构
//定义单链表
typedef struct LNode
{
}LNode,*LinkList;
//定义一个空表
void InitList(LinkList &L)
{}
//用单链表定义一个多项式
void CreatPolyn(LinkList &L)
{}
//显示输入的多项式
void DispPolyn(LinkList L)
{}
void Polyn(LinkList &pa,LinkList &pb)
{}
4.2 主函数 main
void main()
{
LNode *L1,*L2;
Polyn(L1,L2);
}
4.3 函数的调用关系层次结构
多项式 Polyn 用单链表定义多项式 CreatPolyn 定义一个空表 InitList 显示输入的多项式 DispPolyn。

五、 调试分析
采用单连表形式按照指数降序排列建立并输出多项式;在相加,相减的过程 中如果指数相同就执行系数相加,相减,否则就把大的项直接写入。完成两个多 项式的相加、相减;将从新得到的单连表结果输出;该算法的时间复杂度为两个 多项式的项式之和。

99da14c86f96107d267b03cf1b07e12b.png

完整的源码和详细的文档,上传到了 WRITE-BUG技术共享平台 上,需要的请自取:

https://www.write-bug.com/article/3096.html

### 回答1: 答案:#include <stdio.h> int main() { int degree1, degree2, i; int coeff1[10], coeff2[10], sum[10]; printf("一元多项式一的阶数:"); scanf("%d", &degree1); printf("一元多项式一的系数:"); for(i=0;i<=degree1;i++) scanf("%d",&coeff1[i]); printf("一元多项式二的阶数:"); scanf("%d", &degree2); printf("一元多项式二的系数:"); for(i=0;i<=degree2;i++) scanf("%d",&coeff2[i]); //将两个多项式相加,结果存在sum数组中 for(i=0;i<=degree1 || i<=degree2;i++) sum[i] = coeff1[i] + coeff2[i]; printf("求和结果为:"); //打印出sum数组 for(i=degree1>degree2?degree1:degree2;i>=0;i--) { if(sum[i] != 0) printf("%dx^%d+", sum[i], i); } printf("\b \n"); return 0; } ### 回答2: 下面是C语言实现一元多项式的加法的源代码: ```c #include <stdio.h> #include <stdlib.h> // 定义多项式结构体 typedef struct node { int coefficient; // 系数 int exponent; // 指数 struct node* next; } Polynomial; // 向多项式中插入项 Polynomial* insertTerm(Polynomial* head, int coefficient, int exponent) { Polynomial* newTerm = (Polynomial*)malloc(sizeof(Polynomial)); newTerm->coefficient = coefficient; newTerm->exponent = exponent; newTerm->next = NULL; if (head == NULL) { head = newTerm; } else { Polynomial* current = head; while (current->next != NULL) { current = current->next; } current->next = newTerm; } return head; } // 打印多项式 void printPolynomial(Polynomial* head) { Polynomial* current = head; while (current != NULL) { printf("%dx^%d", current->coefficient, current->exponent); current = current->next; if (current != NULL) { printf(" + "); } } printf("\n"); } // 多项式相加 Polynomial* addPolynomial(Polynomial* poly1, Polynomial* poly2) { Polynomial* sum = NULL; while (poly1 != NULL && poly2 != NULL) { if (poly1->exponent > poly2->exponent) { sum = insertTerm(sum, poly1->coefficient, poly1->exponent); poly1 = poly1->next; } else if (poly1->exponent < poly2->exponent) { sum = insertTerm(sum, poly2->coefficient, poly2->exponent); poly2 = poly2->next; } else { int coefficientSum = poly1->coefficient + poly2->coefficient; if (coefficientSum != 0) { sum = insertTerm(sum, coefficientSum, poly1->exponent); } poly1 = poly1->next; poly2 = poly2->next; } } while (poly1 != NULL) { sum = insertTerm(sum, poly1->coefficient, poly1->exponent); poly1 = poly1->next; } while (poly2 != NULL) { sum = insertTerm(sum, poly2->coefficient, poly2->exponent); poly2 = poly2->next; } return sum; } int main() { Polynomial* poly1 = NULL; Polynomial* poly2 = NULL; Polynomial* sum = NULL; // 向多项式1中插入项 poly1 = insertTerm(poly1, 3, 2); poly1 = insertTerm(poly1, 4, 1); poly1 = insertTerm(poly1, 2, 0); // 向多项式2中插入项 poly2 = insertTerm(poly2, 2, 4); poly2 = insertTerm(poly2, -1, 2); poly2 = insertTerm(poly2, 5, 1); poly2 = insertTerm(poly2, 3, 0); // 多项式相加 sum = addPolynomial(poly1, poly2); // 打印结果 printf("多项式1:"); printPolynomial(poly1); printf("多项式2:"); printPolynomial(poly2); printf("相加结果:"); printPolynomial(sum); return 0; } ``` 这段代码实现一元多项式的加法。程序定义了一个多项式结构体,其中包括系数和指数两个成员。程序首先实现了一个向多项式中插入项的函数`insertTerm`,然后定义了一个打印多项式的函数`printPolynomial`。接下来的`addPolynomial`函数实现多项式的加法,最后在`main`函数中调用这些函数进行测试。 ### 回答3: 以下是一元多项式加法的C语言源码: ```c #include <stdio.h> #include <stdlib.h> typedef struct { float coef; int exp; } Term; typedef struct { int numTerms; Term* terms; } Polynomial; void polynomialAddition(Polynomial p1, Polynomial p2, Polynomial* result) { int i = 0, j = 0, k = 0; while (i < p1.numTerms && j < p2.numTerms) { if (p1.terms[i].exp > p2.terms[j].exp) { result->terms[k++] = p1.terms[i++]; } else if (p1.terms[i].exp < p2.terms[j].exp) { result->terms[k++] = p2.terms[j++]; } else { result->terms[k].coef = p1.terms[i].coef + p2.terms[j].coef; result->terms[k].exp = p1.terms[i].exp; i++; j++; k++; } } // 把未操作完的项依次添加到结果多项式中 while (i < p1.numTerms) { result->terms[k++] = p1.terms[i++]; } while (j < p2.numTerms) { result->terms[k++] = p2.terms[j++]; } result->numTerms = k; } int main() { Polynomial poly1, poly2, result; int i; printf("请入第一个多项式的项数:"); scanf("%d", &poly1.numTerms); poly1.terms = (Term*)malloc(poly1.numTerms * sizeof(Term)); printf("请入第一个多项式的每一项的系数和指数:\n"); for (i=0; i<poly1.numTerms; i++) { scanf("%f%d", &poly1.terms[i].coef, &poly1.terms[i].exp); } printf("请入第二个多项式的项数:"); scanf("%d", &poly2.numTerms); poly2.terms = (Term*)malloc(poly2.numTerms * sizeof(Term)); printf("请入第二个多项式的每一项的系数和指数:\n"); for (i=0; i<poly2.numTerms; i++) { scanf("%f%d", &poly2.terms[i].coef, &poly2.terms[i].exp); } result.terms = (Term*)malloc((poly1.numTerms + poly2.numTerms) * sizeof(Term)); polynomialAddition(poly1, poly2, &result); printf("多项式相加的结果为:\n"); for (i=0; i<result.numTerms; i++) { printf("%.2f*x^%d ", result.terms[i].coef, result.terms[i].exp); if (i != result.numTerms-1) { printf("+ "); } } free(poly1.terms); free(poly2.terms); free(result.terms); return 0; } ``` 这段代码定义了两个结构体Term和Polynomial,Term结构体用于表示多项式的一个项,包括系数和指数;Polynomial结构体用于表示多项式,包括项的数量和一个指向Term结构体数组的指针。 函数polynomialAddition用于执行多项式的加法操作,它接受两个多项式p1和p2以及一个指向结果多项式的指针。函数中使用了三个指针i、j和k来分别遍历p1、p2的项以及结果多项式的项。当p1和p2的当前指数相同时,将两个项的系数相加,并将结果添加到结果多项式中;否则,将较大指数的项添加到结果多项式中,直到遍历完其中一个多项式。最后,再将未遍历完的多项式的项依次添加到结果多项式中。 在main函数中,先读入用户入的两个多项式,然后调用polynomialAddition函数进行相加操作,最后出结果多项式。 注意:上述代码中只实现多项式的加法,没有进行入的验证和错误处理。在实际应用中,需要根据具体需求进行适当的修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值