#ifndef MULTINOMIAL_H_INCLUDED
#define MULTINOMIAL_H_INCLUDED
#include "List.h"
//代表每一项
typedef struct Nape{
//指数
int exponent ;
//系数
int factor ;
}Nape ;
/*把链表和多项式放一起原因:
避免头文件相互包含产生错误
*/
//链表的结构体
typedef struct Node{
Nape data ;
struct Node *next ;
}Node;
typedef struct List{
Node *head ;
int count ;
}List ;
//---------------------多项式操作---------------------------------
//创建存储多项式进入链表
void CreateMul(List *L , int n){
int i ;
for(i = 0 ; i < n ; i++){
Node * newNode = (Node*)malloc(sizeof(Node)) ;
if(!newNode){
exit(1) ;
}
//键入系数和指数
printf("请输入%d项系数:" , i + 1) ;
scanf("%d" , &newNode->data.factor) ;
printf("请输入%d项指数:" , i+1) ;
scanf("%d" , &newNode->data.exponent) ;
//如果系数为零就不用创建节点了
if(newNode->data.factor == 0){
continue ;
}
else{
//进行尾插将项存入节点
Node *p = L->head ;
while(p->next){
p = p->next ;
}
p->next = newNode ;
L->count++ ;
}
}
}
//两个多项式进行相加
void addition(List * a , List * b , List * c){
//c将a的头结点作为头节点
c->head = a->head ;
//la,lb代表当前节点,p指向
Node *la = a->head->next ;
Node *lb = b->head->next ;
Node *p = c->head ;
//当到了一个链表尾就结束循环
while(la && lb){
//如果相等就将系数相加
if(la->data.exponent == lb->data.exponent){
la->data.factor = la->data.factor + lb->data.factor ;
//如果相加系数为零就不将此节点插入c
if(la->data.factor == 0){
la = la->next ;
lb = lb->next ;
continue ;
}
p->next = la ;
la = la->next ;
lb = lb->next ;
}
//不等就将小的插入c表尾
else if(la->data.exponent < lb->data.exponent){
p->next = la ;
la = la->next ;
}
else if(la->data.exponent > lb->data.exponent){
p->next = lb ;
lb = lb->next ;
}
p = p->next ;
}
//将表中剩余直接插入c表尾
if(la){
p->next = la ;
}
if(lb){
p->next = lb ;
}
free(b->head) ;
}
//打印验证
void print(List * L){
Node * p = L->head->next ;
printf("P = ") ;
int i ;
while(p){
if(p->data.exponent == 0){
printf("%d " , p->data.factor) ;
}
else{
printf("%dx^%d " , p->data.factor , p->data.exponent) ;
}
if(p->next != NULL) {
printf("+ ") ;
}
p = p->next ;
}
}
//-------------------------------链表操作--------------------------
//不放两个头文件因为要避免头文件互相包含问题
//初始化
void init(List * L){
//分个头结点
L->head = (Node*)malloc(sizeof(Node)) ;
if(!L->head){
exit(1) ;
}
L->head->next = NULL ;
L->head->data.exponent = -1 ;
L->head->data.factor = -1 ;
L->count = 0 ;
}
#endif // MULTINOMIAL_H_INCLUDED
数据结构作业---一元多项式相加
最新推荐文章于 2023-10-20 16:35:17 发布