数据结构学习(C++)之稀疏矩阵
作者 佚名技术
来源 程序设计
浏览
发布时间 2012-06-30
data.downrow; } } Matrix & Add(Matrix &matB) { //初始化赋值辅助变量 if (row != matB.row || col != matB.col || matB.num == 0) return *this; Node<MatNode> *pA, *pB; Node<MatNode> **pAT = new Node<MatNode>*[col + 1]; Node<MatNode> **pBT = new Node<MatNode>*[matB.col + 1]; List<MatNode> *qA = pGetFirst()->data.downrow, *qB = matB.pGetFirst()->data.downrow; First(); matB.First(); for (int j = 1; j <= col; j++) { pAT[j] = pNext(); pBT[j] = matB.pNext(); } //开始 for (int i = 1; i <= row; i++) { qA->First(); qB->First(); pA = qA->pNext(); pB = qB->pNext(); while (pA != NULL && pB !=NULL) { if (pA->data.col == pB->data.col) { pA->data.data += pB->data.data; pBT[pB->data.col]->data.down = pB->data.down; qB->Remove(); if (!pA->data.data) { pAT[pA->data.col]->data.down = pA->data.down; qA->Remove(); } else { pAT[pA->data.col] = pA; qA->pNext(); } } else { if (pA->data.col > pB->data.col) { pBT[pB->data.col]->data.down = pB->data.down; qB->pRemove(); pB->data.down = pAT[pB->data.col]->data.down; pAT[pB->data.col]->data.down = pB; pAT[pB->data.col] = pB; qA->InsertBefore(pB); } else if (pA->data.col < pB->data.col) { pAT[pA->data.col] = pA; qA->pNext(); } } pA = qA->pGet();pB = qB->pGet(); } if (pA == NULL && pB != NULL) { qA->pGetPrior()->link = pB; qB->pGetPrior()->link = NULL; while (pB != NULL) { pBT[pB->data.col]->data.down = pB->data.down; pB->data.down = pAT[pB->data.col]->data.down; pAT[pB->data.col]->data.down = pB; pAT[pB->data.col] = pB; pB = pB->link; } } if (pA !=NULL) { while (qA->pGet() != NULL) { pAT[pA->data.col] = pA; qA->pNext(); } } qA = qA->first->data.downrow; qB = qB->first->data.downrow; } delete []pAT; delete []pBT; return *this; } private: int row, col, num; }; #endif 【说明】对于十字链表来说,只要记住对每个节点的操作,要同时考虑它的两个指针域,那么,各种算法的理解都不是很难。比如说矩阵加法,“两个矩阵相加和两个一元多项式相加极为相似,所不同的是一元多项式只有一个变元(指数项),而矩阵中每个非零元有两个变元(行值和列值),每个节点既在行表中又在列表中,致使插入和删除节点时指针的修改稍为复杂,故需要更多的辅助指针。”(《数据结构(C语言版)》)其实private的row等可以放在首行的头节点里的,但为了清晰一点(本来就够乱了),我把他们单立出来了。另外,很多地方考虑不是很周全,要是不按照注明的要求使用,很容易就会出错。 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 用C++品尝Vista美味:界面的毛玻璃效果下一篇: C++启蒙之C++中的类
关于数据结构学习(C++)之稀疏矩阵的所有评论