美文网首页
C语言实现链式线性表表示一元多项式

C语言实现链式线性表表示一元多项式

作者: obsession_me | 来源:发表于2018-05-19 11:42 被阅读0次

假设Q_m(x)是一元m次多项式,同样可以用线性表Q来表示:

<center>Q=(q_0,q_1,...,q_m)</center>

不失一般性,设P_n(x)=(p_0,p_1,...,p_n),且n>m,则易知

P_n(x)+Q_m(x)=(p_0+q_0, p_1+q_1,...,p_m+q_m,p_{m+1},...,p_n)

故知,可以通过线性表来表示,而出于对节省空间的考量,故使用链式线性表。

#include <stdio.h>
#include <stdlib.h>

typedef struct polynomial{
    float coef;  // coefficient
    int expn;    // exponent
}polynomial;

typedef struct LNode{
    polynomial data;
    struct LNode * next;
}LNode;

void insertlast(LNode *p, LNode *add){
    while(p->next != NULL){
        p = p->next;
    }
    p->next = add;
}

void createPolynomial(LNode *p, int m){
    // set the head node
    // p = malloc(sizeof(LNode)); 请注意,我们已经在main()函数中对她进行了一个申请空间的操作
    p->data.coef = 1; p->data.expn = 0; p->next=NULL;
    // build new
    int i;
    for (i=1; i<=m; ++i){
        LNode *temp = malloc(sizeof(LNode));
        temp->data.coef = rand() / 2.0; temp->data.expn = i;
        temp->next = NULL;
        insertlast(p, temp);
    }
}

void print_polynomial(LNode p){
    printf("the polynomail is: ");
    LNode *start = p.next;
    while(1){
        printf("%.2fx^%d ", start->data.coef, start->data.expn);
        if (start->next){
            start = start->next;
        }else{
            break;
        }
    }
    printf("\n");
}


int main(){
    LNode po;
    createPolynomial(&po, 5);

    print_polynomial(po);
    return 0;
}

相关文章

网友评论

      本文标题:C语言实现链式线性表表示一元多项式

      本文链接:https://www.haomeiwen.com/subject/wumodftx.html