頭檔案
struct Node;
struct PN;
typedef struct Node Node;
typedef struct PN ElemType;
typedef struct Node* Polynomial;
typedef struct Node *List;//List L == Node *p;
typedef Node* Position;
int Is( ElemType a, ElemType b );
int IsEmpty( List L );
int IsLast( Position p, List L );
Position Find( ElemType X, List L );
void Delete( ElemType X, List L);
void Insert( ElemType X, List L, Position P );
List InitList();
ElemType InitPN();
Polynomial CreatePolynomial( int n );
Polynomial AddPolynomial( Polynomial Pa, Polynomial Pb);
void PrintPN( Polynomial PN );
程式:
#include <stdio.h>
#include "List.h"
int main()
{
Polynomial Pa,Pb,Pc;
Pa = CreatePolynomial( 5 );
Pb = CreatePolynomial( 6 );
Pc = AddPolynomial( Pa, Pb );
PrintPN( Pc );
return 0;
}
struct PN
{
double coef;
int expn;
};
struct Node
{
ElemType data;
struct LNode *next;
};
int IsEmpty( List L )//測驗鏈表L是否為空表
{
return L -> next == NULL;
}
int IsLast( Position p, List L )//此元素是否為表中最后一個元素
{
return p -> next == NULL;
}
Position Find( ElemType X, List L )
{
Position P;
for( P = L; P; P = P -> next)
{
if(Is( P -> data, X))
{
printf("Find it!");
break;
}
}
if( P = NULL ) printf("Can't Find!");
return P;
}
int Is( ElemType a, ElemType b )
{
int bool = 0;
if( a.coef == b.coef && a.expn == b.expn )
bool = 1;
else bool = 0;
return bool;
}
void Delete( ElemType X, List L)
{
Position P, TmpCell;
P = Find( X, L );
if( P != NULL )
{
TmpCell = P;
P = P -> next;
free(TmpCell);
}
}
void Insert( ElemType X, List L, Position P )
{
Position TmpCell;
TmpCell = malloc( sizeof( struct Node ) );
if( TmpCell == NULL )
{
printf( "Out of Space" );
}
TmpCell -> next = P -> next;
P -> next = TmpCell;
}//要保證TmpCell非NULL
List InitList()
{
List L;
L = malloc( sizeof( struct Node ) );
L -> data = InitPN();
L -> next = NULL;
}
ElemType InitPN()
{
ElemType PN;
PN.coef = 0;
PN.expn = 0;
return PN;
}
struct PN CreatPN()
{
ElemType PN;
scanf( "請輸入系數、項數:%lf %d", &PN.coef, &PN.expn);
return PN;
}
Polynomial CreatePolynomial( int n )
{
List L = InitList();
Position P = L;
for( int i = 1; i <= n; i++)
{
Position s = malloc( sizeof( struct Node ) );
scanf( "請輸入系數、項數:%lf %d", &s -> data.coef, &s -> data.expn);
Position pre = P, q = P -> next;
while( q && q -> data.expn < s -> data.expn)
{
pre = q;
q = q -> next;
}
s -> next = q;
pre -> next = s;
}
return L;
}
Polynomial AddPolynomial( Polynomial Pa, Polynomial Pb)
{
Position p1 = Pa -> next, p2 = Pb -> next;
Position p3 = Pa;
while( p1 && p2 )
{
if( p1 -> data.expn == p2 -> data.expn)
{
double sum = p1 -> data.coef + p2 -> data.expn;
if( sum != 0 )
{
p1 -> data.coef = sum;
p3 -> next = p1;
p3 = p1;
Position r = p2;
p2 = p2 -> next;
free( r );
}
else
{
Position r1 = p1, r2 = p2;
p1 = p1 -> next;
p2 = p2 -> next;
free( r1 );
free( r2 );
}
}
else if( p1 -> data.expn < p2 -> data.expn )
{
p3 -> next = p1;
p3 = p1;
p1 = p1 -> next;
}
else
{
p3 -> next = p2;
p3 = p2;
p2 = p2 ->next;
}
}
if( p1 == NULL )
{
p3 -> next = p2;
}
else
{
p3 -> next = p1;
}
free( Pb );
return( Pa );
}
void PrintPN( Polynomial PN )
{
int cnt = 1;
for( Position p; p; p = p -> next )
{
printf("%fX^%d + ", PN -> data.coef, PN -> data.expn );
if( cnt % 5 == 0)
{
printf( "\n" );
}
cnt++;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179346.html
標籤:C語言
