原题描述
设有一顺序表A=(a0,a1,…, ai,…an-1),其逆顺序表定义为A’=( an-1,…, ai,…,a1, a0)。设计一个算法,将顺序表逆置,要求顺序表仍占用原顺序表的空间。
输入格式
第一行:输入顺序表的元素个数
第二行:输入顺序表的各元素,用空格分开
输出格式
第一行:逆置前的顺序表元素列表
第二行:逆置后的顺序表元素列表
输入样例
10
1 2 3 4 5 6 7 8 9 10
输出样例
The List is:1 2 3 4 5 6 7 8 9 10
The turned List is:10 9 8 7 6 5 4 3 2 1
题目分析
双指针法是一维数组逆序的常见手段了。算法中唯一有点麻烦的就是应该交换多少次(死记就好n/2)
代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int a[105]={0},i,j,temp;
cin>>a[0];
for(i=1;i<=a[0];i++)
scanf("%d",&a[i]);
printf("The List is:");
for(i=1;i<=a[0];i++)
printf("%d ",a[i]);
cout<<endl;
for(i=1,j=a[0];i<=a[0]/2;i++,j--)//双指针法只有循环的次数最容易错(PS:双指针法完全可以用reverse函数来代替)
temp=a[i],a[i]=a[j],a[j]=temp;
printf("The turned List is:");
for(i=1;i<=a[0];i++)
printf("%d ",a[i]);
cout<<endl;
return 0;
}