1、 bool Insert(int k); bool Search(int k); void print();private: int d; ChainHashTableNode *ht;ChainHashTableNode.cpp#include ChainHashTable.h#includeChainHashTable:ChainHashTable(int divisor) d = divisor; ht = new ChainHashTableNoded;bool ChainHashTable:Insert(int k) int j = k%d; if (htj.Insert(k) re
2、turn true; else return false;void ChainHashTable:print() for (int i = 0; i d; i+) hti.print();Node.hclass ChainHashTableNode ChainHashTableNode(); Node *first;#include value = k) return true; current = current-link; if (current) if (current- return true; return false; if (Search(k) cout 已经存在此元素 valu
3、e = k; if (first = 0) first = p; else p-link = first;void ChainHashTableNode: if (first) while (first) cout value first = current; -1 HashTable.hclass HashTable HashTable(int divisor); HashTable(); int Search(int k);/搜索算法 bool Insert(int e); int hSearch(int k);/除数 int *ht;/桶,大小取决于d就是除数是多少 bool *empt
4、y;/一维数组,用来存储第I个桶是否存入了元素HashTable.cppHashTable.hHashTable:HashTable(int divisor) ht = new intd; empty = new boold; emptyi = true; hti = 0;HashTable() deleteht; deleteempty;int HashTable:hSearch(int k)/搜索值为K的元素 int i = k%d; int j = i; do if (htj = k | emptyj) return j; j = (j + 1) % d; while (j != i);
5、 return j;Search(int k)/搜索值为K的元素 int b = hSearch(k); if (htb = k) return b; return -1;bool HashTable:Insert(int e) int b = hSearch(e); if (emptyb) htb = e; emptyb = false; else if (htb = e) else表已经满了void HashTable: 961; i+) hti cout return;LowerTriangularMatrix.hclass LowerTriangularMatrix LowerTria
6、ngularMatrix(int size); void Store(int x, int i, int j);/向矩阵里存储一个元素 int Retrieve(int i, int j);/返回矩阵中的一个元素 int n;/矩阵维数 int sum;/矩阵非零元素个数 int *t;/用数组来存储矩阵LowerTriangularMatrix.cppLowerTriangularMatrix.hLowerTriangularMatrix:LowerTriangularMatrix(int size) n = size; sum = n*(n + 1) / 2; t = new intsum
7、;void LowerTriangularMatrix:Store(int x, int i, int j) if (i0 | j= n | j = n)下三角矩阵行列输入错误 j return; else if (x = 0)下三角所添加的元素必须非零 else if (i= (n - 1)三对角矩阵行列输入错误 return -1; else if (i = j) return tsum - (n - j)*(n - j + 1) / 2) + (i - j); return 0; sum; ti Node.hclass Node friend class ChainHashTableNo
8、de; int value; Node *link;Node.cppSparseMatrix.hTerm.hclass SparseMatrix SparseMatrix(int row, int col); void transpose(); void Add(SparseMatrix &b);/两个稀疏矩阵相加 int row, col;/数组维数/元素个数 int maxsum;/最多的元素个数 Term *t;/存储的数组SparseMatrix.cppSparseMatrix.hSparseMatrix:SparseMatrix(int r, int c) row = r; col
9、= c; sum = 0; maxsum = r*c; t = new Termmaxsum;void SparseMatrix:transpose() Term *cur = new Termmaxsum; int *ColSize = new intcol; int *RowNext = new introw; col; i+) ColSizei = 0; row; i+) RowNexti = 0; i+) ColSizeti.col+;/表示每一列的非零元素个数 RowNext0 = 0; for (int i = 1; i+) RowNexti = RowNexti - 1 + Co
10、lSizei - 1;/表示新矩阵中每一行的矩阵的前面的矩阵的个数 /进入转置操作 int j = RowNextti.col+; curj.value = ti.value; curj.col = ti.row; curj.row = ti.col; delete t; t = cur; tsum.value = x; tsum.row = i; tsum.col = j; sum+; ti.value Add(SparseMatrix &b)/两个稀疏矩阵相加 if (col != b.col | row != b.row)两个矩阵行列不同无法相加 int sa = 0; int sb =
11、 0; int k = 0; while (sa sum | sb b.sum) if (tsa.col = b.tsb.col&tsa.row = b.tsb.row) curk.col = tsa.col; curk.row = tsa.row; curk.value = tsa.value + b.tsb.value; k+; sa+; sb+; else if (tsa.row curk.value = b.tsb.value; curk.row = b.tsb.row; curk.col = b.tsb.col; else if (tsa.col 1)三对角矩阵添加元素位置错误 sw
12、itch (i - j) case -1: t3 * j - 1 = x; break; case 0: t3 * j = x; case 1: t3 * j + 1 = x;int TridiagonalMatrix: else if (abs(i - j) cstdlibint wei, num100100;void c() wei; for (int j = 0; j+) cin numij;int main() int k = 0, l = 0; /*三对角矩阵实验开始 测试数据4103n-2 4 1 2 0 0 3 4 5 0 0 7 8 9 0 0 8 7 */请输入三对焦矩阵维数及容: cin c(); TridiagonalMatrix *TM = new TridiagonalMatrix(wei); if (numji != 0) TM-Store(numji, j, i); TM-print();请输入要查询的元素的位置 k l; l = TM-Retrieve(k, l);查询结果: l * /*下三角矩阵实验开始 测试数据410n*(n+1)/2 1 0 0 0 2 3 0 0 4 5 6 0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1