#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
#define LISTINCREASMENT 100
#define LISTSIZE 1000001
#define OVERLFLOW -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) return OVERLFLOW;
L.length=0;
L.listsize=LISTSIZE;
return OK;
}
int ListInsert(Sqlist &L,int i, ElemType e)
{
if(L.length >= L.listsize)
{
ElemType *newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREASMENT)*sizeof(ElemType));
L.elem = newbase;
L.listsize+=LISTINCREASMENT;
}
ElemType *q= &(L.elem[i]);
*q = e;
++L.length;
return OK;
}
void exchange(Sqlist &L, int m)
{
ElemType *p = L.elem;
ElemType *q = L.elem+L.length-1;
for(;p < q; p++, q--)
{
swap(*p, *q);
}
p = L.elem;
q = L.elem+L.length-m-1;
for(;p < q; p++, q --)
{
swap(*p, *q);
}
p = L.elem+L.length-m;
q = L.elem+L.length-1;
for(;p < q; p++, q--)
{
swap(*p, *q);
}
}
void print(Sqlist &L)
{
for(int i = 0; i < L.length; i++)
{
i == L.length-1 ? cout << L.elem[i] << endl : cout << L.elem[i] << ' ';
}
}
int main()
{
int k;
int n,m;
Sqlist L;
SqInitial(L);
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int e;
scanf("%d", &e);
ListInsert(L, i , e);
}
scanf("%d", &k);
while(k --)
{
scanf("%d", &m);
exchange(L,m);
print(L);
}
return 0;
}
顺序表应用4-2:元素位置互换之逆置算法(数据改进)
最新推荐文章于 2017-03-03 16:19:26 发布