链表实现一元多项式相加

本文介绍了如何使用C++通过链表结构实现一元多项式的相加操作,多项式项按次数从高到低排列。
摘要由CSDN通过智能技术生成

C++链表实现一元多项式相加代码如下:
(输入多项式按次数从高到低排列)

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
   
    struct node{
   
        int coe;
        int order;
        struct node *link;
    };//定义节点类型,coe表示x前的系数,order表示x的次数

    int coe,order;
    int i;

    int nodeNumA;//多项式A的项数
    printf("请输入多项式A的项数:\n");
    scanf("%d",&nodeNumA);

    printf("请输入多项式A:\n");
    struct node *headA=0,*pA=0,*qA=0;
    scanf("%d %d",&coe,&order);
    headA=new struct node;
    headA->coe=coe;
    headA->order=order;
    headA->link=0;
    qA=headA;
    for(i=1;i<nodeNumA;i++){
   
        scanf("%d %d",&coe,&order);
        pA=new struct node;
        pA->coe=coe;
        pA->order=order;
        pA->link=0;
        qA->link=pA;
        qA=qA->link;
    }//扫入A

    printf("\n您输入的多项式A为:\n");
    printf("%dx^%d",headA->coe,headA->order);
  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <stdio.h> #include <stdlib.h> struct node { // 定义节点结构体 int coef; // 系数 int exp; // 指数 struct node *next; // 指向下一个节点的指针 }; typedef struct node Node; Node* create_node(int coef, int exp) { // 创建一个节点 Node *new = (Node*)malloc(sizeof(Node)); new->coef = coef; new->exp = exp; new->next = NULL; return new; } Node* add_poly(Node *poly1, Node *poly2) { // 两个多项式相加 Node *head = create_node(0, 0); // 头结点,作为新的多项式的起点 Node *p1 = poly1, *p2 = poly2, *p3 = head; while (p1 != NULL && p2 != NULL) { if (p1->exp > p2->exp) { // 计算结果多项式的该项为第一个多项式的当前项 p3->next = create_node(p1->coef, p1->exp); p1 = p1->next; } else if (p1->exp < p2->exp) { // 计算结果多项式的该项为第二个多项式的当前项 p3->next = create_node(p2->coef, p2->exp); p2 = p2->next; } else { // 计算结果多项式的该项为两个多项式的当前项之和,系数相加 p3->next = create_node(p1->coef + p2->coef, p1->exp); p1 = p1->next; p2 = p2->next; } p3 = p3->next; } // 处理没有计算过的多项式项 while (p1 != NULL) { p3->next = create_node(p1->coef, p1->exp); p1 = p1->next; p3 = p3->next; } while (p2 != NULL) { p3->next = create_node(p2->coef, p2->exp); p2 = p2->next; p3 = p3->next; } return head->next; // 返回新的多项式 } void print_poly(Node *poly) { // 输出多项式 Node *p = poly; while (p != NULL) { printf("%dX^%d ", p->coef, p->exp); if (p->next != NULL && p->next->coef > 0) { printf("+ "); } p = p->next; } printf("\n"); } int main() { Node *poly1, *poly2, *result; // 创建第一个多项式 poly1 = create_node(3, 5); poly1->next = create_node(-2, 3); poly1->next->next = create_node(1, 1); // 创建第二个多项式 poly2 = create_node(2, 4); poly2->next = create_node(-7, 3); poly2->next->next = create_node(4, 1); result = add_poly(poly1, poly2); // 两个多项式相加 printf("多项式1:"); print_poly(poly1); // 输出第一个多项式 printf("多项式2:"); print_poly(poly2); // 输出第二个多项式 printf("相加结果:"); print_poly(result); // 输出相加结果 // 释放内存 while (poly1 != NULL) { Node *p = poly1; poly1 = poly1->next; free(p); } while (poly2 != NULL) { Node *p = poly2; poly2 = poly2->next; free(p); } while (result != NULL) { Node *p = result; result = result->next; free(p); } return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值