当前位置:编程学习 > C/C++ >>

关于数据结构(C语言)多项式计算

谁能给我提供个数据结构的多项式计算的代码,普通的,简单点的就行,要直接就能运行的!可以追加积分
追问:第二部分补充是干什么的?
答案:我刚做好的课程设计,得了个A+,免费给你了,包你满意,几乎没有漏洞!
//头文件
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//定义多项式的项
typedef struct Polynomial{
    float coef;
    int expn;
    struct Polynomial *next;
}*Polyn,Polynomial;

void Insert(Polyn p,Polyn h){    
    if(p->coef==0) free(p);//系数为0的话释放结点
    else
{
        Polyn q1,q2;
        q1=h;
  q2=h->next;
        while(q2&&p->expn<q2->expn)
  {//查找插入位置
            q1=q2;
            q2=q2->next;
  }
        if(q2&&p->expn==q2->expn)
  {//将指数相同相合并
            q2->coef+=p->coef;
            free(p);
            if(!q2->coef)
   {//系数为0的话释放结点
                q1->next=q2->next;
                free(q2);
   }
  }
        else
  {//指数为新时将结点插入
            p->next=q2;
            q1->next=p;
  }
}
}

Polyn CreatePolyn(Polyn head,int m){
//建立一个头指针为head、项数为m的一元多项式
    int i;
    Polyn p;
    p=head=(Polyn)malloc(sizeof(struct Polynomial));
    head->next=NULL;
    for(i=0;i<m;i++)
{
        p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
        printf("请输入第%d项的系数与指数:",i+1);
        scanf("%f %d",&p->coef,&p->expn);
        Insert(p,head);   //调用Insert函数插入结点
}
    return head;
}

void DestroyPolyn(Polyn p){
//销毁多项式p
    Polyn q1,q2;
    q1=p->next;
    q2=q1->next;
    while(q1->next)
{
        free(q1);
        q1=q2;
        q2=q2->next;
}
}

void PrintPolyn(Polyn P){
Polyn q=P->next;
    int flag=1;//项数计数器
    if(!q)
{ //若多项式为空,输出0
        putchar('0');
        printf("\n");
        return;
}  
    while(q)
{
        if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项
        if(q->coef!=1&&q->coef!=-1)
  {//系数非1或-1的普通情况
            printf("%g",q->coef);
            if(q->expn==1) putchar('X');
            else if(q->expn) printf("X^%d",q->expn);
  }
        else
  {
            if(q->coef==1)
   {
                if(!q->expn) putchar('1');
                else if(q->expn==1) putchar('X');
                else printf("X^%d",q->expn);
   }
            if(q->coef==-1)
   {
                if(!q->expn) printf("-1");
                else if(q->expn==1) printf("-X");
                else printf("-X^%d",q->expn);
   }
  }
        q=q->next;
        flag++;
}
    printf("\n");
}

int compare(Polyn a,Polyn b){
    if(a&&b)
{
        if(!b||a->expn>b->expn) return 1;
        else if(!a||a->expn<b->expn) return -1;
        else return 0;
}
    else if(!a&&b) return -1;//a多项式已空,但b多项式非空
    else return 1;//b多项式已空,但a多项式非空
}

Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
    Polyn qa=pa->next;
    Polyn qb=pb->next;
    Polyn headc,hc,qc;
    hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
    hc->next=NULL;
    headc=hc;
    while(qa||qb)
{
        qc=(Polyn)malloc(sizeof(struct Polynomial));
        switch(compare(qa,qb)){
        case 1:
   {
                qc->coef=qa->coef;
                qc->expn=qa->expn;
                qa=qa->next;
                break;
   }
        case 0:
   {
                qc->coef=qa->coef+qb->coef;
                qc->expn=qa->expn;
                qa=qa->next;
                qb=qb->next;
                break;
   }
        case -1:
   {
                qc->coef=qb->coef;
                qc->expn=qb->expn;
                qb=qb->next;
                br

上一个:c语言填数问题,高手进!!
下一个:C语言中的位运算有什么优点?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,