您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 顺序表的基本操作--插入-删除-合并
..辽宁工程技术大学上机实验报告实验名称顺序表的基本操作的实现院系软件学院专业软件工程班级软件15-3姓名ZOE学号日期2016.09.27实验目的简述本次实验目的:1.掌握线性表顺序存储结构的特点。2.掌握线性表顺序存储结构的基本操作(创建、插入、删除)的实现。3.通过顺序表有序表的合并的实现,掌握顺序表操作特点。实验准备你为本次实验做了哪些准备:在课后认真复习,基于上课的基础上,对于线性表的存储,插入,删除,合并等有了一定的了解,对于书上给出的程序反复捉摸,达到了较熟练的程度。实验进度本次共有1个练习,完成个。成绩..实验总结日本次实验的收获、体会、经验、问题和教训:顺序表初始化、插入、删除算法。实现两个有序表合并算法.#includemalloc.h#includestdlib.h#defineOK1#defineOVERFLOW-1#defineERROR0#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefintElemType;typedefintStatus;/*----------顺序表的存储结构定义--------*/typedefstruct{ElemType*elem;intlength;intlistsize;}sqlist;/*-------------初始化顺序表L----------*/StatusInitList_sq(sqlist*L){L-elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L-elem)exit(OVERFLOW);L-length=0;L-listsize=LIST_INIT_SIZE;returnOK;}/*------------顺序表L插入----------*/StatusListInsert_Sq(sqlist*L,inti,ElemTypee){ElemType*newbase,*p,*q;if(i1||iL-length+1)returnERROR;if(L-length=L-listsize){newbase=(ElemType*)realloc(L-elem,(L-listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(OVERFLOW);L-elem=newbase;L-listsize=L-listsize+LISTINCREMENT;}q=&(L-elem[i-1]);for(p=&(L-elem[L-length-1]);p=q;--p)*(p+1)=*p;..*q=e;++L-length;returnOK;}/*------------顺序表L删除----------*/StatusListDelete_Sq(sqlist*L,inti,ElemType*e){ElemType*p,*q;if(i1||iL-length)returnERROR;p=&(L-elem[i-1]);*e=*p;q=L-elem+L-length-1;/*printf(%d,%d,%d,%d,p,L-elem,L-length,q);*/for(++p;p=q;++p)*(p-1)=*p;--L-length;returnOK;}/*-----------合并----------*/voidMergelist(sqlistLa,sqlistLb,sqlistLc){inti,j,k;i=j=k=0;while((iLa.length)&&(jLb.length)){if(La.elem[i]Lb.elem[j]){Lc.elem[k++]=La.elem[i++];}elseLc.elem[k++]=Lb.elem[j++];}while(iLa.length)Lc.elem[k++]=La.elem[i++];while(jLb.length)Lc.elem[k++]=Lb.elem[j++];}/*-----------main函数----------*/main(){..sqlistLa,Lb,Lc;inti;intn=5;ElemTypee;/*------------------INIT-----------------*/if(InitList_sq(&La)){printf(Initisok!\n);printf(Length:%d\n,La.length);printf(Listsize:%d\n\n,La.listsize);}elseprintf(error!);/*------------------INIT-----------------*/if(InitList_sq(&Lb)){printf(Initisok!\n);printf(Length:%d\n,Lb.length);printf(Listsize:%d\n\n,Lb.listsize);}elseprintf(error!);/*------------------INIT-----------------*/if(InitList_sq(&Lc)){printf(Initisok!\n);printf(Length:%d\n,Lc.length);printf(Listsize:%d\n\n,Lc.listsize);}elseprintf(error!);/*--------------顺序表La输入初始值---------------*/printf(PleaseinputthevaluesofLa:\n);for(i=1;i=n;i++){scanf(%d,&e);if(ListInsert_Sq(&La,i,e)!=OK)break;}for(i=1;i=La.length;i++)printf(e[%d]=%d\n,i-1,La.elem[i-1]);printf(Length:%d\n\n,La.length);/*-------------INSERT-----------------*/printf(Pleaseinputtheplaceofinsert:\n);scanf(%d,&i);..printf(Pleaseinputtheelemvalue:\n);scanf(%d,&e);if(ListInsert_Sq(&La,i,e)==OK){for(i=1;i=La.length;i++)printf(e[%d]=%d\n,i-1,La.elem[i-1]);printf(Length:%d\n\n,La.length);}/*-------------DELETE----------------*/printf(Pleaseinputtheplaceofdelete:\n);scanf(%d,&i);if(ListDelete_Sq(&La,i,&e)==OK)printf(Thedeletedelemis:%d\n,e);for(i=1;i=La.length;i++)printf(e[%d]=%d\n,i-1,La.elem[i-1]);printf(Length:%d\n,La.length);/*--------------顺序表Lb输入初始值---------------*/printf(PleaseinputthevaluesofLb:\n);for(i=1;i=n;i++){scanf(%d,&e);if(ListInsert_Sq(&Lb,i,e)!=OK)break;}for(i=1;i=Lb.length;i++)printf(e[%d]=%d\n,i-1,Lb.elem[i-1]);printf(Length:%d\n\n,Lb.length);/*--------------合并---------------*/Lc.length=La.length+Lb.length;Mergelist(La,Lb,Lc);for(i=1;i=Lc.length;i++)printf(\n合并后的数组为\n);printf(e[%d]=%d\n,i-1,Lc.elem[i-1]);printf(Length:%d\n\n,Lc.length);}....(3)主函数中调用以上算法,完成如下功能:①建立一个空表La,输入一组元素序列。②输入插入位置及元素值,完成插入操作,并输出插入后顺序表。③输入删除元素位序,完成删除操作,输出删除元素值及删除后顺序表。④建立另一个顺序表Lb,并输入元素。调用合并算法,将La,Lb合并成Lc,输出合并后Lc单纯的课本内容,并不能满足学生的需要,通过补充,达到内容的完善教育之通病是教用脑的人不用手,不教用手的人用脑,所以一无所能。教育革命的对策是手脑联盟,结果是手与脑的力量都可以大到不可思议。
本文标题:顺序表的基本操作--插入-删除-合并
链接地址:https://www.777doc.com/doc-5221116 .html