您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 顺序表基本操作的实现
1、顺序表基本操作的实现[问题描述]在顺序表中查找值为x的元素的位置,在线性表的某个位置插入一个元素,删除线性表某个位置的元素。[基本要求]要求建立生成顺序表,可以键盘上读取元素,用顺序存储结构实现存储。[实现提示]要实现基本操作,可用实现的基本操作,也可设计简单的算法实现。[建议步骤]1)建立顺序表的存储结构;2)利用1)的存储结构建立有实际数据的数据表;3)实现查找操作;4)实现插入操作;5)实现删除操作。6)写出main函数测试上述操作。实验源码:#includestdio.h#defineMAX300typedefintElemType;typedefstruct{ElemTypedata[MAX];intlength;}SqList;SqListL;//打印菜单voidmenu(){printf(**************************************\n);printf(顺序表操作的验证实验\n);printf(**************************************\n);printf(1、初始化表\n);printf(2、创建表\n);printf(3、按值查询\n);printf(4、在指定位置插入一个元素\n);printf(5、删除指定位置上的一个元素\n);printf(6、输出表\n);printf(0、退出\n);printf(***************************************\n);}//初始化表,置表长为0voidInit(SqList*L){L-length=0;}//创建表voidCreat(SqList*L){intn,i;printf(请确定表的长度:);scanf(%d,&n);L-length=n;printf(请输入数据元素:\n);for(i=1;i=n;i++)scanf(%d,&L-data[i]);printf(\n\n按任意任意键继续...\n);getch();}//显示列表voidPrintL(SqList*L){inti;if(L-length==0)printf(空表,请首先创建表!\n);else{printf(\n当前表元素是:\n);for(i=1;i=L-length;i++){printf(%d,L-data[i]);if(i%10==0)printf(\n);}printf(\n);}printf(\n\n按任意任意键继续...\n);getch();}//按值查询voidSearch(SqList*L){inti,x;printf(请输入要查询元素的值:);scanf(%d,&x);for(i=1;i=L-length&&L-data[i]!=x;i++);if(i=L-length)printf(\n元素%d第一次出现在表中第%d个位置上!\n,x,i);elseprintf(\n表中没有元素%d!\n,x);printf(\n);printf(\n\n按任意任意键继续...\n);getch();}//在指定位置上插入一个元素voidInsert(SqList*L){inti,j,x;printf(请确定要插入的位置:);scanf(%d,&i);printf(请输入要插入的元素值:);scanf(%d,&x);if(L-lengthMAX){printf(表满!\n);return;}if(i1||iL-length+1)printf(位置错!\n);else{for(j=L-length;j=i;j--)L-data[j+1]=L-data[j];L-data[i]=x;L-length++;}PrintL(L);printf(\n\n插入成功!!!按任意任意键继续...\n);getch();}//删除指定位置上的一个元素voidDel(SqList*L){inti,j;printf(请确定要删除元素的位置:);scanf(%d,&i);if(L-length==0)printf(空表!\n);elseif(i1||iL-length)printf(位置错!\n);else{for(j=i+1;j=L-length;j++)L-data[j-1]=L-data[j];L-length--;}PrintL(L);printf(\n\n删除成功!!!按任意任意键继续...\n);getch();}main(){intt;while(1){system(cls);menu();printf(请选择一个操作:);scanf(%d,&t);switch(t){case1:Init(&L);break;case2:Creat(&L);break;case3:Search(&L);break;case4:Insert(&L);break;case5:Del(&L);break;case6:PrintL(&L);break;case0:exit(0);default:printf(输入错误!请按任意键继续...\n);getchar();}}}运行截图:2、有序顺序表的合并[问题描述]已知顺序表la和lb中的数据元素按非递减有序排列,将la和lb表中的数据元素,合并成为一个新的顺序表lc。[基本要求]lc中的数据元素仍按非递减有序排列,并且不破坏la和lb表。实验源码:#includestdio.h#defineMAX200typedefintElemType;typedefstruct{ElemTypedata[MAX];intlength;}SqList;SqListLa,Lb,Lc;//初始化表voidInit_List(SqList*L){L-length=0;}//创建表voidCreat_List(SqList*L){intn,i;printf(请确定表的长度:);scanf(%d,&n);L-length=n;printf(请输入数据元素:\n);for(i=1;i=n;i++)scanf(%d,&L-data[i]);}//输出表voidPrint_List(SqList*L){inti;if(L-length==0)printf(空表,请首先创建表!\n);else{printf(\n当前表元素是:\n);for(i=1;i=L-length;i++){printf(%d,L-data[i]);if(i%10==0)printf(\n);}printf(\n);}}//从表中取值voidGetElem(SqList*L,inti,ElemType*e){if(i=1&&i=L-length)*e=L-data[i];}//插入:voidInsert_List(SqList*L,inti,ElemTypee){intj;if(L-lengthMAX){printf(表满!\n);return;}if(i1||iL-length+1)printf(位置错!\n);else{for(j=L-length;j=i;j--)L-data[j+1]=L-data[j];L-data[i]=e;++L-length;}}//合成新表voidMergeList(){inti,j;ElemTypeai,bj;intk=0;i=j=1;while((i=La.length)&&(j=Lb.length)){//La和Lb均非空GetElem(&La,i,&ai);GetElem(&Lb,j,&bj);if(ai=bj){Insert_List(&Lc,++k,ai);++i;}else{Insert_List(&Lc,++k,bj);++j;}}while(i=La.length){GetElem(&La,i++,&ai);Insert_List(&Lc,++k,ai);}while(j=Lb.length){GetElem(&Lb,j++,&bj);Insert_List(&Lc,++k,bj);}Lc.length=La.length+Lb.length;}//merge_listmain(){//初始化表Init_List(&La);Init_List(&Lb);Init_List(&Lc);//创建一个测试表Creat_List(&La);Creat_List(&Lb);Print_List(&La);Print_List(&Lb);MergeList();Print_List(&Lc);}运行截图:
本文标题:顺序表基本操作的实现
链接地址:https://www.777doc.com/doc-4925660 .html