写在前面的话:直接从第5章跳到了第7章数据结构的趣题,原因是前面的数学趣题做久了,会觉得稍许疲倦,所以想“变个口味”,以后数学趣题和数据结构混合着练习。
1. 题目要求
编写一个函数,实现顺序表的就地逆置,也就是说利用原表的存储空间,将顺序表(a1,a2,a3,...,an)逆置为(an,an-1,...,a2,a1)
2. 题目分析
oh!太久没有看过数据结构的东西了,感觉非常的不习惯,脑子一片空白呢!
顺序表应该可以如下简单的描述
a->b->c->d->...
这里先简单复习一下顺序表吧
https://blog.csdn.net/liubo_01/article/details/80186552
网上有很多关于顺序表的东西了
3. 代码尝试
#include "stdio.h"
#define MAXSIZE 10
/*定义一个顺序表类型*/
typedef struct{
int *base;
int length;
}sqlist;
reverseSQ(sqlist *l){
int low = 0,high = l->length-1;//分别指向顺序表首尾
int buf,i;
for(i=0;i<l->length/2;i++){
buf = l->base[low];
l->base[low]=l->base[high];
l->base[high]=buf;
low++;
high--;
}
}
int main(){
sqlist l;
int a,i=0;
//创建一个顺序表
l.base = (int*)malloc(sizeof(int)*MAXSIZE);
l.length = 0;
//输入数据
printf("please input below 10 integer into the sqlist.\n");
printf("please type -1 for stopping input\n");
scanf("%d",&a);
while(a!=-1&&i<=9){
l.base[i]=a;
l.length++;
i++;
scanf("%d",&a);
}
//输出原来表的数据
printf("the contents of the sqlist are\n");
for(i=0;i<l.length;i++){
printf("%d",l.base[i]);
}
printf("\n");
//就地逆置顺序表
printf("%d",&l);
reverseSQ(&l);
printf("the contents of the reversed sqlist are\n");
for(i=0;i<l.length;i++){
printf("%d",l.base[i]);
}
return 0;
}
4. 总结
线性表顺序存储的概念:指的是在内存中用一段地址连续的存储单元依次存储线性表中的元素。
采用的实现方式:一段地址连续的存储单元可以用固定数组或者动态存储结构来实现,这里采用动态分配存储结构。
10 typedef struct
11 {
12 int * elem; //采用动态存储分配结构
13 int length;
14 int listsize;
15 }sqlist;