视频讲解在这里:
p18 第10题 c语言实现数据结构代码题_哔哩哔哩_bilibili
这一题与前一题的思路是一样的
先将整个顺序表逆置
然后逆置前n-left个元素
最后逆置后left个元素
本题代码如下
void reverse(int a[], int lef,int right)
{
int i = 0;
int temp = 0;
for (i = lef; i <=(lef + right)/2; i++)
{
temp = a[i];
a[i] = a[lef + right - i];
a[lef + right - i] = temp;
}
}
void change(int a[], int left)
{
reverse(a, 0, n - 1);
printf("全部逆置:");
print(a);
reverse(a, 0, n - left - 1);
printf("\n前n-left逆置:");
print(a);
reverse(a, n - left, n - 1);
printf("\n后left逆置:");
print(a);
}
完整测试代码
#include
int n = 7;
int a[7] = { 1,2,3,4,5,6,7 };
void reverse(int a[], int lef,int right)
{
int i = 0;
int temp = 0;
for (i = lef; i <=(lef + right)/2; i++)
{
temp = a[i];
a[i] = a[lef + right - i];
a[lef + right - i] = temp;
}
}
void print(int a[])
{
int j = 0;
for (j = 0; j < n; j++)
printf("%d ", a[j]);
}
void change(int a[], int left)
{
reverse(a, 0, n - 1);
printf("全部逆置:");
print(a);
reverse(a, 0, n - left - 1);
printf("\n前n-left逆置:");
print(a);
reverse(a, n - left, n - 1);
printf("\n后left逆置:");
print(a);
}
int main()
{
change(a, 6);
printf("\n");
print(a);
return 0;
}