《线性表的顺序存储》实验报告
1.需解决的的问题
利用顺序表,设计一组输入数据。
2.数据结构的定义
typedefstruct{
ElemType *elem; int length; intlistsize; }SqList;
3.程序的结构图
插入元素 删除元素 逆转元素 创建一个顺序表,并输入数据选择菜单,用户选择操作输出元素 摧毁线性表 下一次操作退出程序 清空线性表 输出线性表长度 查找元素
4.函数的功能
1)初始化一个空顺序表 voidInitSqList(SqList *L){ L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L->elem) exit(OVERFLOW); L->length=0; L->listsize=LIST_INIT_SIZE; }
2)输入元素
voidPushSqList(SqList *L){ inti; printf(\ scanf(\ printf(\ for(i=0;i
3)在指定位置插入一个指定的元素 voidInsertSqList(SqList *L,inti,ElemType x){ ElemType *newbase; intn,m; if(i<1||i>L->length+1){ printf(\ } if(L->length>=L->listsize){ newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); L->elem=newbase; L->listsize+=LISTINCREMENT; } else{ for(n=L->length;n>=i;n--) { ++L->length; L->elem[n]=L->elem[n-1]; } L->elem[i-1]=x; printf(\ for(m=0;m
printf(\ } }
4)删除指定位置的元素 voidDelSqList(SqList *L,inti){ ElemType *p,*q; ElemType x; int n; if(i<1||i>L->length) printf(\ p=&(L->elem[i-1]); x=*p; for(q=p;q<&(L->elem[L->length-1]);q++) *q=*(q+1); L->length--; printf(\ printf(\ for(n=0;n
5)将顺序表中所有的元素颠倒 voidChangeoverSqList(SqList *L){ SqList S; inti,j; if(L->length==L->listsize) S.elem=(ElemType*)malloc(L->length*sizeof(ElemType)); if(!S.elem) exit(OVERFLOW); else{ for(i=0;i
6)按顺序输出表中元素 voidPrintSqList(SqList *L){ inti; for(i=0;i
7)摧毁顺序表
voidDestroySqList(SqList *L) { if(L->elem) free(L->elem); }
8)清空顺序表
voidClearSqList(SqList *L){ L->length=0; }
9)查找指定位置的元素,并返回该元素的值 intGetElem(SqList *L,inti){ ElemType x; if(i<1||i>L->length+1) { printf(\ } else{ x=L->elem[i-1]; printf(\ } }
5.输入/输出数据
1)创建一个顺序表,先输入表长度,然后输入数据
2)选择菜单,进行不同操作
选‘1’,在指定位置插入指定元素
选‘2’,删除指定位置的元素
选‘3’,颠倒顺序表中元素的顺序 选‘4’,按顺序输出表中的元素 选‘5’,摧毁顺序表 选‘6’,清空线性表 选‘7’,输出当前顺序表的长度
选‘8’,输出指定位置的元素
选‘9’,退出该程序
6.总结
这个实验让我更好的掌握了在线性表的顺序存储中如何初始化,如何进行输入输出的处理,以及各种常用功能是怎样实现的。在顺序存储中,我们应该注意内存分配的问题,如果需要处理的数据量较大,申请的初始内存不够,我们就需要增加分配存储空间。