数组、矩阵、广义表 p122

1、设数组A[0~n-1]的n个元素中有多个0元素,设计算法将所有非零元素移动到数组前端。

void Move(int A[],int n){
	int i=-1,j,temp;
	for(int j=0;j<n;j++){
		if(A[j]!=0){
			++i;
			if(i!=j){
				temp=A[i];
				A[i]=A[j];
				A[j]=temp;
			}
		} 
	}
}

2、关于浮点型数组A[0~n-1]设计递归算法实现:(1)求数组A的最大值(2)求数组n个数之和(3)求数组n个数的平均值

find_max(A,0,n-1);
float Find_max(float A[],int i,int j){
//	int max=A[0];
//	int pos;
//	for(int i=0;i<n;i++){
//		if(A[i]>max){
//			max=A[i];
//			pos=i;
//		}
//	}
//	return pos;
	float max;
	if(i==j) return A[i];
	else{
		max=find_max(A,i+1,j);
		if(A[i]>max) return A[i];
		else return max;
	}  	
}
Sum(A,0,n-1);
float Sum(float A[],int i,int j){
//	float sum=0;
//	for(int i=0;i<n;i++){
//		sum+=A[i];
//	}
//	return sum;
	if(i==j) return A[i];
	else return A[i]+Sum(A,i+1,j);
}
Average(A,0,n-1);
float Average(float A[],int i,int j){
//	float sum=Sum(A,n);
//	float average=sum/n;
	if(i==j) return A[i];
	else return (A[i]+(j-i)*Average(A,i+1,j))/(j-i+1);
} 

3、设计算法将数组A的所有奇数移动到偶数之前,不增加存储空间且时间复杂度On

void Move(int A[],int n){
	int i=0,j=-1,temp;
	while(i<j){
		while(A[i]%2==1&&i<j)	++i;
		while(A[j]%2==0&&i<j)	--j;
		if(i<j){
			temp=A[i];
			A[i]=A[j];
			A[j]=temp;
			++i;
			--j;
		}
	}
}

4、设有一元素为整数的线性表L,存在数组中,设计算法以最后一个元素为准,进行快排一次划分

 

5、设计算法,对给定m*n矩阵A,统计矩阵具有下列特征的元素个数并输出他们的坐标及数值:它们既是所在行中的最小值,有事所在列中的最小值;它们既是所在行中的最大值又是所在列中的最大值。假设矩阵中元素各不相同,要求结果在处理过程中用输出语句输出。

void printmin(int A[][maxSize],int m,int n){
	int i,j,k,min,minj;   //minj记录i行上最小值的列号 
	int flag;
	for(int i=0;i<m;i++){
		min=A[i][0];
		minj=0;
		for(int j=0;j<n;j++){
			if(A[i][j]<min){
				 min=A[i][j];
				 minj=j;
			}
			flag=1;
		}
		for(int k=0;k<m;k++){
			if(min>A[k][minj]){
				flag=0;
				break;
			}
		}
		if(flag) printf("%d",A[i][minj]);
	}
}
void printmax(int A[][maxSize],int m,int n){
	int i,j,k,max,maxj;
	int flag;
	for(i=0;i<m;++i){
		if(A[i][j]>max){
			max=A[i][j];
			maxj=j;
		}
		flag=1;
		for(k=0;k<m;k++){
			if(max<A[k][maxj]){
				flag=0;
				break;
			}
		}
		if(flag) printf("%d",A[i][maxj]);
	}
}

6、简要介绍稀疏矩阵的三元组存储结构特点,并实现稀疏矩阵的基本操作

(1)给定稀疏矩阵A(int),创建其三元组存储结构B

(2)查找给定元素x是否在矩阵中

三元组存储结构是一种顺序结构,因此也是一种顺序表,表中的每个结点对应稀疏矩阵的一个非零元素,其中包括三个字段,分别为该元素的值、行下表和列下标。另外,用第0行的第1个元素存储矩阵中非零元素的个数,第0行的第2个元素存储矩阵的行数,第0行的第3个元素存储矩阵的列数。

void create(int A[][maxSize],int m,int n,int B[][3]){
	int i,j,k=1;
	for(i=0;i<m;++i){
		for(j=0;j<n;++j){
			if(A[i][j]!=0){
				B[k][0]=A[i][j];
				B[k][1]=i;
				B[k][2]=j;
				++k;	
			}
		}
	}
	B[0][0]=k-1;
	B[0][1]=m;
	B[0][2]=n;
}
int Search(int B[][3],int x){
	int i,t;
	t=B[0][0];//非零元素个数
	i=1;
	while(i<=t&&B[i][0]!=x) i++;
	if(i<=t) return 1;
	else return 0;	
} 

7、假设稀疏矩阵A采用三元组表示,编写函数计算其转置矩阵B,B也用三元组表示

  • 互换三元组中各个元素的行下标和列下标,并将其按照原矩阵列优先的顺序存储。
  • 原矩阵:A 转置矩阵:B
  • 在A中找到第一列中的所有元素,他们是B的第一行的非零元素,并依次放在B的三元组中
void transpose(int A[][3],int B[][3]){
	int p,q,col;
	B[0][0]=A[0][0];
	B[0][1]=A[0][2];
	B[0][2]=A[0][1];
	if(B[0][0]>0) {
		q=1;
		for(col=0;col<B[0][0];++col){   //按列转置 
			for(p=1;p<=B[0][0];++p){
				if(A[p][2]==col){
					B[q][0]=A[p][0];
					B[q][1]=A[p][2];
					B[q][2]=A[p][1];
					++q;
				}
			}
		}
	} 	
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值