题目描述
注意:先将顺序表元素调整为符合要求的内容后,再做输出,输出过程只能用一个循环语句实现,不能分成两个部分。
输入
之后输入n行,每行先输入整数len与整数m(分别代表本表的元素总数与前半表的元素个数),之后输入len个整数,代表对应顺序表的每个元素。
输出
示例输入
2 10 3 1 2 3 4 5 6 7 8 9 10 5 3 10 30 20 50 80
示例输出
4 5 6 7 8 9 10 1 2 350 80 10 30 20
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define LISTINCREASMENT 100 #define LISTSIZE 10 #define OVERFLOW -1 #define OK 1 typedef int ElemType; typedef struct {ElemType * elem;int length;int listsize; } Sqlist;int SqInitial(Sqlist &L) //顺序表的初始化; { L.elem=(ElemType *) malloc (LISTSIZE*sizeof(ElemType));if (!L.elem) exit(OVERFLOW); // 当前存储空间已满L.length=0;L.listsize=LISTSIZE;return OK; }int ListInsert(Sqlist &L,int i,ElemType e) // 在顺序表L的第 i 个元素之前插入新的元素e {if(i<1|| i > L.length+1) printf("ERROR!");// 插入位置不合法if(L.length>=L.listsize){ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)*sizeof(ElemType));if(!newbase) return OVERFLOW;// 当前存储空间已满 L.elem=newbase;L.listsize+=LISTINCREASMENT; }ElemType * q=&(L.elem[i-1]);ElemType * p;for(p=&(L.elem[L.length-1]); p>=q; --p)*(p+1)=*p; // 插入位置及之后的元素右移*q=e; // 插入e++L.length; // 表长增1return OK;} void invert(Sqlist &L,ElemType s,ElemType t)// 本算法将数组 R 中下标自 s 到 t 的元素逆置,// 即将(Rs, Rs+1, …, Rt-1, Rt )// 改变为(Rt, Rt-1, …, Rs+1, Rs ) {int i,j,k;for(i=s,k=t;i<=(s+t)/2;i++){j=L.elem[i];L.elem[i]=L.elem[k];L.elem[k]=j;k--;} } void exchange(Sqlist &L,int m)// 本算法实现顺序表中前 m 个元素// 和后 n 个元素的互换 {int n=L.length-m;invert(L,0,L.length-1);invert(L,0,n-1);invert(L,n,m+n-1); }
void purg(Sqlist &L,int l,int r) {int i,t,j;for(i=l-1,j=r-1;i<(l+r)/2;i++){t=L.elem[i];L.elem[i]=L.elem[j];L.elem[j]=t;j--;} } int main() {int i,j,k,m,n,len;scanf("%d",&n);for(i=0;i<n;i++){Sqlist L;//顺序表的定义;SqInitial(L);//顺序表的初始化;scanf("%d%d",&len,&m);for(j=1;j<=len;j++){scanf("%d",&k);ListInsert(L,j,k);//顺序表元素的添加;}exchange(s,m);// 本算法实现顺序表中前 m 个元素// 和后 n 个元素的互换for(j=1;j<=L.length;j++)//顺序表所有元素的输出;{if(j!=L.length) printf("%d ",L.elem[j-1]);elseprintf("%d\n",L.elem[j-1]);}} }
#include <iostream> using namespace std; int a[1001000];int i,j; void invert(int a[],int s,int t) { for(i=s,j=t;i<=(s+t)/2;i++) { int k=a[i]; a[i]=a[j]; a[j]=k; j--; } } void change(int a[],int n,int m) { int h=n-m; invert(a,0,n-1); invert(a,0,h-1); invert(a,h,h+m-1); } int main() { int n; int t; cin>>t; while(t--) { int m; cin>>n>>m; for(i=0;i<n;i++) cin>>a[i]; change(a,n,m); for(i=0;i<n-1;i++) cout<<a[i]<<" "; cout<<a[n-1]<<endl; } return 0; }