您的位置:首页 > 其它

顺序表应用4-2:元素位置互换之逆置算法(数据改进)

2016-09-22 09:33 447 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  顺序表