解题思路:
注意事项:
参考代码:
#include<stdio.h>
#include<stdlib.h>
void createListL();
typedef struct Node
{
int a;//表示系数
int b;//表示指数
struct Node *next;
}Node,*LinkList;
void display(LinkList L)//输出合并后的L链表
{
Node *p;
p=L->next;
while(p!=NULL)
{
while(p->a==0)
p=p->next;
printf("%d %d ",p->a,p->b);
p=p->next;
}
printf("\n");
}
void add(LinkList L,LinkList S)
{
Node *p,*q,*t=L;
Node *m=(Node *)malloc(sizeof(Node));
p=L->next;
q=S->next;
while(q!=NULL)//对S链表的结点进行遍历
{
while(q->b<p->b&&p->next!=NULL)//对指数进行比较,直到q的指数大于或小于p的指数则跳出循环
{
p=p->next;
t=t->next;
}
if(q->b==p->b)//当指数相等时,系数相加
{
p->a=p->a+q->a;
}
else if(q->b>p->b)//当q的指数大于p的指数时,创建一个新结点即m,把q的值赋给m,并插入到p的前一个结点
{
m->a=q->a;
m->b=q->b;
t->next=m;
m->next=p;
t=t->next;
}else//如果遍历到p的最后一个结点时,即p->next==NULL,将新节点m插入此时p的下一个结点
{
m->a=q->a;
m->b=q->b;
p->next=m;
m->next=NULL;
}
q=q->next;
}
display(L);//合并完后输出结果
}
LinkList createListS(LinkList L)
{
int i,j;
char k;
Node *S=(Node *)malloc(sizeof(Node));
S->next=NULL;
Node *tail=S;
while(~scanf("%d %d",&i,&j))
{
k=getchar();
Node *p=(Node *)malloc(sizeof(Node));
p->a=i;
p->b=j;
p->next=tail->next;;
tail->next=p;
tail=tail->next;
if(k!=' ')//若输入S链表后没有任何输入,就执行add()子函数
{
add(L,S);//将S合并到L,最终输出L,即为一元多项式结果
createListL();//可再次创建L,实现计算多组数据
}
}
}
void createListL()
{
int i,j;
char k;
Node *L=(Node *)malloc(sizeof(Node));
L->next=NULL;
Node *tail=L;
while(~scanf("%d %d",&i,&j))
{
k=getchar();
Node *p=(Node *)malloc(sizeof(Node));
p->a=i;
p->b=j;
p->next=tail->next;
tail->next=p;
tail=tail->next;
if(k=='\n')
{
createListS(L);//L链表创建后,建立S链表,即第二行输入
}
}
}
void main()
{
createListL();//创建第一行,即L链表
}
0.0分
1 人评分
程序员的表白 (C语言代码)浏览:1575 |
C语言程序设计教程(第三版)课后习题8.2 (Java代码)浏览:2287 |
输出正反三角形 (C语言代码)浏览:859 |
The 3n + 1 problem (C语言代码)浏览:603 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:727 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:567 |
C二级辅导-公约公倍 (C语言代码)浏览:537 |
Quadratic Equation (C语言代码)浏览:1034 |
简单的a+b (C语言代码)浏览:531 |
小O的图案 (C语言代码)浏览:979 |