顺序表应用4:元素位置互换之逆置算法
来源:互联网 发布:淘宝网首页女装毛衣 编辑:程序博客网 时间:2024/06/08 00:59
题目描述
注意:先将顺序表元素调整为符合要求的内容后,再做输出,输出过程只能用一个循环语句实现,不能分成两个部分。
输入
之后输入n行,每行先输入整数len与整数m(分别代表本表的元素总数与前半表的元素个数),之后输入len个整数,代表对应顺序表的每个元素。
输出
示例输入
210 3 1 2 3 4 5 6 7 8 9 105 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>#defineLISTINCREASMENT 100 #define LISTSIZE 10 #define OVERFLOW -1#define OK 1typedef 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; // 表长增1 return 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]); else printf("%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;}
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 【3327】顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- sdut oj3327 顺序表应用4:元素位置互换之逆置算法
- 3327顺序表应用4:元素位置互换之逆置算法
- SDUT3327顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- SDUT 3327 顺序表应用4:元素位置互换之逆置算法
- 顺序表应用4:元素位置互换之逆置算法
- 理财之星数据库修复
- 之字形打印矩阵
- 遍历二叉树和线索二叉树
- Android应用程序通用自动脱壳方法研究
- js实现文字横向滚动
- 顺序表应用4:元素位置互换之逆置算法
- web前端需要学习哪些东西?
- 小镇涞滩的流连辰光
- 找女朋友
- 对接支付宝支付
- bzoj3172(ac自动机)
- HDU 2897邂逅明下 (巴什博弈、找规律)
- 顺序栈的基本操作实现c++
- MYSQL --Subquery returns more than 1 row查询结果多于一行