void FastTransposeTSMatrix(TSMatrix A,TSMatrix *B) {//基于矩阵的三元组表示,采用一次定位快速转置法,将矩阵A转置为矩阵B int col,t,p,q; int num[MAXSIZE],position[MAXSIZE]; B->len=A.len; B->m=A.n; B->n=A.m; if(B->len) { for(col=0;col<A.m;col++) num[col]=0; for(t=0;t<A.len;t++) num[A.data[t].col]++;//采用数组下标计算法计算每一列非零元素的个数 position[0]=0; for(col=1;col<A.m;col++)//求col列中第一个非零元素在B.data[]中的正确位置 position[col]=position[col-1]+num[col-1]; for(p=0;p<A.len;p++)//将被转置矩阵的三元组表A从头至尾扫描一次,实现矩阵转置 { col=A.data[p].col; q=position[col]; B->data[q].row=A.data[p].col; B->data[q].col=A.data[p].row; B->data[q].e=A.data[p].e;//行列互换,元素赋值 position[col]++;//position[col]加1,指向下一个列号为col的非零元素在三元组表B中的存放位置 } } }写出此段程序的伪代码
时间: 2024-04-02 10:35:57 浏览: 87
procedure FastTransposeTSMatrix(A: TSMatrix, var B: TSMatrix)
var
col, t, p, q: integer
num[MAXSIZE], position[MAXSIZE]: array of integer
begin
B.len := A.len;
B.m := A.n;
B.n := A.m;
if B.len > 0 then
begin
for col := 0 to A.m - 1 do
num[col] := 0;
for t := 0 to A.len - 1 do
num[A.data[t].col] := num[A.data[t].col] + 1;
position[0] := 0;
for col := 1 to A.m - 1 do
position[col] := position[col-1] + num[col-1];
for p := 0 to A.len - 1 do
begin
col := A.data[p].col;
q := position[col];
B.data[q].row := A.data[p].col;
B.data[q].col := A.data[p].row;
B.data[q].e := A.data[p].e;
position[col] := position[col] + 1;
end;
end;
end.
阅读全文