青岛大学_王卓老师【数据结构与算法】Week04_12_案例分析与实现2_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。

一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。

如有侵权,请留言作删文处理。

课程视频链接:

数据结构与算法基础–第04周12–2.8案例分析与实现2–稀疏多项式运算

📚 【Week04】12_案例分析与实现

稀疏多项式的运算
多项式非零项的数组表示

在这里插入图片描述

线性表 A = ((7, 0), (3, 1), (9, 8), (5, 17));
线性表 B = ((8, 1), (22, 7), (-9, 8));

(1) 创建一个新数组 c

(2) 分别从头遍历比较 a 和 b 的每一项

  • 指数相同,对应系数相加,若其和不为零,则在 C 中增加一个新项

  • 指数不相同,则将指数较小的项复制到 c 中

(3) 一个多项式已遍历完毕时,将另一个剩余项一次复制到 c 中

❓ 数组 c 多大合适呢?

顺序存储结构存在的问题:存储空间分配不灵活,运算的空间复杂度高

链式存储结构

typedef struct PNode{
	float coef;				// 系数
    int expn;				// 指数
    struct PNode* next;		// 指针域
}PNode, *Polynomial;

在这里插入图片描述

【算法描述】多项式创建
void CreatePolyn(Polynomial &P int n)
P=new PNode;P->next=NULL;for(i=1;i<=n;++i) {s=new PNode:cin>>s->coef> >s->expn;pre=P:q=P->next;while(q&&q->expn<s->expn){pre=q;q=q->next;
s->next=q;pre->next=s;

无效创建Polyn(多项式和P,整数n)
P=新的PNode;
下一个=空值;
对于(i=1;i<=n;++i)
S=新的PNode;
CIN>S->Coef>S->EXPN;
pre=P;
Q=P->下一个;
而(q&q->EXPN<S->EXPN){
前=q;q=q-下一个;
9
一个=s;
//输入m项的系数和指数,建立表示多项式的有序链表F
//先建立一个带头结点的单链表//依次输入n个非零项
//生成新结点
//输入系数和指数
//pre用于保存q的前驱,初值为头结点//q初始化,指向首元结点//找到第一个大于输入项指数的项*q
//将输入项s插入到q和其前驱结点pre之间
多项式相加过程

在这里插入图片描述

新的多项式 C

在这里插入图片描述

【算法步骤】多项式相加

(1) 指针 p1 和 p2 初始化,分别指向 Pa 和 Pb 的首元结点。

(2) p3 指向和多项式的当前结点,初值为 Pa 的头结点。

(3) 当指针 p1 和 p2 均未达到相应表尾时,

则循环比较 p1 和 p2 所指结点对应的指数值(p1->expn 与 p2->expn),有下列 3 种情况

  • 当 p1->expn == p2->expn 时,则将两个结点种的系数相加

  • 若和不为零,则修改 p1 所指结点的系数值,同时删除 p2 所指结点。

  • 若和为零,则删除 p1 和 p2 所指结点。

  • 当 p1->expn < p2->expn 时,则应摘取 p1 所指结点插入到 " 和多项式 " 链表中去;

  • 当 p1->expn > p2->expn 时,则应摘取 p2 所指结点插入到 " 和多项式 " 链表中去;

(4) 将非空多项式的剩余段插入到 p3 所指结点之后。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值