




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一顺序表基本操作实验一顺序表基本操作实验一顺序表基本操作实验一顺序表基本操作编制仅供参考审核批准生效日期地址:电话:传真:邮编:实验一顺序表基本操作一实验目的1.学会定义线性表的顺序存储类型,实现C程序的基本结构,对线性表的一些基本操作和具体的函数定义。2.掌握顺序表的基本操作,实现顺序表的插入、删除、查找以及求并集等运算。3.掌握对多函数程序的输入、编辑、调试和运行过程。二实验要求1.预习C语言中结构体的定义与基本操作方法。2.对顺序表的每个基本操作用单独的函数实现。3.编写完整程序完成下面的实验内容并上机运行。4.整理并上交实验报告。三实验内容:1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。(2)将La置为空表。(3)销毁La。(4)在La中插入一个新的元素。(5)删除La中的某一元素。(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。(7)打印输出La中的元素值。2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。四思考与提高假设两个顺序线性表La和Lb分别表示两个集合A和B,如何实现A=A∩B1.编写程序实现顺序表的下列基本操作:(1)初始化顺序表La。(2)将La置为空表。(3)销毁La。(4)在La中插入一个新的元素。(5)删除La中的某一元素。(6)在La中查找某元素,若找到,则返回它在La中第一次出现的位置,否则返回0。(7)打印输出La中的元素值。#include<>#include<>#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineYES1#defineNO0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefintElemType;#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;Statuscmp(ElemTypea,ElemTypeb){if(a==b)returnYES;elsereturnNO;}//构造空的顺序表LaStatusInitList_Sq(SqList&L){=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!exit(OVERFLOW);=0;=LIST_INIT_SIZE;returnOK;}//撤销线性表L;StatusDestroy_Sq(SqList&L){free;=NULL;=0;=0;returnOK;}//清空线性表StatusClearList_Sq(SqList&L){=0;//memset(L,0,sizeof(L));returnOK;}//在顺序线性表L的第i个元素之前插入新的元素eStatusListInsert_Sq(SqList&L,inti,ElemTypee){ElemType*p;if(i<1||i>+1)returnERROR;if>={ElemType*newbase=(ElemType*)realloc,+LISTINCREMENT)*sizeof(ElemType));if(!newbase)returnERROR;=newbase;+=LISTINCREMENT;}ElemType*q=&[i-1]);for(p=&[]);p>=q;--p)*(p+1)=*p;*q=e;++;returnOK;}//在顺序线性表L中删除第i个元素,并用e返回其值StatusListDelete_Sq(SqList&L,inti,ElemType&e){ElemType*p,*q;if(i<1||i>returnERROR;p=&[i-1]);e=*p;q=+;for(++p;p<=q;++p)*(p-1)=*p;;returnOK;}//ListDelete_SqStatusLocateElem_Sq(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){//在顺序线性表L中查找第1个值与e满足compare()的元素的位序inti;ElemType*p;i=1;p=;while(i<=&&!(*compare)(*p++,e))++i;if(i<=returni;elsereturn0;}//打印顺序表voidPrintList_Sq(SqListL){inti;for(i=0;i<;i++)printf("%d",[i]);printf("\n");}intmain(){SqListLa;inti,n,e;printf("请输入元素个数:\n");scanf("%d",&n);if(InitList_Sq(La)){for(i=1;i<=n;i++){printf("请输入第%d个元素\n",i);scanf("%d",&e);ListInsert_Sq(La,i,e);}printf("-------------------------------------\n你输入的元素分别为:\n");PrintList_Sq(La);printf("-------------------------------------\n");}else{printf("初始化线性表出错!\n");printf("-------------------------------------\n");}printf("请输入你要插入的元素及插入的位置:\n");//插入元素scanf("%d%d",&e,&i);if(ListInsert_Sq(La,i,e)){printf("插入元素后线性表为:\n");PrintList_Sq(La);printf("-------------------------------------\n");}else{printf("输入位置有错!\n");printf("-------------------------------------\n");}/**/printf("请输入你要删除的元素的位置:\n");//删除元素scanf("%d",&i);if(ListDelete_Sq(La,i,e)){printf("你删除的元素为:%d,删除元素后线性表为:\n",e);PrintList_Sq(La);printf("-------------------------------------\n");}else{printf("输入位置有错!\n");printf("-------------------------------------\n");}printf("请输入你要查找的元素:\n");//查找元素scanf("%d",&e);if(i=LocateElem_Sq(La,e,cmp)){printf("你要查找的元素在第%d个位置。\n",i);printf("-------------------------------------\n");}else{printf("找不到这个元素:\n");printf("-------------------------------------\n");}if(ClearList_Sq(La))//清空线性表{printf("线性表已清空。\n");printf("--------------------------------------\n");}else{printf("线性表清空出错。\n");printf("--------------------------------------\n");}if(Destroy_Sq(La))//撤销线性表{printf("线性表已撤销。\n");printf("--------------------------------------\n");}else{printf("线性表清空出错。\n");printf("--------------------------------------\n");}return0;}2.编写程序完成下面的操作:(1)构造两个顺序线性表La和Lb,其元素都按值非递减顺序排列。(2)实现归并La和Lb得到新的顺序表Lc,Lc的元素也按值非递减顺序排列。(3)假设两个顺序线性表La和Lb分别表示两个集合A和B,利用union_Sq操作实现A=A∪B。#include<>#include<>#defineTRUE1#defineFALSE0#defineYES1#defineNO0#defineOK1#defineERROR0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;typedefintElemType;#defineLIST_INIT_SIZE100#defineLISTINCERMENT10typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;StatusInitList_Sq(SqList&L){//构造空的顺序表La=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!exit(OVERFLOW);=0;=LIST_INIT_SIZE;returnOK;}/**/StatusListInsert_Sq(SqList&L,inti,ElemTypee){//在顺序线性表L的第i个元素之前插入新的元素eElemType*p;if(i<1||i>+1)returnERROR;if>={ElemType*newbase=(ElemType*)realloc,+LISTINCERMENT)*sizeof(ElemType));if(!newbase)returnERROR;=newbase;+=LISTINCERMENT;}ElemType*q=&[i-1]);for(p=&[]);p>=q;--p)*(p+1)=*p;*q=e;++;returnOK;}StatusListDelete_Sq(SqList&L,inti,ElemType&e){//在顺序线性表L中删除第i个元素,并用e返回其值ElemType*p,*q;if(i<1||i>returnERROR;p=&[i-1]);e=*p;q=+;for(++p;p<=q;++p)*(p-1)=*p;;returnOK;}//ListDelete_SqStatuscmp(ElemTypea,ElemTypeb){if(a==b)returnYES;elsereturnNO;}StatusLocateElem_Sq(SqListL,ElemTypee,Status(*compare)(ElemType,ElemType)){//在顺序线性表L中查找第1个值与e满足compare()的元素的位序inti;ElemType*p;i=1;p=;while(i<=&&!(*compare)(*p++,e))++i;if(i<=returni;elsereturn0;}voidMergeList_Sq(SqListLa,SqListLb,SqList&Lc){//已知顺序线性表La和Lb的元素按值非递减排列。归并La和Lb得到新的顺序线性表Lc,Lc的元素也按值非递减排列。ElemType*pa,*pb,*pc,*pa_last,*pb_last;pa=;pb=;==+;pc==(ElemType*)malloc*sizeof(ElemType));if(!exit(OVERFLOW);//存储分配失败pa_last=+;pb_last=+;while(pa<=pa_last&&pb<=pb_last){//归并if(*pa<=*pb)*pc++=*pa++;else*pc++=*pb++;}while(pa<=pa_last)*pc++=*pa++;//插入La的剩余元素while(pb<=pb_last)*pc++=*pb++;//插入Lb的剩余元素}//MergeListvoidUnion_Sq(SqList&La,SqListLb){intlen1=;intlen2=;inti,pl;ElemTypee;//for(i=1;i<=len2;i++){pl=LocateElem_Sq(La,[i-1],cmp);if(pl==0) {ListInsert_Sq(La,++len1,[i-1]); }}len1=;for(i=0;i<len1;i++){if[i]==[i+1])ListDelete_Sq(La,i+2,e);}/*注意在原来La中,如果有重复也要删除到只剩下一个*/}voidPrintList_Sq(SqListL){inti;for(i=0;i<;i++)printf("%d",[i]);printf("\n");}intmain(){SqListLa,Lb,Lc;inti,n1,n2,e;printf("请输入La元素个数:\n");scanf("%d",&n1);if(InitList_Sq(La)){for(i=1;i<=n1;i++){printf("请输入La的第%d个元素!\n",i); scanf("%d",&e);ListInsert_Sq(La,i,e);}//printf("-------------------------------------\nLa的元素分别为:\n");//PrintList_Sq(La);printf("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 情侣买车合同协议书范本
- 骨质疏松医疗汇报健康知识培训
- 2025年ZRO2陶瓷制品合作协议书
- 肝炎中医护理查房
- 2025年注射剂类药品项目建议书
- 水稻中后期田间管理
- 网贷债务共享及风险管理合作协议
- 能源环保商业秘密许可及租赁服务合同
- 年度教育培训补充协议
- 虚拟偶像虚拟形象授权与商业合作合同
- 公司章程模板五篇
- 班级荣誉与成长模板
- IATF16949-2016体系管理质量手册(压铸铝合金)
- 超职数配备干部整改方案
- 3.1 歌曲《大海啊故乡》课件(17张)
- 古诗词诵读《客至》课件+2023-2024学年统编版高中语文选择性必修下册
- 中考模拟考试实施方案
- 上海市地方标准《办公楼物业管理服务规范》
- (部编版)统编版小学语文教材目录(一至六年级上册下册齐全)
- 四川省南充市2023-2024学年六年级下学期期末英语试卷
- 物理-陕西省2025届高三金太阳9月联考(金太阳25-37C)试题和答案
评论
0/150
提交评论