《数据结构与算法分析 C语言描述》表,栈与队列部分课后习题
//Code by Pnig0s1992 //Date:2012,3,22 #include <stdio.h> #include "Header.h" void MultPolynomial(LinkList Py1,LinkList Py2,LinkList LinkRc); void PrintfPolynomial(LinkList LinkRs); int main(int argc,char **argv) { LinkNode Ploy1; Ploy1.pNext = NULL; Insert(0,6,&Ploy1); Insert(1,5,&Ploy1); Insert(2,4,&Ploy1); Insert(3,3,&Ploy1); LinkNode Ploy2; Ploy2.pNext = NULL; Insert(0,10,&Ploy2); Insert(1,9,&Ploy2); Insert(2,8,&Ploy2); Insert(3,7,&Ploy2); LinkNode LinkResult; LinkResult.pNext = NULL; MultPolynomial(&Ploy1,&Ploy2,&LinkResult); printf("\nPoly1:"); PrintfPolynomial(&Ploy1); printf("\nPloy2:"); PrintfPolynomial(&Ploy2); printf("\nThe Multi result:"); PrintfPolynomial(&LinkResult); system("pause"); return 0; } //打印多项式乘法结果 void PrintfPolynomial(LinkList LinkRs) { LinkList LinkTemp = LinkRs->pNext; while(LinkTemp != NULL) { printf("+%dX^%d",LinkTemp->Coefficient,LinkTemp->Exponent); LinkTemp = LinkTemp->pNext; } } void MultPolynomial(LinkList Py1,LinkList Py2,LinkList LinkRc) { int iTempExp = 0; int iTempCoe = 0; LinkList LinkPy1 = Py1->pNext; LinkList LinkPy2 = Py2->pNext; while(LinkPy2 != NULL) { LinkPy1 = Py1->pNext;//每次循环回置头结点 while(LinkPy1 != NULL) { iTempExp = LinkPy1->Exponent+LinkPy2->Exponent; iTempCoe = LinkPy1->Coefficient*LinkPy2->Coefficient; if(isEmpty(LinkRc)) { Insert(iTempExp,iTempCoe,LinkRc); }else { LinkList LinkResult = LinkRc->pNext; while(LinkResult != NULL) { if(LinkResult->Exponent == iTempExp) { LinkResult->Coefficient += iTempCoe; break; }else if((LinkResult->Exponent < iTempExp && LinkResult->pNext->Exponent > iTempExp) || isLast(LinkResult)) { Insert(iTempExp,iTempCoe,LinkResult); break; } LinkResult = LinkResult->pNext; } } LinkPy1 = LinkPy1->pNext; } LinkPy2 = LinkPy2->pNext; } }
[/img]..