要把一个顺序表就地逆置(辅助空间为o(1)),可以将表中的开始结点与终端结点互换,第二个结点和倒数第二个结点互换,如此反复,就可以将整个表逆置了。
#include<stdio.h>
#define ListSize 20
typedef int DataType;
typedef struct{
DataType data[ListSize];
int length;
}Seqlist;
Seqlist CreateList(Seqlist L) //结构体变量作为函数的参数,修改之后的成员值不能返回到主调函数,不过可以return返回它
{
int n;
L.length=0;
printf("输入顺序表的数据:输入-1结束\n");
while(1)
{
scanf("%d",&n);
if(n==-1) break;
L.data[L.length]=n;
L.length++;
}
return L;
}
void ReverseList(Seqlist *L) //结构体指针变量作为函数的参数,修改后的结构体成员的值能返回到主调函数,相当于传地址进来直接修改
{
DataType temp;
int i;
for(i=0;i<(L->length)/2;i++)
{
temp=L->data[i];
L->data[i]=L->data[L->length-1-i];
L->data[L->length-1-i]=temp;
}
}
int main()
{
int i,n;
Seqlist mylist;
mylist=CreateList(mylist);
ReverseList(&mylist);
for(i=0;i<mylist.length;i++)
{
printf("%d,",mylist.data[i]);
}
printf("\n");
printf("长度:%d,",mylist.length);
}