题目:试写一个算法,实现顺序表的就地逆置,即利用原表的存储空 间将线性表( a1,a2, ,an )逆置为( an,an-1, a1) 一 需求分析 1本题在演示程序中,数组最大可以存100 个数据 2在设计中事先需要输入长度,再输入数据,以回车结束 3程序执行的命令包括: 1)定义线性表 2 )初始化线性表 3)输入函数 4)输出函数 5) 求逆置 4测试数据 (1)请输入长度: 4 请输入数据: 4 5 6 87 4*** 5*** 6*** 87*** 逆序为 87*** 6*** 5*** 4*** (2)请输入长度: 3 请输入数据: 3 7 9 3*** 7*** 9*** 逆序为 9*** 7*** 3*** 二 概要设计 基本操作: status Initlist_Sq(Sqlist *L) 操作结果:初始化一个线性表 void input(Sqlist *A) 初始条件:线性表已存在 操作结果:往线性表里面输入数据 void print(Sqlist *A) 初始条件:线性表已存在 操作结果:输出线性表 void invert(Sqlist *A) 初始条件:线性表已存在。
操作结果:将线性表逆置 三 详细设计 1 元素类型,线性表类型 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define OK 1 typedef struct int *elem; int length; int listsize; Sqlist; typedef int status; 2对一个线性表进行初始化 status Initlist_Sq(Sqlist *L) L-elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int)); if(!L-elem) printf(voerflow); else L-length=0; L-listsize=LIST_INIT_SIZE; return OK; 3对一个线性表输入数据,是先输入长度,然后再输入数据 void input(Sqlist *A) int i=0; printf(n请输入长度 :n); scanf(%d, printf(请输入数 :); for(i=0;ilength;i++) scanf(%d, 4对一个线性表进行输出。
void print(Sqlist *A) int i; for(i=0;ilength;i++) printf(%d*** ,A-elemi); void invert(Sqlist *A) int n=A-length; int m=(A-length)/2,i; int temp; for(i=0;ielemi;A-elemi=A-elemn-i-1;A-elemn-i-1=temp; void main() Sqlist A; 五 测试结果 (1)请输入长度: 4 请输入数据: 4 5 6 87 4*** 5*** 6*** 87*** 逆序为 87*** 6*** 5*** 4*** (2)请输入长度: 3 请输入数据: 3 7 9 3*** 7*** 9*** 逆序为 9*** 7*** 3*** 七附录 。