用C语言实现数据结构的题目:一元多项式相加
下面的是本人编写的程序,经调试发现在排序那段有问题。有没有高人帮我修改下,最好不要把我的框架改了,小弟再次谢过!#include<stdio.h>#include<std...
下面的是本人编写的程序,经调试发现在排序那段有问题。有没有高人帮我修改下,最好不要把我的框架改了,小弟再次谢过!
#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 展开
#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 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);
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询