给定一个顺序表,请写出一个将顺序表就地逆置的算法(就地逆置表示不允许用额外的存储单元来辅助数据之间的移动)。
额外的指针肯定允许吧,要不然怎么弄呢?
#include
using namespace std;
#define listsize 100
typedef struct
{
int data[listsize];
int length;
}list;
/*void swap(int a,int *b)
{
int t=*a;
*a=*b;
*b=t;
}/
void swap(int *a, int *b)
{
*a = *a ^ *b;
*b = *b ^ *a;
*a = *a ^ *b;
}
void cre(list *l,int n)
{
int i;
cout<<"输入顺序表元素:\n";
for(i=0;i cin>>l->data[i];
l->length=n;
}
void printlist(list *l,int n)
{
int i;
cout<<"顺序表为:\n";
for(i=0;i coutdata[i]<<" ";
cout<<endl;
}
void Invert(list *l,int n)
{
cout<<"开始逆置!\n";
int i;
for(i=0;i swap(&l->data[i],&l->data[n-i-1]);
printlist(l,n);
cout<<"逆置成功!\n";
}
int main(void)
{
list l;
cout<<"输入顺序表长度:\n";
cin>>l.length;
int n=l.length;
cre(&l,n);
printlist(&l,n);
Invert(&l,n);
return 0;
}