数据结构顺序表作业一
题目:在不开辟多余空间的情况下,实现就地逆序
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define MAXSIZE 1000
/*题目:在不开辟多余空间的情况下,实现就地逆序*/
typedef struct _seqlist
{
int list[MAXSIZE];
int len;
}sqlist; //定义一个链表
void scan(sqlist *s) //定义一个输入函数(*s而不是&s)
{
int i;
for(i=1;i<=10;i++)
s->list[s->len++] = i; //指针型用->
}
void sort_allelem(sqlist *s)//定义一个就地逆序函数
{
int* left = s->list; //定义left为最左边的元素
int* right = s->list + s->len - 1; //定义right是最右边的元素
while (left < right) //如果左边小于右边
{
int tmp = 0;
tmp = *left; //交换
*left = *right;
*right = tmp;
left++; //从左向右递进一个
right--; //从右向左递进一个
}
}
void print(sqlist *s) //输出链表函数
{
int i;
for(i=0;i<s->len;i++)
printf("%d ",s->list[i]);
printf("\n");
}
int main()
{
sqlist s;
s.len = 0;
scan(&s);
print(&s);
sort_allelem(&s); //调用函数记得加&
print(&s);
return 0;
}
思路:首位交换即可
测试案例:
1,2,3,4,5,6,7,8,9