关于多项式的加和、乘积可用链表和数组

文章目录关于多项式的加和、乘积1,运用数组运算2,运用链表运算2.1 创建链表 Created_linklist2.2 插入节点 insert ListNode2.3 删除节点 delete ListNode2.4 多项式相加 polynomial add2.4 多项式相乘 polynomial multiply2.4 free内存3,总结关于多项式的加和、乘积Dargon2020/11/11所遇到的的重要的问题:教科书 来自:《数据结构和算法分析》第三章对于链表操作,自己要
摘要由CSDN通过智能技术生成

关于多项式的加和、乘积

  • Dargon

  • 2020/11/11

  • 所遇到的的重要的问题:

  • 教科书 来自:《数据结构和算法分析》第三章

对于链表操作,自己要去自己实现链表的节本功能,例如基本的created、insert、delete。要写出来,并且运行才知道其中的一些道理,和自己容易出错的地方

1,运用数组运算

  • 运用数组存储对应指数的项的系数
    例如对于数组a[10] 可以存储0 次方~ 9 次方的系数,数组的下标对应的是指数,数组的元素的内容对应的是该位的系数。

  • 缺点
    当遇到不连续的情况,就事倍功半了 如计算a = X^1000 +5X^10, b = X^1050 +X^1 +5

2,运用链表运算

Creat struct:

typedef struct PNODE {
   
    int Coefficient;
    int Exponent;
    struct PNODE *Next;
}ListNode;

2.1 创建链表 Created_linklist

用两种方式创建链表

  1. 第一种 多申请一个head 浪费一些内存空间
ListNode *creat_list(int n) {
   
    ListNode *root;
    ListNode *pre, *current;
    int c, e, i;
    root =(ListNode *)malloc(sizeof(ListNode));
    assert(root !=NULL);
    pre =root;

    for( i =0; i <n; i++ ) {
           
        printf("请输入第%d项: ", i+1);
        scanf("%d%d", &c, &e);
        current =(ListNode *)malloc(sizeof(ListNode));
        assert( current !=NULL );
        current->Coefficient =c;
        current->Exponent =e;
        current->Next =NULL;

        pre->Next =current;
        pre =current;
    }
    return root;
}
  1. 此方法更合理
ListNode *creat_list_v2(int n) {
   
    ListNode *root;
    ListNode *newnode, *current;
    int c, e, i;
    root =current =NULL;
    for(i =0; i <n; i++) {
   
        printf("请输入第%d项: ", i+1);
        scanf("%d%d", &c, &e);
        newnode =(ListNode *)malloc(sizeof(ListNode));
        assert( newnode != NULL );

        newnode->Coefficient =c;
        newnode->Exponent =e;
        newnode->Next =NULL;

        if(root ==NULL) 
            root =newnode;
        else 
            current->Next =newnode;        
        current =newnode;
    }
    return root;
}

2.2 插入节点 insert ListNode

和正常的插入节点一样,将指向链表(根指针root)的指针作为参数传入到函数中,排除previous =NULL 的特殊情况

int insert_onenode_v2(ListNode **rootp) {
   
    ListNode *current;
    ListNode 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值