安舟


私信TA

用户名:dotcpp0603054

访问量:1956

签 名:

等  级
排  名 248
经  验 6047
参赛次数 0
文章发表 21
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

注意事项:

参考代码:

#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 人评分

  评论区

  • «
  • »