已知一维数组A[M+N]中依次存放两个线性表(a1,a2,a3,a4....an与b1,b2,b3...bn)试写函数将两顺序表的位置互换
已知一维数组A[M+N]中依次存放两个线性表(a1,a2,a3,a4....an与b1,b2,b3...bn)试写函数将两顺序表的位置互换,即将b1,b2,b3...bn放在a1,a2,a3,a4....an前面
刚看这个题,想的第一种算法是
先将M,N进行比较,如果M大,则将b顺序表前移到表头
即
a1 a2 a3…an b1 b2 b3…bn 变成
b1 b2 b3…bn a(n+1) a(n+2)…am a1 a2 a3…an
然后再把a1 a2 a3…an往前移m-n
这种算法显然复杂难算
后面发现的一种简单的算法
即
①先将整个顺序表翻转,然后分别将a,b翻转
a1 a2 a3…an b1 b2 b3…bn 变成
bn…b3,b2,b1 an…a3 a2 a1
②将bn…b3 b2 b1 翻转
b1 b2 b3…bn an…a3 a2 a1
③将 an…a3 a2 a1 翻转
b1 b2 b3…bn a1 a2 a3…an
插入代码:Ctrl/Command + Shift + K
话不多说,上代码
void demo(SqList &L)
{int temp,j;for(j=0;j<(M+N)/2;j++)//进行倒转操作①{temp = L.data[j];L.data[j] = L.data[M+N-1-j];L.data[M+N-1-j] = temp;}for(j=0;j
如果单独写一个翻转函数也是不错的方法
这里就只写翻转函数了
void exchange(int data[],int left,int right)
{int j,temp;for(j=0;j<(right-left)/2;j++){temp = data[left+i];data[left+i] = data[right-i];data[right-i] = temp;}
}
有问题欢迎指导 小白学习中
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
