| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 688 人关注过本帖
标题:小鱼儿の多项式运算
只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏
 问题点数:0 回复次数:3 
小鱼儿の多项式运算
最近在学数据结构自己就写了一下。。
和书上基本不一样,,因为前面自己写了一个比较ADT的顺序表所以就用它了。。
但我根本就没有用到顺序表的特点,我不想用书那种顺序表的那种处理方法。。太占内存了。。。
其实这种用链表处理更好。。。用顺序表导致代码好长啊。。。还是写了很多重复代码,,还需要不断提高。。。。
核心代码
程序代码:
#include "poly.h"

int InitPoly(int n,PPolyHead *head)
{
    int i;
    if(n<=0)
        return 0;
    *head=(PPolyHead)malloc(sizeof(PolyHead));
    (*head)->n=0;
    i=list_seq_create(n,&((*head)->head));
    if(i)
        return 1;
    else
        return 0;
}

void Polyinfo(int n,PPolyHead head)
{
    int t=n;
    Poly poly;
    while(t>0)
    {
        printf("请输入你的系数");
        scanf("%f",&poly.coef);
        puts("请输入指数");
        scanf("%d",&poly.exp);
        list_seq_add(&poly,head->head);
        head->n++;
        t--;
    }
    PolyMerge(head);//从开始就把相同指数的处理掉
}

void PolyShow(PPolyHead head)
{
    int num=0;
    if(!head)
        return;
    while(num<head->head->num)
    {
        printf("指数:%d\t",head->head->element[num].exp);
        printf("系数:%f\n",head->head->element[num].coef);
        num++;
    }
}

PPolyHead PolyAdd(PPolyHead head1,PPolyHead head2)
{
    int i,j,k;
    int flag=0;
    DATETYPE temp;
    PPolyHead head;
    InitPoly(head1->n+head2->n,&head);//用空间换时间。
    if(!head1||!head2)
        return NULL;
    for(i=0;i<head1->head->num;i++)
    {
        for(j=0;j<head2->head->num;j++)
        {
            if(head1->head->element[i].exp==head2->head->element[j].exp)
            {
                //some_time++;
                //head->head->element[i].coef=head1->head->element[i].coef+head2->head->element[i].coef;
                //head->head->element[i].exp=head1->head->element[i].exp;
                temp.coef=head1->head->element[i].coef+head2->head->element[j].coef;
                temp.exp=head1->head->element[i].exp;
                list_seq_add(&temp,head->head);
                flag=1;
            }
           
        }
              if(!flag)
              {
                  temp.coef=head1->head->element[i].coef;
                  temp.exp=head1->head->element[i].exp;
                  list_seq_add(&temp,head->head);
              }
            flag=0;
       
    }
                k=i;
                for(i=0;i<head2->head->num;i++)
                {
                    for(j=0;j<k;j++)
                        if(head2->head->element[i].exp==head->head->element[j].exp)
                        {
                            flag=1;
                        }
                        if(!flag)
                        {
                            temp.coef=head2->head->element[i].coef;
                            temp.exp=head2->head->element[i].exp;
                            list_seq_add(&temp,head->head);
                        }
                        flag=0;
                       
                }       
                   
            return head;

}

PPolyHead PolySub(PPolyHead head1,PPolyHead head2)
{
    int i,j,k;
    int flag=0;
    DATETYPE temp;
    PPolyHead head;
    InitPoly(head1->n+head2->n,&head);//用空间换时间。
    if(!head1||!head2)
        return NULL;
    for(i=0;i<head1->head->num;i++)
    {
        for(j=0;j<head2->head->num;j++)
        {
            if(head1->head->element[i].exp==head2->head->element[j].exp)
            {
                temp.coef=head1->head->element[i].coef-head2->head->element[j].coef;
                temp.exp=head1->head->element[i].exp;
                list_seq_add(&temp,head->head);
                flag=1;
            }
           
        }
        if(!flag)
        {
            temp.coef=head1->head->element[i].coef;
            temp.exp=head1->head->element[i].exp;
            list_seq_add(&temp,head->head);
        }
        flag=0;
       
    }
    k=i;
                for(i=0;i<head2->head->num;i++)
                {
                    for(j=0;j<k;j++)
                        if(head2->head->element[i].exp==head->head->element[j].exp)
                        {
                            flag=1;
                        }
                        if(!flag)
                        {
                            temp.coef=-head2->head->element[i].coef;
                            temp.exp=head2->head->element[i].exp;
                            list_seq_add(&temp,head->head);
                        }
                        flag=0;
                       
                }       
            return head;
}

PPolyHead PolyMulti(PPolyHead head1,PPolyHead head2)
{
    if(!head1||!head2)
        return NULL;
    int i,j;
    DATETYPE temp;
    PPolyHead head;
    InitPoly(head1->head->num*head2->head->num,&head);
    for(i=0;i<head1->head->num;i++)
    {
        for(j=0;j<head2->head->num;j++)
        {
            temp.exp=head1->head->element[i].exp+head2->head->element[j].exp;
            temp.coef=(head1->head->element[i].coef)*(head2->head->element[j].coef);
            list_seq_add(&temp,head->head);
        }
    }
    PolyMerge(head);
    return head;
}

void PolyMerge(PPolyHead head1)
{
    if(!head1)
        return;
    int n,i;
    for(n=0;n<head1->head->num;n++)
    {
        for(i=n+1;i<head1->head->num;i++)
        {
            if(head1->head->element[n].exp==head1->head->element[i].exp)
            {
                head1->head->element[n].coef+=head1->head->element[i].coef;
                list_seq_delet(i+1,head1->head);//注意list_seq_delet(loction)是位置不是下标.
                i--;
            }
             
        }
    }
}

vc6工程
polystudy.rar (224.13 KB)
搜索更多相关主题的帖子: 内存 多项式 
2011-10-01 10:37
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
呵呵,貌似没有写释放头代码,这个比较简单了。。。。。。。

不过要先释放元素,再释放头。不然内存泄露了

用心做一件事情就这么简单
2011-10-01 10:40
thlgood
Rank: 5Rank: 5
等 级:职业侠客
帖 子:281
专家分:381
注 册:2010-9-24
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册



无奈啦。。

o(∩∩)Linux & Python 群:187367181
2011-10-01 10:50
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
回复 3楼 thlgood
貌似在vc6中没有错误和警告啊

用心做一件事情就这么简单
2011-10-01 13:30
快速回复:小鱼儿の多项式运算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025850 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved