洛阳理工学院实验报告
系部 计算机与信息班级 工程系 课程名称 实验名称 数据结构 实验1:顺序表的基本操作 实验日期 2014.3.5 成绩 学号 姓名 实验目的: 掌握线性表的基本操作:插入、删除、查找在顺序存储结构上的实现。 实验条件: 电脑一台,VC++6.0 实验内容与步骤: 内容:建立一有序的顺序表,并实现下列操作: 1. 把元素x插入表中并保持有序; 2.查找值为x的元素,若找到将其删除; 3.输出表中各元素的值。 步骤: 1、先将插入的元素与最后一个元素比较,若小,将最后一个元素向后移动一个位置。继续与次位比较,若还小,继续移动。直到比它大时,不在移动,然后将要插入的元素插入,最后再让表长加一。 2、调用查找函数找出所删除元素的下表,并返回其值:先从第一个元素开始找,如果找到了,返回下标值;如果到表的结尾还没有找到就返回-1。 3、对于找到所删除元素,就从该元素开始,每一元素都往前移动,然后让表长减一。 4、调用输出函数,输出表中各元素的值时,将其封装成一个函数。传入该函数中的参数是一个指向该顺序表的指针。 运行结果: 实验总结: 通过此次的实验使我基本掌握了顺序表的函数的输入输出、查找、插入和删除等顺序表的基本操作,还有加深对函数之间的调用,对选择语句的加深。 在学习数据结构时一定有多上计实践,才能更好的发现错误,才能让我们注意到更多的细节之处,更能加深我们对课本知识的掌握。 附:源程序: #include
#define MAXSIZE 50 //此处宏定义数组最大长度 #define OK 1 #define ERROR 0 typedef struct {
int elem[MAXSIZE];//线性表占用数组空间 int last;
//记录现性表中最后一个元素的下表
}SeqList;
/*******************************************/ //
顺序表按内容查找函数
//功能:在顺序表L中查找与e相等的元素 /********************************************/ int Locate(SeqList *L,int e) {
int i=0; //i为扫描计数器
while((i<=L->last)&&(L->elem[i]!=e)) //顺序扫描表,直到找到职位e的元素,或扫
面到表尾没有找到 }
/*********************************************************/ /****************输入函数*********************************/ /*********************************************************/ void Input(SeqList* L) { int n,j;
printf(\输入数组长度n:\ scanf(\
printf(\输入数组元素\\n\ for(j=0;j scanf(\L->last=n-1; i++; if(i<=L->last) return(i+1); //若找到值为e的元素,返回i+1 else return(-1); //若没找到,返回空序列号 /*********************************************************/ /****************输出函数*********************************/ /*********************************************************/ void Output(SeqList* L) { int i; for(i=0;i<=L->last;i++) } /****************************************************/ // 顺序表的插入函数 printf(\ printf(\ //功能:在顺序表L中插入一个元素e。i的合法位子为1~L->last+2 /***************************************************/ int InList(SeqList* L,int e) { int i; } /*************************************************/ if(L->last==MAXSIZE-1) { } for(i=L->last;i>=0&&e L->elem[i+1]=L->elem[i]; printf(\溢出\\n\return(ERROR); L->elem[i+1]=e; L->last++; return(OK); // 顺序表的删除函数 //功能:在顺序表L中删除第i个元素,1<=i<=L->last+1 /************************************************/ void DelList(SeqList* L,int i) { } /*******************************************************/ //*****************主函数*******************************/ /*******************************************************/ void main() { int b,e,e1,e2,chiose; printf(\选择1函数输入*********************\\n\ printf(\选择2函数插入*********************\\n\ printf(\选择3函数删除*********************\\n\ printf(\选择4函数输出*********************\\n\int a=1; SeqList *L,p; L=&p; } for(k=i;k<=L->last;k++) L->elem[k-1]=L->elem[k]; //将后面的元素次前移 int k; if((i<1)||(i>L->last+1)) { printf(\删除位置不合法\ L->last--;