C语言问题,将一个一元多项式按指数从小到大的顺序存入单项链表中(并合并同类项),最后输出

#include<stdio.h>
#include<stdlib.h>
typedef struct
{
float coef;
int exp;
}Term;
typedef struct node
{
Term data;
struct node *next;
}Pnode,*Plink;
void create(Plink *H);
void charu(Plink H,Term x);
void shuchu(Plink H);

void charu(Plink H,Term x)
{
Plink p,q,s;
p=H;
q=p->next;
while(p!=NULL)
{

if(q!=NULL&&p->data.exp<x.exp&&q->data.exp>x.exp)//生成新节点插在p和q之间
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
s->data=x;
s->next=p->next;
p->next=s;
p=p->next;
return;
}
else if(q!=NULL&&q->data.exp==x.exp)//合并同类项
{
if(q->data.coef+x.coef==0) //如果合并后系数为零,删掉
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
p->next=q->next;
return;
}
else
{
s=(Plink)malloc(sizeof(Pnode)); //合并后系数不为零,合并
s->next=NULL;
q->data.coef=q->data.coef+x.coef;
return;
}
}
else if(q==NULL&&q->data.exp<x.exp) //插在最后
{
s=(Plink)malloc(sizeof(Pnode));
s->next=NULL;
s->data=x;
q=s;
return;
}
else //寻找插入位置
{
p=p->next;
q=q->next;
}
}
}
void create(Plink *H)
{
int y=1;
(*H)=(Plink)malloc(sizeof(Pnode));
(*H)->data.exp=-1;
(*H)->next=NULL;
Term x;
while(y)
{
printf("请输入系数、指数\n");
scanf("%f",&x.coef);
scanf("%d",&x.exp);
while(getchar()!='\n');
charu(*H,x); //调用插入函数
printf("是否继续?继续 1,结束 0\n");
scanf("%d",&y);
while(getchar()!='\n');
}
}
void shuchu(Plink H)
{
H=H->next;
while(H!=NULL)
{
printf("%f",H->data.coef);
printf("%d\n",H->data.exp);
H=H->next;
}
}
void main()
{
Plink H;
create(&H);
shuchu(H);
}

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

typedef struct {
double coef;
int exp;
}Term;

typedef struct node {
Term data;
struct node *next;
}Pnode,*Plink;

void create(Plink *H);
void charu(Plink H,Term x);
void shuchu(Plink H);

void InsertNode(Plink head,Term x) {
Plink p,q,s;
for(p = head; p->next != NULL; p = p->next) {
if(p->next->data.exp < x.exp) { // 幂次更高,则插入
s = (Plink)malloc(sizeof(Pnode));
s->data = x;
s->next = p->next;
p->next = s;
return;
}
if(p->next->data.exp == x.exp) { // 幂次相等,则合并
p->next->data.coef += x.coef;
if(fabs(p->data.coef) <= 1E-6) { // 系数太小,则删除
q = p->next;
p->next = q->next;
free(q);
return;
}
return;
}
}
s = (Plink)malloc(sizeof(Pnode)); // 幂次最低,则放在最后
s->data = x;
s->next = p->next;
p->next = s;
}

Plink CreateList() {
Plink head;
head = (Plink)malloc(sizeof(Pnode));
head->data.exp = 0;
head->data.coef = 0;
head->next = NULL;
Term x;
printf("请输入系数 指数(q to quit):");
while(scanf("%lf%d",&x.coef,&x.exp) == 2) {
InsertNode(head,x);      //调用插入函数
printf("请输入系数 指数(q to quit):");
}
return head;
}

void ShowList(Plink head) {
Plink p = head->next;
while(p != NULL) {
printf("%.2lf %d\n",p->data.coef,p->data.exp);
p = p->next;
}
}

int main() {
Plink head = CreateList();
ShowList(head);
return 0;
}

追问

那么假如幂次相等,系数合并之后=0怎么办?

温馨提示:答案为网友推荐,仅供参考
相似回答