c语言-C语言链表应用一元多项式相加,程序运行不了,求指点

问题描述

C语言链表应用一元多项式相加,程序运行不了,求指点

#include
#include
#include
//一元多项式相加
typedef int Status;

typedef struct Node{
float coef;
int expn;
struct Node *next;
}Node,*LinkList;

void CreatList(LinkList &P,int m)//按指数升序将元素依次插到第一个结点前,得到降序的表
{
void Insfirst(LinkList &P,LinkList &r);
LinkList h,r;
int i;

P=(LinkList)malloc(sizeof(Node));//建立头结点
if(!P)
P->next=NULL;P->expn=m;
h=P;
printf("按指数升序输入每一项的系数和指数:
");

for(i=0;i<m;i++)
{
    r=(LinkList)malloc(sizeof(Node));        //建立新的结点
    printf("第%d项的系数和指数:",i+1);
    scanf("%f%d",&r->coef,&r->expn);         //将多项式的系数和指数存入
    Insfirst(P,r);                           //将该结点插入到第一个结点之前
}

}

void Delfirst(LinkList &P,LinkList &q)//删除P指向的结点后的第一个结点
{
P->next=q->next;
}

void Insfirst(LinkList &P,LinkList &r)//在结点P之后紧接着插入一个结点
{
r->next=P->next;
P->next=r;
}

int cmp(int a,int b) //比较a和b大小
{
if(a<b)
return -1;
else if(a==b)
return 0;
else
return 1;
}

void Addpolyn(LinkList &Pa,LinkList &Pb)//多项式相加,结果保存在A(x)中,使按指数降序排列
{
LinkList ha,hb,qa,qb;
int m,n;
float sum=0;
ha=Pa;
hb=Pb; //ha,hb指向头结点
qa=ha->next;
qb=hb->next; //qa,qb指向Pa,Pb中的当前结点

while(qa&&qb)    //当前结点非空
{
    m=qa->expn;
    n=qb->expn;  //分别取Pa,Pb中当前结点的指数值保存在m,n中
    switch(cmp(m,n))//比较指数大小
    {
    case 1:            //m>n,Pa中当前结点指数大,不需要改变,ha、qa后移一位
        ha=qa;
        qa=qa->next;
        break;
    case 0:            //m=n,指数相同需计算系数
        sum=qa->coef+qb->coef;  //计算系数和
        if(sum!=0)              //系数和不为零,改变qa的系数,Pa中的改变结束,ha更新(后移一位)
        {
            qa->coef=sum;
            ha=qa;
        }
        else                    //系数和为零
        {
            Delfirst(ha,qa);    //删除Pa中ha指向的结点后的第一个结点,即qa指向的结点,并释放
            free(qa);
        }
        Delfirst(hb,qb);
        free(qb);               //删除并释放qb
        qb=hb->next;
        qa=ha->next;            //重新获取qa、qb的地址
        break;
    case -1:           //m<n,Pb中的指数大
        Delfirst(hb,qb);       //将该结点从Pb中删除
        Insfirst(ha,qb);       //将该结点连接在ha指向的结点之后
        qb=hb->next;           //更新qb的地址
        break;
    }//switch
}//while
if(Pb->next!=NULL)             //Pb非空,链接Pb中剩余结点
    ha->next=hb->next;
free(hb);                      //释放Pb的头结点

}

void Traversal(LinkList &L)//从第一个元素开始输出表中元素
{
LinkList p;
float a;
int b;
p=L->next; //p指向当前结点

while(p)       //当p不是空的
{
    a=p->coef;
    b=p->expn;
    printf("%f %d	",a,b);//输出p中的系数和指数
    p=p->next;            //更新p值,p指向下一个结点
}
if(L->next!=NULL)
    printf("
");

}

int main()
{
LinkList Pa,Pb;
int m,n;
printf("输入多项式A(x)的项数:");
scanf("%d",&m);
CreatList(Pa,m); //建立第一个多项式

printf("输入多项式B(x)的项数:");
scanf("%d",&n);
CreatList(Pb,n);          //建立第二个多项式

Addpolyn(Pa,Pb);          //多项式相加
Traversal(Pa);            //遍历操作,从表头开始输出多项式
return 0;

}

解决方案

http://www.cnblogs.com/wwj9413/archive/2011/10/22/2292808.html

解决方案二:

链表应用-- 一元多项式相加
一元多项式相加-链表应用
C++链表应用:多项式相加

解决方案三:

http://bbs.bccn.net/thread-240605-1-1.html

时间: 2024-11-08 19:30:32

c语言-C语言链表应用一元多项式相加,程序运行不了,求指点的相关文章

c语言-C语言(数据结构)链表创建问题

问题描述 C语言(数据结构)链表创建问题 #include #include//含malloc.h #define LEN sizeof( Faction) //一元多项式结构体 typedef struct Faction{ int coefficient;//系数 int exponent;//指数 struct Faction next; }Faction; //创建链表 Faction *creat() { Faction *head, *p1, *p2; head = NULL; p1

c语言编写了个链表,但无法正确的输出,求大神指导

问题描述 c语言编写了个链表,但无法正确的输出,求大神指导 链表方面一直不是特别清楚.自己编了个链表,但却无法正确输出,求大神帮忙 #include #include typedef struct lnode Lnode; struct lnode { int data; Lnode *next; }; Lnode *makeNode(int data) { Lnode *new_node=(Lnode *)malloc(sizeof(Lnode)); if(new_node==NULL) {

c语言如何把链表数据写入文件?

问题描述 c语言如何把链表数据写入文件? 在写一个通讯录管理系统,然后要把联系人的信息结构体放到链表中,然后将链表里的信息写入文件中,下次打开时还能从该文件读出数据. 链表头指针TEL,结构体中有name,tel,style,mail 四项,存入"telephone.txt"中. 我是这样写的 /*退出程序时将数据写回telephone.txt进行更新*/ void ReadBack() { FILE *TEL = fopen("telephone.txt",&qu

c语言-C语言新人关于链表的问题

问题描述 C语言新人关于链表的问题 如何实现对一个链表进行排序后的输出,但是不改变链表本身. 不能新建链表来拷贝. 解决方案 我也是新人,如果是这样的话.会比较麻烦.我的想法是这样的.先找到链表尾.知道一共有多少个数据,然后创建一个结构体数组,结构体中定义Int 排序,你的类型指针变量,排序后将排序的顺序存入数组.将链表地址存入指针变量,建一个循环,依次输出.不过此种方法依然需要建一个数组.不知道行不行 解决方案二: 必须借助内存空间,完成排序工作. 解决方案三: 你把链表的每个元素读出来存到一

c语言-C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看

问题描述 C语言将两个递增有序单链表归并为一个降序的单链表,求大侠帮忙看看 #include #include #define N 8 typedef struct list { char c; struct list *next; } SLIST; SLIST *creat(char *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i { q=(SLIST *)malloc(sizeof(SLI

c语言-C语言建立单链表的问题

问题描述 C语言建立单链表的问题 #include<stdio.h> #include<stdlib.h> struct node { int num; int L; struct node *next; }; typedef struct node LN; typedef struct { int num1[100]; int L1; }S; void Creat1(S &p); void Creat(LN *p); void main() { S p; LN *h; p

C语言之单向链表详解及实例代码_C 语言

1,单向链简洁. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个结点都有指针成员变量指列表中的下一个结点:列表是由结点构成,由head指针指向第一个成为表头的结点而终止于最后一个指向nuLL的指针: 2,例子要求: 根据示例代码中的例子,完成单向链表(single linked list)中的以字符串为数据的链表的插入.删除以及查找,并支持单向链表的反转

C语言之单链表的插入、删除与查找_C 语言

单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.要实现对单链表中节点的插入.删除与查找的功能,就要先进行的单链表的初始化.创建和遍历,进而实现各功能,以下是对单链表节点的插入.删除.查找功能的具体实现: #include<stdio.h> #include<stdlib.h> #include<string.h> typedef int ElemType; /** *链表通用类型 *ElemType 代表自定义的数据类型 *struct

用C语言实现单链表的各种操作(二)_C 语言

上一篇文章<用C语言实现单链表的各种操作(一)>主要是单链表的一些最基本的操作,下面,主要是一些其他的典型的算法和测试程序. 复制代码 代码如下: /* 对单链表进行排序处理*/struct LNode *sort(struct LNode *head){  LinkList *p;  int n,i,j;  int temp;  n = ListLength(head);  if(head == NULL || head->next == NULL)    return head;