示例#1
0
//求矩阵的转置矩阵
status transposeSMatrix(crossList *M,crossList *T){
	int u,i;
	oLink *head,p,q,r;
	if((T->rhead)) destroySMatrix(T);
	copySMatrix(M,T);//T=M
	u = T->mu;//交换T->mu和T->nu
	T->mu = T->nu;
	T->nu = u;//u为临时变量
	//交换rhead与chead
	head = T->rhead;
	T->rhead = T->chead;
	T->chead = head;
	//对T的每一行,注意行列值已经交换了
	for(u=1;u<=T->mu;u++){
		p = T->rhead[u];//p为行表头
		while(p){//没到表尾,对T的每一结点
			q = p->down;//q指向下一结点
			//交换i和j
			i = p->i;
			p->i = p->j;
			p->j = i;
			//交换down和right
			r = p->down;
			p->down = p->right;
			p->right = r;
			p = q;//p指向下一个新行的结点
		}
	}
	return true;
}
示例#2
0
//Ï¡Êè¾ØÕó²âÊÔ
void testRLSMatrix()
{
	RLSMatrix<int> A,B,C,D,E,F;
	createSMatrix(A);
	printSMatrix1(A);
	createSMatrix(B,2);
	printSMatrix1(B);
	addSMatrix(A,B,C);
	printSMatrix1(C);
	destroySMatrix(C);
	multSMatrix(A,B,C);
	printSMatrix1(C);
	transposeSMatrix(C,D);
	printSMatrix1(D);
	createSMatrix(E,3);
	printSMatrix1(E);
}
示例#3
0
//稀疏矩阵M复制得到T
status copySMatrix(crossList *M,crossList *T){
	int i;
	oLink p,q,q1,q2;
	if(T->rhead) destroySMatrix(T);
	T->mu = M->mu;T->nu = M->nu;T->tu = M->tu;
	//指针数组
	T->rhead = (oLink*)malloc((M->mu+1)*sizeof(oLink));
	if(!(T->rhead)) exit(0);
	T->chead = (oLink*)malloc((M->nu+1)*sizeof(oLink));
	if(!(T->chead)) exit(0);
	//初始化矩阵T的行头指针向量;各行链表为空链表
	for(i=1;i<=M->mu;i++) T->rhead[i] = NULL;
	//初始化矩阵T的列头指针向量;各列链表为空链表
	for(i=1;i<=M->nu;i++) T->chead[i] = NULL;
	//按行复制
	for(i=1;i<=M->mu;i++){
		p = M->rhead[i];
		//没到行尾
		while(p){
			if(!(q = (oLink)malloc(sizeof(oNode)))) exit(0);//存放新插入的结点
			q->i = p->i;
			q->j = p->j;
			q->e = p->e;
			//插到行表头
			if(!T->rhead[i]) T->rhead[i]=q1=q;//赋值运算符是自右向左的结合顺序
			else q1=q1->right=q;//q1始终指向行尾元素
			//插到列表头
			if(!T->chead[q->j]){
				T->chead[q->j] = q;
				q->down = NULL;
			}else{//插到列表尾
				q2 = T->chead[q->j];
				while(q2->down)	q2 = q2->down;//寻找列表尾
				q2->down = q;
				q->down = NULL;
			}
			p = p->right;
		}
		q->right = NULL;//第一行的值复制完了后需要
	}
	return true;
}