数据结构(二)笔记

多项式的乘法与加法运算

多项式的表示

仅表示非零项

数组:

编程简单、调试容易
需要实现确定数组大小

链表:

动态性强
编程略为复杂、调试比较困难

一种比较好的实现方法是:动态数组

数据结构设计

typedef struct PolyNode *Polynomial; struct PolyNode{ int coef;//系数 int expon;//指数 Polynomial link;//指向下一个节点的指针

程序框架搭建

int main() { 读入多项式1 读入多项式2 乘法运算并输出 加法运算并输出 return 0; }
需要设计的函数

读一个多项式
两多项式相乘
两多项式相加
多项式输出

int main() { Polynomial P1,P2,PP,PS; P1 = ReadPoly(); P2 = ReadPoly(); PP = Mult(P1,P2); PrintPoly(PP); PS = Add(P1,P2); PrintPoly(PS); return 0;

如何读入多项式

先读项数,再一对一对的读指数和系数

Polynomial ReadPoly() { …… scanf("%d",&N); …… while(N--) { scanf("%d %d",&c,&e); Attach(c,e,&Rear); } …… return P; }

Rear初值是多少?
两种处理方法:
1.Rear初值为NULL
在Attach函数中根据Rear是否为NULL做不同处理
2.Rear指向一个空结点

void Attach(int c,int e,Polynomial *pRear)//pRear是指针的指针 { Polynomial P; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->coef = c; P->expon = e; P->link = NULL; (*pRear)->link = P; *pRear = P; }
Polynomial ReadPoly() { Polynomial P,Rear,t; int c,e,N; scanf("%d",&N); P = (Polynomial)malloc(sizeof(struct PolyNode)); P->link = NULL; Rear = P; while(N--) { scanf("%d %d",&c,&e); Attach(c,e,&Rear); } t = P; P = P->link; free(t); return P; }

如何将两个多项式相加

Polynomial Add(Polynomial P1,Polynomial P2) { …… t1 = P1; t2 = P2; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->link = NULL; Rear = P; while(t1 && t2){ if(t1->expon == t2->expon){ …… } else if(t1->expon>t2->expon){ …… } else { …… } } while(t1) { …… } while(t2) { …… } …… return P; }

如何将两个多项式相乘

方法1.将乘法运算转换为加法运算
将P1当前项(ci,ei)乘P2多项式,再加到结果多项式里

t1 = P1; t2 = P2; P = (Polynomial)malloc(sizeof(struct PolyNode)); P->link = NULL; Rear = P; while(t2){ Attach(t1->coef*t2->coef,t1->expon+t2->expon,&Rear); t2 = t2->link; }

方法2.逐项插入
将P1当前项(c1i,e1i)乘P2当前项(c2i,e2i),并插入到结果多项式中,关键是要找到插入位置。
初始结果多项式可由P1第一项乘P2获得

如何将多项式输出

void PrintPoly( Polynomial P ) {/*输出多项式*/ int flag = 0; /*辅助调整输出格式用*/ if(!P) {printf("0 0\n");return;} while(P) { if(!flag) flag = 1; else printf(" ") printf("%d %d",P->coef,P->expon); P = P->link; } printf("\n"); }

__EOF__

本文作者坤舆小菜鸡
本文链接https://www.cnblogs.com/HBU-xuhaiyang/p/12520656.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   坤舆小菜鸡  阅读(74)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示