【C语言】多项式相加、寻找项、删除项、添加项。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct node{
int coe;
int power;
struct node *next;
} Node;
Node* tail = NULL;
void freeList( Node* head );
Node *Link(Node *head,int coe,int power);
void printList(Node* head);
void findPower(int targetPower,Node *head);
Node *deleteNode(int targetPower,Node *head);
Node *addNode(int addPower,int addCoe,Node* head);
int main()
{
int coe,power;
Node* head1 = NULL;
Node* head2 = NULL;
do{
scanf("%d",&power);
scanf("%d",&coe);
if( coe == 0 && power == 0 )
{
head1 = Link( head1 , 0 , 0 );
}
if( coe != 0 )
{
head1 = Link( head1 , coe , power );
}
}while( power != 0 );
tail = NULL;
do{
scanf("%d",&power);
scanf("%d",&coe);
if( coe == 0 && power == 0 )
{
head2 = Link( head2 , 0 , 0 );
}
if( coe != 0 )
{
head2 = Link( head2 , coe , power );
}
}while( power != 0 );
tail = NULL;
printList( head1 );
printList( head2 );
freeList( head1 );
freeList( head2 );
return 0;
}
void freeList( Node* head )
{
Node* p1 = head;
Node* p2 = NULL;
free( p1 );
p1 = NULL;
if( !p2 ) freeList(p2);
}
Node *Link(Node *head,int coe,int power)
{
Node* p = (Node*)malloc(sizeof(node));
p->coe = coe;
p->power = power;
p->next = NULL;
if( head == NULL )
{
head = p;
tail = head;
}
else
{
tail->next = p;
tail = tail->next;
}
return head;
}
void printList(Node* head)
{
for( Node* r = head ; r ; r = r->next )
{
printf("%dx%d",r->coe,r->power);
if( !r->next ) printf("\n");
else printf("+");
}
}
void findPower(int targetPower,Node *head)
{
bool result = false;
for(Node *r = head ; r ; r = r->next)
{
if( r->power == targetPower )
{
result = true;
break;
}
}
if(result) printf("找到了\n");
else printf("没找到\n");
}
Node* deleteNode( int targetPower,Node *head )
{
Node *r2 = NULL;
for( Node *r = head ; r ; r2 = r , r = r->next )
{
if( r->power == targetPower )
{
if( r2 ) r2->next = r->next;
else head = head->next;
break;
}
}
return head;
}
Node* addNode(int addPower,int addCoe,Node* head)
{
Node* newnode = (Node*)malloc(sizeof(Node));
newnode->power = addPower;
newnode->coe = addCoe;
newnode->next = NULL;
Node *r2 = NULL;
for(Node *r = head ; r ; r2 = r , r = r->next)
{
if( r->power < newnode->power )
{
if( r2 )
{
r2->next = newnode;
newnode->next = r;
}
else
{
head = newnode;
newnode->next = r;
}
break;
}
else if( r->power == newnode->power )
{
r->coe = r->coe + newnode->coe;
free(newnode);
break;
}
}
return head;
}