帮我解释一下这一段c代码

#include<stdio.h>#include<stdlib.h>typedefstructnode{//链表floatcoef;intexp;structnode*... #include<stdio.h>
#include<stdlib.h>
typedef struct node{ //链表
float coef;
int exp;
struct node *next;
}Node;
Node *create(){
float a;
int b;
char c;
Node *p1,*p2;
Node *root;
scanf("%f*X^%d",&a,&b);
p1=p2=(Node *)malloc(sizeof(Node));
if(p1!=NULL){
p1->coef=a;
p1->exp=b;
p1->next=NULL;
}
root=p1;
while(1){
scanf("%c%f*X^%d",&c,&a,&b);
if(c=='-')
a=-a;
if(b<0)
break;
p1=(Node *)malloc(sizeof(Node));
if(p1!=NULL){
p1->coef=a;
p1->exp=b;
p1->next=NULL;
}
p2->next=p1;
p2=p1;
}
return root;
}
Node *merge(Node *a,Node *b){
Node *p1,*p2,*p,*root;
p1=a;
p2=b;
if(p1->exp>p2->exp)
{
p=p2;
p2=p2->next;
}
else if(p1->exp<p2->exp)
{
p=p1;
p1=p1->next;
}
else
{
p=p1;
p->coef+=p2->coef;
p1=p1->next;
p2=p2->next;
}
root=p;
while(p1!=NULL&&p2!=NULL)
{
if(p1->exp>p2->exp)
{
p->next=p2;
p=p->next;
p2=p2->next;
}
else if(p1->exp<p2->exp)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else
{
p->next=p1;
p=p->next;
p->coef+=p2->coef;
p1=p1->next;
p2=p2->next;
}
}
while(p1!=NULL){
p->next=p1;
p1=p1->next;
}
while(p2!=NULL){
p->next=p2;
p2=p2->next;
}
return root;
}
int main(){
Node *a, *b,*c;
a=create();
b=create();
c=merge(a,b);
while(c!=NULL)
{
printf("%.2f*X^%d",c->coef,c->exp);
c=c->next;
if(c!=NULL && c->coef>=0)
printf("+");
}
}
展开
 我来答
mafangsan
2014-05-04 · TA获得超过1.2万个赞
知道大有可为答主
回答量:1万
采纳率:71%
帮助的人:2552万
展开全部
#include<stdio.h>
#include<stdlib.h>
typedef struct node{ //定义一个结构体,用该结构体构建链表
float coef;              //节点数据
int exp;                  //节点数据
struct node *next; //指向下一个节点的指针
}Node;
 
//该函数用于创建链表,返回值是链表的头指针
Node *create(){   
     float a;
int b;
char c;
Node *p1,*p2;
Node *root;
scanf("%f*X^%d",&a,&b);
p1=p2=(Node *)malloc(sizeof(Node)); //为第一个节点申请内存
if(p1!=NULL){
p1->coef=a;
p1->exp=b;
p1->next=NULL;
}
root=p1;
while(1){
scanf("%c%f*X^%d",&c,&a,&b);
if(c=='-')
a=-a;
    if(b<0)
break;
p1=(Node *)malloc(sizeof(Node)); //申请内存
if(p1!=NULL){
p1->coef=a;
p1->exp=b;
p1->next=NULL;
}
p2->next=p1;  //把节点挂上链表
p2=p1;
}
return root;
}
 
本函数用于合并两个链表,
返回值是合并后的头指针。
Node *merge(Node *a,Node *b){
Node *p1,*p2,*p,*root;
p1=a;
p2=b;
if(p1->exp>p2->exp) //看哪个链表的头指针做整个的头指针
{
p=p2;
p2=p2->next;
}
else if(p1->exp<p2->exp)
{
p=p1;
p1=p1->next;
}
else
{
p=p1;
p->coef+=p2->coef;
p1=p1->next;
p2=p2->next;
}
root=p;
while(p1!=NULL&&p2!=NULL) //只要两个链表同时有元素,则比较大小并合并。
{
if(p1->exp>p2->exp)
{
p->next=p2;
p=p->next;
p2=p2->next;
}
else if(p1->exp<p2->exp)
{
p->next=p1;
p=p->next;
p1=p1->next;
}
else
{
p->next=p1;
p=p->next;
p->coef+=p2->coef;
p1=p1->next;
p2=p2->next;
}
}
while(p1!=NULL){ //如果第二个链表结束了,直接将另外一个链表全部挂后面
p->next=p1;
p1=p1->next;
}
while(p2!=NULL){//如果第一个链表结束了,直接将另外一个链表全部挂后面
p->next=p2;
p2=p2->next;
}
return root;
}
int main(){
Node *a, *b,*c;
a=create(); //创建一个链表
b=create(); //创建第二个链表
c=merge(a,b); //合并链表
while(c!=NULL) //遍历并输出链表
{
printf("%.2f*X^%d",c->coef,c->exp);
c=c->next;
if(c!=NULL && c->coef>=0)
printf("+");
}
}
追问
能解释一下return root是什么意思吗,我只知道return 0和1
追答
return root;是返回值是指针的意思,返回了链表的头指针。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式