用節點node表示多項式的係數和次數,編程合併兩個鏈式表達的多項式。
思路:先初始化兩個單鏈表,然後將單鏈表的係數相加,如果一個單鏈表結束,將next節點直接指向不空的單鏈表,最後輸出結果。
// multinomial.cpp : 定義控制檯應用程序的入口點。
//
#include "stdafx.h"
#include <malloc.h>
#include <Windows.h>
typedef struct Node
{
int iXishu;
int iCishu;
struct Node *next;
}muti,*pmuti;
pmuti injoin(pmuti phead1,pmuti phead2)
{
pmuti phead3 = (Node*)malloc(sizeof(Node));
pmuti p1 = (Node*)malloc(sizeof(Node));
pmuti p2 = (Node*)malloc(sizeof(Node));
pmuti prear = (Node*)malloc(sizeof(Node));
p1 = phead1->next;
p2 = phead2->next;
phead3 = prear ;
while(true)
{
if(p1 == NULL || p2 == NULL)
{
break;
}
pmuti pNow = (Node*)malloc(sizeof(Node));
pNow->iXishu = p1->iXishu + p2->iXishu;
pNow->iCishu = p1->iCishu;
p1 = p1->next;
p2 = p2->next;
prear->next =pNow;
prear = pNow;
}
prear->next = NULL;
if (p1 != NULL)
{
prear->next = p1;
}
else if (p2 != NULL)
{
prear->next = p2;
}
return phead3;
}
int _tmain(int argc, _TCHAR* argv[])
{
muti *phead1=(Node*)malloc(sizeof(Node));
muti *phead2=(Node*)malloc(sizeof(Node));
muti *prear=(Node*)malloc(sizeof(Node));
muti *pNew=(Node*)malloc(sizeof(Node));
int i = 0,j=0,iMax;
prear = phead1 ;
printf("第一個鏈表,輸入最大次數\n");
scanf("%d",&iMax);
for(i;i<iMax+1;i++)
{
printf("x^%d項前的係數",i);
scanf("%d",&j);
pNew=(Node*)malloc(sizeof(Node));
pNew->iXishu = j;
pNew->iCishu = i;
pNew->next = NULL;
prear->next = pNew;
prear = pNew;
}
prear = phead2 ;
printf("第二個鏈表,輸入最大次數\n");
scanf("%d",&iMax);
i = 0;
for(i;i<iMax+1;i++)
{
printf("x^%d項前的係數",i);
scanf("%d",&j);
pNew=(Node*)malloc(sizeof(Node));
pNew->iXishu = j;
pNew->iCishu = i;
pNew->next = NULL;
prear->next = pNew;
prear = pNew;
}
pmuti phead3 = injoin(phead1,phead2);
pmuti prear3 = (Node*)malloc(sizeof(Node));
i=0;
prear3 = phead3->next;
while(prear3 != NULL)
{
//prear3 = phead3->next;
printf("合併後的x^%d項前的係數%d\n",i,prear3->iXishu);
prear3 = prear3->next;
i++;
}
system("pause");
return 0;
}