用C语言实现数据结构的题目:一元多项式相加

下面的是本人编写的程序,经调试发现在排序那段有问题。有没有高人帮我修改下,最好不要把我的框架改了,小弟再次谢过!

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

#define MAXSIZE 20 //结构定义
typedef struct Node{
float coef;
int expn;
struct Node *next;
}*LNode;

void CreatF(LNode &L,int n){ //建立一个多项式
int i;
LNode p,q;
L=(LNode) malloc(sizeof(LNode));
L->expn=-1;
L->next=NULL;
p=L->next;
q=L;
for(i=1;i<=n;i++){
p=(LNode) malloc(sizeof(LNode));
p->next=NULL;
printf("请输入第%d项的系数",i);
scanf("%f",&p->coef);
printf("请输入第%d项的指数",i);
scanf("%d",&p->expn);
q->next=p;
p=p->next;
q=q->next;
}
}//CreatF

void PaixuF(LNode &L,int n){ //冒泡排序
LNode p,q;
p=L->next;
q=p->next;
int i,j,t;
for(i=1;i<n;i++){
for(j=1;j<n-i;j++){
if(p->expn>q->expn){
t=p->expn;
p->expn=q->expn;
q->expn=t;
}//if
p=p->next;
q=q->next;
}//for
}//for
}//PaixuF

void AddF(LNode &L1,LNode &L2){ //多项式加法运算
LNode o,p,q;
float sum;
o=L1;
p=L1->next;
q=L2->next;
while(p&&q){
if(p->expn-q->expn<0){
o=o->next;
p=p->next;
}
else if(p->expn-q->expn==0){
sum=p->coef+q->coef;
if(sum!=0.0){
p->coef=sum;
o=o->next;
p=p->next;
q=q->next;
}//if
else {
o=p->next;
o=p;
p=p->next;
q=q->next;
}//else
}
else if(p->expn-q->expn>0){
o=o->next;
q=q->next;
}
}//while
if(!q->next) p->next=q;
free(L2);
}//AddF

void DisplayF(LNode &L,int n){ //显示多项式
LNode p;
p=L->next;
printf("%f*(%d)",p->coef,p->expn);
for(int i=2;i<=n;i++){
if(p->coef<0){
printf("%f*(%d)",p->coef,p->expn);
p=p->next;
}//if
else printf("+%f*(%d)",p->coef,p->expn);
}//for
}//DisplayF

void main(){
int m,n;
LNode L1,L2;
printf("请输入多项式L1的项数");
scanf("%d",&m);
CreatF(L1,m);
printf("请输入多项式L2的项数");
scanf("%d",&n);
CreatF(L2,n);
PaixuF(L1,m);
PaixuF(L2,n);
AddF(L1,L2);
DisplayF(L1,m);
}//main

注意:输入时,指数按升序输入
如: 1 1 2 2 3 3 0 0
2 2 3 3 0 0
结果:1 1 4 2 6 3

#include <stdio.h>
#include <malloc.h>
struct poly //设置结构体
{
int xi;
int zhi;
struct poly *next;
};
struct poly *jianli(void) //建立链表
{
struct poly *p1,*head1,*p2;
head1=(struct poly*)malloc(sizeof(poly));
p1=(struct poly*)malloc(sizeof(poly));
scanf("%d %d",&p1->xi,&p1->zhi);
head1->next=p1;
p1->next=NULL;
while(1)
{
p2=(struct poly*)malloc(sizeof(poly));
scanf("%d %d",&p2->xi,&p2->zhi);
if(p2->xi==0) if(p2->zhi==0) {free(p2);break;}
p1->next=p2;
p2->next=NULL;
p1=p2;
}
return(head1);
}
struct poly *jisuan(struct poly *head1,struct poly *head2) //多项式的相加
{
struct poly *p1,*p2,*r1,*r2;
r1=head1;
p1=head1->next;
r2=p2=head2->next;
while(p1&&p2)
{
if(p1->zhi==p2->zhi)
{
p1->xi=(p1->xi)+(p2->xi);
p2=p2->next;
free(r2);
r2=p2;
r1=p1;
p1=p1->next;
}
else if(p1->zhi>p2->zhi)
{
r2->next=p1;
r1->next=r2;
p2=p2->next;
r2=p2;
}
else
if(p1->zhi<p2->zhi)
{
r1=p1; p1=p1->next;
}
}
if(p1) free(head2);
else {
r1->next=p2;
free(head2);
}
return(head1);
}
void print(poly *head)
{
struct poly *p;
p=head->next;
while(p)
{
printf("%d %d\t",p->xi,p->zhi);
p=p->next;
}
}
void main()
{
struct poly *head1,*head2,*p;
printf("请输入多项式的每一项的系数与指数并以0 0为结束标志:\n");
head1=jianli();
printf("\n请输入另一个多项式的每一项的系数与指数并以0 0为结束标志:\n");
head2=jianli();
p=jisuan(head1,head2);
printf("\n合并后:\n");
print(p);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-04-28
在for条件参数中应用==(等于号)而不是=(赋值号)如:for(i==1,j<10,i==1)

用C语言实现数据结构的题目:一元多项式相加
如: 1 1 2 2 3 3 0 0 2 2 3 3 0 0 结果:1 1 4 2 6 3 include <stdio.h> include <malloc.h> struct poly \/\/设置结构体 { int xi;int zhi;struct poly *next;};struct poly *jianli(void) \/\/建立链表 { struct poly *p1,*head1,*p2;head1=(struct poly*)malloc(siz...

数据结构课程设计报告(一元多项式的计算)
node * create(void) \/*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*\/ { node *h,*r,*s;float c;int e;h=(node *)malloc(sizeof(node)); \/*建立多项式的头结点,为头结点分配存储空间*\/ r=h; \/*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*...

数据结构(c++)一元多项式的代数运算
cout<<"\\t***一元多项式的简单运算***"<<endl; cout<<"\\t\\t 1创建要运算的两个一元多项式"<<endl; cout<<"\\t\\t 2将两个一元多项式相加"<<endl; cout<<"\\t\\t 3将两个一元多项式相减"<<endl; cout<<"\\t\\t 4将两个一元多项式相乘"<<endl; cout<<"\\t\\t 5显示两个一元多项式"<<endl; cou...

急求C语言数据结构一元多项式
currB = headB->next;headC = Init();while(currA!=NULL && currB!=NULL){ if(currA->exp > currB->exp){ AddNode(headC, currA->coef, currA->exp);currA = currA->next;} else if(currA->exp currB->exp){ AddNode(headC, currB->coef, currB->exp);currB = cur...

如何用C语言实现一元多项式简单计算器的设计
(2)多项式输出,以 c1,e1,c2,e2,...输出 其中ci为系数,ei为指数;(3)多项式相加,c=a+b。说明: (1)多项式一指数升序排序,但输入时不检查;(2)以带头指针的单链表存储。---*\/ define OK 1 define FAILE 0 define ERROR 0 define OVERFLOW 0 include <iostream> using namespace std;typ...

数据结构(C语言)用单链表存储一元多项式,并实现两个多项式的相加...
数据结构(c语言)用单链表存储一元多项式,并实现两个多项式的相加运算【最新】阅读:1037次 页数:36页 2016-03-21 举报 include<stdio.h> include<stdlib.h> include<malloc.h> typedef int ElemType;\/*单项链表的声明*\/ typedef struct PolynNode{ int coef; \/\/ 系数 int expn; \/\/ ...

请高手帮帮忙,我写了数据结构中的一元多项式的表示及相加,只有框架,能...
一元多项式的相加 提示:(1) 一元多项式的表示问题:对于任意一元多项式:Pn(x)= P0+ P1X1+ P2X2+ … + PiXi+ … + PnXn 可以抽象为一个由“系数-指数”对构成的线性表,且线性表中各元素的指数项是递增的:P=( ( P0,0), ( P1,1), ( P2,2), … , ( Pn,n) )(2 ) ...

数据结构课程设计(C语言版) 一元稀疏多项式的运算
输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列;⑶ 多项式A和B相加,建立多项式A+B,输出相加的多项式;⑷ 多项式A和B相减,建立多项式A-B,输出相减的多项式;⑸ 设计一个菜单,上述操作要求的基本功能。

运用C#数据结构编写程序进行一元多项式的计算
if (r != null) return r.factor_; else return 0; } set { if (rank < 0) throw new ArgumentOutOfRangeException(

...用单链表储存一元多项式,并实现两个多项式的相加运算(语法没有错误...
include <malloc.h> define MAX 20 \/\/多项式最多项数 typedef struct{ double ratio;int exp;} ElemType;typedef struct LNode { ElemType data;struct LNode *next;} LinkList;void CreateListR(LinkList *&L,ElemType a[],int n){ LinkList *s,*r;int i;L=(LinkList *)malloc(size...

相似回答