//转置
CompressedMatrixPtr transposeCompressedMatrix(CompressedMatrixPtr paraPtr){//Step 1. Allocate space.int i, tempColumn, tempPosition;int*tempColumnCounts =(int*)malloc(paraPtr->columns *sizeof(int));int*tempOffsets =(int*)malloc(paraPtr->columns *sizeof(int));for(i =0; i < paraPtr->columns; i ++){
tempColumnCounts[i]=0;}//Of for i
CompressedMatrixPtr resultPtr =(CompressedMatrixPtr)malloc(sizeof(structCompressedMatrix));
resultPtr->rows = paraPtr->columns;
resultPtr->columns = paraPtr->rows;
resultPtr->numElements = paraPtr->numElements;
resultPtr->elements =(TriplePtr)malloc(paraPtr->numElements *sizeof(structTriple));//Step 2. One scan to calculate offsets.for(i =0; i < paraPtr->numElements; i ++){
tempColumnCounts[paraPtr->elements[i].j]++;}//Of for i
tempOffsets[0]=0;for(i =1; i < paraPtr->columns; i ++){
tempOffsets[i]= tempOffsets[i -1]+ tempColumnCounts[i -1];printf("tempOffsets[%d] = %d \r\n", i, tempOffsets[i]);}//Of for i//Step 3. Another scan to fill data.for(i =0; i < paraPtr->numElements; i ++){
tempColumn = paraPtr->elements[i].j;
tempPosition = tempOffsets[tempColumn];
resultPtr->elements[tempPosition].i = paraPtr->elements[i].j;
resultPtr->elements[tempPosition].j = paraPtr->elements[i].i;
resultPtr->elements[tempPosition].e = paraPtr->elements[i].e;
tempOffsets[tempColumn]++;}//Of for ireturn resultPtr;}//Of transposeCompressedMatrix
4、打印
//打印 voidprintCompressedMatrix(CompressedMatrixPtr paraPtr){int i;for(i =0; i < paraPtr->numElements; i ++){printf("(%d, %d): %d\r\n", paraPtr->elements[i].i, paraPtr->elements[i].j, paraPtr->elements[i].e);}//Of for i}// Of printCompressedMatrix
5、样例测试
//测试 voidcompressedMatrixTest(){
CompressedMatrixPtr tempPtr1, tempPtr2;int i, j, tempElements;//Construct the first sample matrix.
tempElements =4;int** tempMatrix1 =(int**)malloc(tempElements *sizeof(int*));for(i =0; i < tempElements; i ++){
tempMatrix1[i]=(int*)malloc(3*sizeof(int));}//Of for iint tempMatrix2[4][3]={{0,0,2},{0,2,3},{2,0,5},{2,1,6}};for(i =0; i < tempElements; i ++){for(j =0; j <3; j ++){
tempMatrix1[i][j]= tempMatrix2[i][j];}//Of for j}//Of for i
tempPtr1 =initCompressedMatrix(2,3,4, tempMatrix1);printf("After initialization.\r\n");printCompressedMatrix(tempPtr1);
tempPtr2 =transposeCompressedMatrix(tempPtr1);printf("After transpose.\r\n");printCompressedMatrix(tempPtr2);}// Of mainintmain(){compressedMatrixTest();return1;}// Of main
代码学习1、建立结构体2、初始化3、转置4、打印5、样例测试6、结果1、建立结构体#include <stdio.h>#include <malloc.h>typedef int elem;//定义三元组结构 typedef struct Triple{ int i; int j; elem e;} Triple, *TriplePtr;//定义压缩矩阵 typedef struct CompressedMatrix{ int