数据结构C语言描述——用单链表实现多项式的相加
#include <stdio.h> #include <stdlib.h> typedef DataType; typedef struct Node2{ DataType xishu; DataType zhisu; struct Node2 *Next; }Node2; typedef struct Node2* PNode2; //多项式按照指数大小排序 void insertNewPoint_link(PNode2 head,PNode2 qNode){ PNode2 p=head; while (p->Next!=NULL) { if (p->Next->zhisu>qNode->zhisu) { qNode->Next=p->Next; p->Next=qNode; break; } p=p->Next; } if (p->Next==NULL) { p->Next=qNode; } } //打印多项式 void printLinkeLink(PNode2 head){ PNode2 temp=head->Next; while (temp!=NULL) { printf("%d %d",temp->xishu,temp->zhisu); printf("\n"); temp=temp->Next; } } //多项式的加法计算 void add_poly(Node2 *pa,Node2 *pb){ Node2 *p=pa->Next; Node2 *q=pb->Next; Node2 *pre=pa; Node2 *u; while (p!=NULL&&q!=NULL) { if (p->zhisu<q->zhisu) { pre=p;p=p->Next; } else if(p->zhisu==q->zhisu) { float x=p->xishu+q->xishu; if (x!=0) { p->xishu=x; pre=p; } else { pre->Next=p->Next;//指向下一个结点 free(p); } p=pre->Next; u=q; q=q->Next; free(u); } else{ u=q->Next; q->Next=p; pre->Next=q; pre=q; q=u; } } if (q) { pre->Next=q; } free(pb); } void main( ){ int zhishu; float xishu; PNode2 head1=(PNode2)malloc(sizeof(struct Node2)); PNode2 head2=(PNode2)malloc(sizeof(struct Node2)); PNode2 tem=NULL; head1->Next=NULL; head2->Next=NULL; printf("输入链表一的系数和指数,如:3,2 以0,0结束输入:\n"); scanf("%f,%d",&xishu,&zhishu); while (xishu!=0||zhishu!=0) { tem=(PNode2)malloc(sizeof(struct Node2)); tem->xishu=xishu; tem->zhisu=zhishu; tem->Next=NULL; insertNewPoint_link(head1,tem); scanf("%f,%d",&xishu,&zhishu); } printf("链表一按指数升序排序后的多项式为:\n"); printLinkeLink(head1); printf("\n"); printf("输入链表一的系数和指数,如:3,2 以0,0结束输入:\n"); scanf("%f,%d",&xishu,&zhishu); while (xishu!=0||zhishu!=0) { tem=(PNode2)malloc(sizeof(struct Node2)); tem->xishu=xishu; tem->zhisu=zhishu; tem->Next=NULL; insertNewPoint_link(head2,tem); scanf("%f,%d",&xishu,&zhishu); } printf("链表二按指数升序排序后的多项式为:\n"); printLinkeLink(head2); printf("\n"); add_poly(head1,head2); printf("多项式相加后的结果为:\n"); printLinkeLink(head1); }
you know nothing