我是靠谱客的博主 端庄冰淇淋,最近开发中收集的这篇文章主要介绍多项式相加的链表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

题目:多项式用链表表示,写程序使对任给的两个多项式链表,形成多项式相加的链表,并返回指向该链表的指针。注意:不能有零系数项。

#include <stdio.h>
// 定义结构体类型list
struct list{
int power;
int coeff;
struct list *next;
};
typedef struct list node;
typedef node *poly;
/*打印出一个多项式的各项*/
void printPoly(poly head){
poly pointer;
pointer=head;
while(pointer!=NULL){
printf("[%d,%d]",pointer->coeff,pointer->power);
pointer-pointer->next;
}
printf("n");
}
/*从键盘输入一个多项式的项数和各项的幂和系数,多项式的系数不能为0*/
poly createPoly(poly head){
poly newNode;
poly pointer;
int n,i;
int coeff Temp,powerTemp;
head=(poly)malloc(sizeof(node));
if(head==NULL)
printf("Memory allocate failure!n");
else{
printf(“请输入要创建的多项式的项数:n");
scanf(%d",&n);
if(n==O) return NULL;
printf(“请按x降幂依次输入各项的系数和幂:n");
scanf("%d%d",&coeffTemp,&powerTemp);
head->coeff-coeffTemp;
head->power-powerTemp;
head->next=NULL;
pointer=head;
for(i=1;i<n;i++){
scanf("%d%d",&coeffTemp,&powerTemp);
newNode=(poly)malloc(sizeof(node));
newNode->coeff=coeffTemp;
newNode->power=powerTemp;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
}
}
printPoly(head);
return head;
}
/*释放一个链表的空间*/
void freeList(poly head){
poly pointer;
while(head!=NULL){
pointer=head;
head=head->next;
free(pointer);
}
}
/*计算两个多项式的和,并将结果存入另一个链表*/
poly addPoly(poly head1,poly head2){
poly pointer1,pointer2,pointer,newNode,head;
pointer1=head1;
pointer2=head2;
head-(poly)malloc(sizeof(node));
pointer=head;
while((pointer!=NULL)||(pointer2!=NULL)){
if(pointer1!=NULL&&pointer2!=NULL&&(pointer1->power>pointer2->power)){
newNode=(poly)malloc(sizeof(node));
newNode->power=pointer->power;
newNode->coeff=pointer1->coeff;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
pointer1=pointer1->next;
}
if(pointer1!=NULL&&pointer2!=NULL&&(pointer1->power<pointer2->power)){
newNode=(poly)malloc(sizeof(node));
newNode->power=pointer2->power;
newNode->coeff=pointer2->coeff;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
pointer2=pointer2->next;
}
if(pointer1!=NULL && pointer2!=NULL&&(pointer1->power==pointer2->power)){
newNode=(poly)malloc(sizeof(node));
newNode->power=pointer1->power;
newNode->coeff=pointer1->coeff+pointer2->coeff;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
pointer1=pointer1->next;
pointer2=pointer2->next;
}
if(pointer1==NULL && pointer2!=NULL){
newNode=(poly)malloc(sizeof(node));
newNode->power=pointer2->power;
newNode->coeff=pointer2->coeff;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
pointer2=pointer2->next;
}
if(pointer1!=NULL&&pointer2==NULL){
newNode=(poly)malloc(sizeof(node));
newNode->power=pointer1->power;
newNode->coeff=pointer1->coeff;
newNode->next=NULL;
pointer->next=newNode;
pointer=newNode;
pointer1=pointer1->next;
}
}
pointer=head;
head=head->next;
free(pointer);
return head;
}
}
main(){
poly p.q,r;
p=createPoly(p);
q=createPoly(q);
r=addPoly(p,q);
printPoly(r);
freeList(p);
freeList(q);
freeList(r);
}

最后

以上就是端庄冰淇淋为你收集整理的多项式相加的链表的全部内容,希望文章能够帮你解决多项式相加的链表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部