假设有顺序表 L.elem[] = { a_1, a_2, ..., a_m, | b_1, b_2, ..., b_n },设计算法将L的两部分元素互换,使得 L.elem[] = { b_1, b_2, ..., b_n, |a_1, a_2, ..., a_m }
思路一:循环移位,数组整体循环右移n个元素
void circ_right_shift( int c[], int len, int n )
{
int i, t;
while( n-- > 0 )
{
t = c[len - 1];
for( i = len - 2; i >= 0; --i )
c[i + 1] = c[i];
c[0] = t;
}
}
思路二:使用两个指针依次交换两个元素块的对应序元素,若两方剩余元素不等,则通过递归再做交换。
void swap_elem( int * a, int * b )
{
int t = *a;
*a = *b;
*b = t;
}
void swap_block( int c[], int l1, int r1, int l2, int r2 )
{
int m = r1 - l1 + 1, n = r2 - l2 + 1;
int i;
if( m == n )
{
for( i = 0; i < m; ++i )
swap_elem( c + l1 + i, c + l2 + i );
}
else if( m > n )
{
swap_block( c, l1, l1 + n - 1, l2, r2 );
swap_block( c, n, r1, l2, r2 );
}
else
{
swap_block( c, l1
C语言实现顺序表元素块交换算法

本文探讨如何在顺序表中交换元素块,从 ANSI C 的角度出发,提供了三种解决方案:循环移位法、指针交换法和整体逆序再局部逆序法。这些方法旨在将顺序表 L.elem[] 中的 {a_1, a_2, ..., a_m} 和 {b_1, b_2, ..., b_n} 两部分进行互换。"
83016676,8089909,理解Koa2洋葱模型:compose中间件的四种实现解析,"['NodeJS', 'Koa', '源码分析', 'async/await']
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



