
無償 連結清單的應用:一進制多項式相加(C語言)
#include
#include
typedef struct node
{ float coef;
int expn;
struct node *next;
} PolyNode;
void InitList(PolyNode *&L)
{
L=(PolyNode *)malloc(sizeof(PolyNode));
L->next=NULL;
}
int GetLength(PolyNode *L)
{
int i=0;
PolyNode *p=L->next;
while (p!=NULL)
{
i++;p=p->next;
}
return i;
}
PolyNode *GetElem(PolyNode *L,int i)
{
int j=1;
PolyNode *p=L->next;
if (i<1 || i>GetLength(L))
return NULL;
while (j
{
p=p->next;j++;
}
return p;
}
PolyNode *Locate(PolyNode *L,float c,int e)
{
PolyNode *p=L->next;
while (p!=NULL && (p->coef!=c ||p->expn!=e))
p=p->next;
return p;
}
int InsElem(PolyNode *&L,float c,int e,int i)
{
int j=1;
PolyNode *p=L,*s;
s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=c;s->expn=e;s->next=NULL;
if (i<1 || i>GetLength(L)+1)
return 0;
while (j
{
p=p->next;j++;
}
s->next=p->next;
p->next=s;
return 1;
}
int DelElem(PolyNode *L,int i)
{
int j=1;
PolyNode *p=L,*q;
if (i<1 || i>GetLength(L))
return 0;
while (j
{
p=p->next;j++;
}
q=p->next;
p->next=q->next;
free(q);
return 1;
}
void DispList(PolyNode *L)
{
PolyNode *p=L->next;
while (p!=NULL)
{
printf("(%g,%d) ",p->coef,p->expn);
p=p->next;
}
printf("\n");
}
void CreaPolyList(PolyNode *&L,float C[],int E[],int n)
{
int i;
InitList(L);
for (i=0;i
InsElem(L,C[i],E[i],i+1);
}
void SortPloy(PolyNode *&L)
{
PolyNode *p=L->next,*q,*pre;
L->next=NULL;
while (p!=NULL)
{
if (L->next==NULL)
{
L->next=p;p=p->next;
L->next->next=NULL;
}
else
{
pre=L;q=pre->next;
while (q!=NULL && p->expn>q->expn)
{
pre=q;q=q->next;
}
q=p->next;
p->next=pre->next;
pre->next=p;
p=q;
}
}
}
PolyNode *AddPoly(PolyNode *pa,PolyNode *pb)
{
PolyNode *pc,*p1=pa->next,*p2=pb->next,*p,*tc,*s;
pc=(PolyNode *)malloc(sizeof(PolyNode));
pc->next=NULL;
tc=pc;
while (p1!=NULL && p2!=NULL)
{
if (p1->expnexpn)
{
s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=p1->coef;s->expn=p1->expn;s->next=NULL;
tc->next=s;tc=s;
p1=p1->next;
}
else if (p1->expn>p2->expn)
{
s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=p2->coef;s->expn=p2->expn;s->next=NULL;
tc->next=s;tc=s;
p2=p2->next;
}
else
{
if (p1->coef+p2->coef!=0)
{
s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=p1->coef+p2->coef;s->expn=p1->expn;
s->next=NULL;
tc->next=s;tc=s;
}
p1=p1->next;p2=p2->next;
}
}
if (p1!=NULL) p=p1;
else p=p2;
while (p!=NULL)
{
s=(PolyNode *)malloc(sizeof(PolyNode));
s->coef=p->coef;s->expn=p->expn;s->next=NULL;
tc->next=s;tc=s;
p=p->next;
}
tc->next=NULL;
return pc;
}
void main()
{
PolyNode *L1,*L2,*L3;
float C1[]={3,7,5,9},C2[]={-9,8,22};
int E1[]={1,0,17,8},E2[]={8,1,7};
InitList(L1);
InitList(L2);
InitList(L3);
CreaPolyList(L1,C1,E1,4);
CreaPolyList(L2,C2,E2,3);
printf("兩多項式相加運算\n");
printf(" 原多項式A:");DispList(L1);
printf(" 原多項式B:");DispList(L2);
SortPloy(L1);
SortPloy(L2);
printf("排序後的多項式A:");DispList(L1);
printf("排序後的多項式B:");DispList(L2);
L3=AddPoly(L1,L2);
printf("多項式相加結果:");DispList(L3);
}
搜尋更多相關主題的文章:
連結清單 多項式 C語言 相加 應用