数组、矩阵、广义表习题

1.数组A[0…n-1]中有多个非零元素,设计算法将非零元素移至数组前端

算法思想:两个循环变量 i 和 j,保证 i 的下一位绝对是0,用 j 去遍历数组,当遇到0元素时什么也不做,遇到非零元素时,i 往后一位,交换 i 和 j位置上的元素

void move(int a[], int n)
{
	int i = -1, j = 0, temp;
	for (j; j < n; j++)
	{
		if (a[j] != 0)
		{
			i++;
			if (i != j)//也可以不加这个if条件
			{
				temp = a[j];
				a[j] = a[i];
				a[i] = temp;
			}
		}
	}
}

2…数组A[0…n-1]中奇数移至偶数前端

算法思想:设置两个指针 i 和 j 分别指向数组第一个元素和最后一个元素,当 i 指向偶数, j 指向奇数时互换,直到 i>=j结束

3.数组A尾元素为分界线,小于等于尾元素的放其左边,反之放其右边

算法思想:将尾元素存入temp,设两个变量 i 和 j,i 指向头,j 指向尾,从 j 开始先找到一个小于分界线的元素与 i 当前位置互换,i +1,再从 i 开始找一个大于分界线的元素与 j 当前位置互换,在整个过程中每次都要检查 i 是否小于 j ,一旦二者相等则退出最外层循环,将分界线元素放进 i 位置

4.稀疏矩阵用三元组A表示,求其转置矩阵B(也用三元组表示)

算法思路:转置的实质就是将原先按行优先存储变为列优先存储的过程,原数组nm,转置就为mn,所以首先确定B数组第一行的内容,第一行的内容应该是A数组的第一列的内容,所以依次对A的三元组的列号依次检查,出现与当前B的行号相等的就存入三元组B

5.稀疏矩阵A和B采用三元组表示,计算三元组C=A+B

算法思路:AB行号相等比列号,列号也相等相加入C,列号不相等较小者入C,AB行号不等入行号较小者,分别用 i 和 j 来遍历A和B三元组,需注意行列号相等的情况下计算出的值必须不等于0才可入C,最后还需要将A和B中一方没有放入C的元素放进C

6.稀疏矩阵A和B(分别为mn和nk),采用三元组表示,求C=AxB

算法思路:写一个可以求某一三元组对应行列号位置上的值的函数,分别固定A的每一行和B的每一列进行相乘相加运算,最后将不为0的结果放进C。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值