数据结构学习笔记(二)多项式加法与乘法

这篇博客介绍了如何通过链表实现多项式的加法和乘法运算,强调了数据结构的设计,包括使用链表的优势。在加法中,通过比较指数合并同类项;乘法采用双重循环,逐项相乘并插入到结果链表。文中提到了多项式输出的实现,并指出在代码实现时应注意的细节,如指针管理、新节点的生成和插入等。
摘要由CSDN通过智能技术生成

之前自己看书学链表、栈、队列,觉得比较难懂,还是得自己动手实践下。这次就是实现一个多项式的加法和乘法运算,主要是要求熟练链表的各种操作。
看看程序的大体框架是:

  1. 设计数据结构:多项式的表示。可以用数组和链表。数组需事先确定数组大小,链表则对动态操作比较有利。

  2. 读多项式:这里需要设计一个attach函数,是用来将新的结点插入链尾的。

  3. 加法实现:多项式相加其实就是比较指数,相同则合并同类项,不同则直接插入到结果链表。

  4. 乘法实现:乘法实现比较复杂。大致的思路就是其中一个多项式的每一项与另一个多项式的每一项相乘。可以先将p1的第一项与p2的各项相乘得到一个初始的p,然后再双重循环P1 p2,系数相乘指数相加,再插入到初始链表的适当位置。由于原来的链表是按指数递减排列的,只要比较指数大小就可以找到适当的插入位置的。当然其中还有很多细节问题需注意。

  5. 多项式输出:输出用循环,链表指针依次后移就行。

代码实现:

#include <cstdio>
#include <cstdlib>
#include <iostream>

typedef int Type;
typedef struct PolyNode *PolyNomial;
struct PolyNode {
  Type coef;
  Type expo;
  PolyNomial link;
};

//多项式读入函数
void attach(Type e, Type c, PolyNomial *PtrRear) {
  /*注意这里PtrRear实际上是指针的指针,为什么这么做呢?由于在本函数中要改变d当前结果表达式尾指针的值,
  所以函数传递进来的是结点指针的地址,*PtrRear指向尾项*/
  /*因为c语言中函数参数传递要改变参数值应采用传址方式*/
  PolyNomial P;
  P = (PolyNomial)malloc(sizeof(struct PolyNode));
  P->coef = c;
  P->expo = e;
  P->link = NULL;
  (*PtrRear)->link = P;
  (*PtrRear) = P;
}

PolyNomial ReadPloy() {
  int N, c, e;
  PolyNomial P, Rear, t;
  //生成一个头节点来使Rear指向它
  P = (PolyNomial)malloc(sizeof(struct PolyNode));
  P
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值