链表:多项式相乘

来源:互联网 发布:企业出口海关数据 编辑:程序博客网 时间:2024/05/21 05:19
// PolyList.cpp : Defines the entry point for the console application.//#include "stdio.h"struct Item{Item(int num,int power){this->num=num;this->power=power;pNext=NULL;}Item(Item* pItem){this->num=pItem->num;this->power=pItem->power;pNext=NULL;}int num;int power;Item* pNext;};void printAllItems(Item* pItems){while(pItems!=NULL){printf("(%d,%d),",pItems->num,pItems->power);pItems=pItems->pNext;}printf("\n");}Item*  MultItems(Item* pA,Item* pB);Item*  AddItems(Item* pA,Item* pB){Item* pC=NULL;if(pA->power<pB->power){pC=pA;pA=pA->pNext;}else if(pA->power==pB->power){pC=pA;pC->num+=pB->num;pA=pA->pNext;pB=pB->pNext;}else if(pA->power>pB->power){pC=pB;pB=pB->pNext;}Item* pC0=pC;//to return;while(pA!=NULL && pB!=NULL){if(pA->power<pB->power){pC->pNext=pA;pA=pA->pNext;}else if(pA->power==pB->power){pC->pNext=pA;pA->num+=pB->num;pA=pA->pNext;pB=pB->pNext;}else if(pA->power>pB->power){pC->pNext=pB;pB=pB->pNext;}pC=pC->pNext;}//while(pA && pB)if(pA){pC->pNext=pA;}else{pC->pNext=pB;}//if(pA)return pC0;}Item*  RemoveItem(Item* pPrevItem){Item* pToRemove=pPrevItem->pNext;pPrevItem->pNext=pToRemove->pNext;return pToRemove;}Item*  RemoveZeroItems(Item* pItem){Item* pItem0=NULL;//to return;while(pItem->num==0 && pItem){pItem=pItem->pNext;}//while(pItem->num==0 && pItem)if(pItem){pItem0=pItem;}else{return NULL;}//if(pItem)while(pItem->pNext){if(pItem->pNext->num==0)RemoveItem(pItem);elsepItem=pItem->pNext;}//while(pItem->pNext)return pItem0;}int main(int argc, char* argv[]){Item  LA0(7,0),LA1(3,1),LA8(9,8),LA17(5,17); Item  *pA=&LA0;LA0.pNext=&LA1;LA1.pNext=&LA8;LA8.pNext=&LA17;printAllItems(pA);Item  LB1(8,1),LB7(22,7),LB8(-9,8); Item  *pB=&LB1;LB1.pNext=&LB7;LB7.pNext=&LB8;printAllItems(pB);/*printf("AddItems(pA,pB)===============\n");printAllItems(pA);printAllItems(pB);Item* pAdd=AddItems(pA,pB);printAllItems(pAdd);printf("pAddRemoveZero==================\n");Item*  pAddRemoveZero=RemoveZeroItems(pAdd);printAllItems(pAddRemoveZero);*/printf("MultItems(pA,pB)===============\n");printAllItems(pA);printAllItems(pB);Item* pMult=MultItems(pA,pB);printAllItems(pMult);printf("pMultRemoveZero==================\n");Item*  pMultRemoveZero=RemoveZeroItems(pMult);printAllItems(pMultRemoveZero);printf("Hello World!\n");return 0;}Item*  InsertOneItem(Item* pPrev,Item* pOne){pOne->pNext=pPrev->pNext;pPrev->pNext=pOne;return pOne;}Item*  CopyItems(Item* pSrc){//有待完善内存处理的问题(要是用Java、C#就不用操心了)Item*  pNewItems=new Item(pSrc);Item*  pResult=pNewItems;pSrc=pSrc->pNext;while(pSrc){pNewItems=InsertOneItem(pNewItems,new Item(pSrc));    pSrc=pSrc->pNext;}return pResult;}Item*  MultOneItem(Item* pA,Item* pOne){Item* pResult=NULL;Item* pAcopy=NULL;pAcopy=CopyItems(pA);pResult=pAcopy;//to returnwhile(pAcopy){pAcopy->num*=pOne->num;pAcopy->power+=pOne->power;pAcopy=pAcopy->pNext;}return pResult;}Item*  MultItems(Item* pA,Item* pB)//Item*  AddItems(Item* pA,Item* pB){//Item* pResult=NULL;//to returnItem* pA0=pA;Item* tmpMult=NULL;Item* Sum=MultOneItem(pA,pB);//to return//pResult=Sum;pB=pB->pNext;while(pB){tmpMult=MultOneItem(pA,pB);Sum=AddItems(Sum,tmpMult);pB=pB->pNext;}return Sum;}/*(7,0),(3,1),(9,8),(5,17),(8,1),(22,7),(-9,8),MultItems(pA,pB)===============(7,0),(3,1),(9,8),(5,17),(8,1),(22,7),(-9,8),(56,1),(24,2),(154,7),(3,8),(45,9),(198,15),(-81,16),(40,18),(110,24),(-45,25),pMultRemoveZero==================(56,1),(24,2),(154,7),(3,8),(45,9),(198,15),(-81,16),(40,18),(110,24),(-45,25),Hello World!Press any key to continue*/

原创粉丝点击