预览加载中,请您耐心等待几秒...
在线预览结束,喜欢就下载吧,查找使用更方便
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
实验二顺序表实验【实验目的】(1)掌握顺序表的存储结构及应用。(2)掌握用顺序表表示数据、并进行有关算法设计的方法。【实验背景】顺序表中,逻辑上相邻的节点其物理存储位置也相邻,节点间的逻辑关系由存储单元的邻接关系来体现。我们可以用数组存储表中元素,并同时记录顺序表中的最后一个元素在数组中的下标。用C语言描述顺序表的数据类型如下:#definemaxlen100typedefstruct{Datatypedata[maxlen];intlast;}Sequenlist;这样,顺序表的基本运算分别描述为:1置空表运算voidSqLsetnull(Sequenlist*L){L->last=-1;}2建空表运算Sequenlist*SqLsetnull(){Sequenlist*L;L=malloc(sizeof(Sequenlist));L->last=-1;return(L);}3求表长运算intSqLlength(Sequenlist*L){return(L->last+1);}4按序号取元素运算DatatypeSqLget(Sequenlist*L,inti){Datatypex;if(i<1||i>SqLlength(L))printf(“超出范围”);elsex=L->data[i–1];return(x);}5按值查找运算voidSqLlocate(Sequenlist*L,Datatypex){inti,z=0;for(i=0;i<SqLlength(L);i++)if(L->data[i]==x){printf(“%d”,i+1);z=1;}if(z==0)printf(“%d”,-1);}6判表满运算intSqLempty(Sequenlist*L){if(L->last+1>=maxlen)return(1);elsereturn(0);}7插入数据元素运算intSqLinsert(Sequenlist*L,inti,Datatypex){intj;if(SqLempty(L)==1){printf(“overflow”);return(0);}elseif((i<1)||(i>L->last+2)){printf(“error”);return(0);}else{for(j=L->last;j>=i–1;j--)L->data[j+1]=L->data[j];L->data[i–1]=x;L->last=L->last+1;return(1);}}在该算法中,i是顺序表中数据元素的序号,而L->last表示表中最后一个数据元素在数组中的下标。8删除数据元素运算intSqLdelete(Sequenlist*L,inti){intj;if(L->last<0){//表空printf(“顺序表空!”);return(0);}elseif((i<1)||(i>L->last+1)){printf(“i参数出错!”);return(0);}else{for(j=i;j<=L->last+1;j++)L->data[j-1]=L->data[j];L->last--;return(1);}}该算法中i是顺序表中数据元素的序号,而L->last表示表中最后一个数据元素在数组中的下标,表长n=L->last+1。【实验任务】1、程序验证(1)建立含有若干个元素的顺序表,并实现顺序表的插入、删除、查找等操作。(2)阅读下列程序,指出算法的功能,写出其运行结果,并通过运行来验证。#include“malloc.h”#definemaxlen50typedefstruct{intdata[maxlen];intlast;}Sequenlist;Sequenlist*ABC(Sequenlist*A,Sequenlist*B){inti,j;Sequenlist*C;C=malloc(sizeof(Sequenlist));C->last=-1;for(i=0;i<=A->last;i++)for(j=0;j<=B->last;j++){if(A->data[i]==B->data[j]){C->last++;C->data[C->last]=A->data[i];break;}returnC;}Sequenlist*SqLset(){Sequenlist*L;inti;L=malloc(sizeof(Sequenlist));L->last=-1;scanf(“%d”,&i)