代码实现
#include<iostream>
using namespace std;
#define MAXSIZE 30
typedef struct{
int elem[MAXSIZE]; //元素
int length; //长度
}SqList;
//输入线性表元素
void input(SqList &L,int num){
int i=0;//控制个数
L.length=0;//空表
while(num--){
cin>>L.elem[i];
L.length++;
i++;
}
cout<<endl;
}
//将线性表中下标自i到j的元素逆置
void invert(SqList &S,int i,int j){
int temp;
int k;
for(k=0;k<((j-i+1)/2);k++){
temp=S.elem[i+k];
S.elem[i+k]=S.elem[j-k];
S.elem[j-k]=temp;
}
}
//交换元素函数(m代表-前m个;n代表-后n个)
void exchange(SqList &L,int m,int n){
invert(L,0,m-1); //逆置前m个元素
invert(L,m,m+n-1); //逆置后n个元素
invert(L,0,m+n-1); //从0开始逆置元素
}
//输出线性表元素
void output(SqList L){
for(int i=0;i<L.length;i++){
cout<<L.elem[i]<<" ";
}
cout<<endl;
}
//主函数
void main(){
SqList L;
int n,m,num;
cout<<endl<<"******指定线性表中前m个元素和后n个元素交换******"<<endl<<endl;
cout<<"您要输入几个数据元素 (不超过30个) :";
cin>>num;
cout<<"请输入数据元素:"<<endl;
input(L,num);
cout<<"当前线性表中的元素为:"<<endl;
output(L);
cout<<endl;
cout<<"请输入您想交换前几个元素:";
cin>>m;
cout<<"请输入您想让后几个元素与前"<<m<<"个元素交换:";
cin>>n;
exchange(L,m,n);
cout<<endl;
cout<<"交换前"<<m<<"个、后"<<n<<"个元素后,线性表中的元素为:"<<endl;
output(L);
}
运行结果
![](https://img-blog.csdnimg.cn/113d90ad01994ae2b70bf2975e8b108e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6KaB5LiN5pat5Z2a5oyB5ZWK,size_20,color_FFFFFF,t_70,g_se,x_16)