




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上精选优质文档-倾情为你奉上专心-专注-专业专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业实验名称 顺序表的基本操作实验日期2019.9.23实验成绩1、实验目的: 1掌握线性表的顺序存储结构的表示和实现方法。2掌握顺序表基本操作的算法实现。3了解顺序表的应用。2、实验内容: 编写一个程序,实现顺序表的各种基本运算(假设顺序表的元素类型为 char),并在此基础上设计一个主程序完成如下功能:(1)初始化顺序表 L;(2)依次采用尾插法插入 a、b、c、d、e 元素;(3)输出顺序表 L;(4)输出顺序表 L 的长度;(5)判断顺序表 L 是否为空;(6)输出
2、顺序表 L 的第 3 个元素;(7)输出元素 a 的位置(8)在第 4 个元素位置上插入 f 元素(9)输出顺序表 L;(10)删除 L 的第 3 个元素;(11)输出顺序表 L;(12)释放顺序表 L。3、核心算法或代码片段:核心算法:1顺序表插入操作的基本步骤:要在顺序表中第 i 个数据元素之前插入一个数据元素 x,首先要判断插入位置 i 是否合法,假设线性表的长为 n,则 i 的合法值范围: 1in+1,若是合法位置,就再判断顺序表否满,如果满,则增加空间或结束操作,如果不满,则将第 i 个数据元素及其之后的所有数据元素都后移一个位置,此时第 i 个位置已经腾空,再将待插入的数据元素 x
3、 插入到该位置上,最后将线性表的长增加 1。2顺序表删除操作的基本步骤:要删除顺序表中第 i 个数据元素,首先仍然要判断 i 的合法性, i 的合法范围是 1in,若是合法位置,则将第 i 个数据元素之后的所有数据都前移一个位置,最将线性表长减 1。3顺序表查找操作的基本步骤:要在顺序表中查找一个给定值的数据元素则可以采用顺序查找的方法,从表中第 1 个数据元素开始依次将值与给定值进行比较,若相等则返回该数据元素在顺序表中的位置,否则返回 0 值。线性表的动态分配顺序存储结构C语言实现#define MaxSize 50/存储空间的分配量Typedef char ElemType;Typede
4、f struct ElemType dataMaxSize; int length; /表长度(表中有多少个元素)SqList;动态创建一个空顺序表的算法:void InitList(SqList *&L) /初始化线性表 L=(SqList *)malloc(sizeof(SqList); /分配存放线性表的空间 L-length=0; /置空线性表长度为0线性表的插入:status Sqlist_insert(Sqlist &L,int i,Elemtype x) /*在顺序表L中第i个元素前插入新元素x*/ if (iL.length+1) return ERROR; /*插入位置不正确
5、则出错*/ if (L.length=MAXLEN)return OVERFLOW; /*顺序表L中已放满元素,再做插入操作则溢出*/for(j=L.length-1;j=i-1;j-) L.elemj+1=L.elemj; /*将第i个元素及后续元素位置向后移一位*/L.elemi-1=x; /*在第i个元素位置处插入新元素x*/L.length+; /*顺序表L的长度加1*/return OK;线性表的删除:status Sqlist_delete(Sqlist &L,int i,Elemtype &e) /*在顺序表L中删除第i个元素* if (iL.length) return ERR
6、OR; /*删除位置不正确则出错*/ for(j=i;j=L.length-1;j+) L.elemj-1=L.elemj; /*将第i+1个元素及后继元素位置向前移一位*/ L.length-;/*顺序表L的长度减1*/ return OK;线性表元素的查找:int LocateElem(SqList *L, ElemType e) /按元素值查找 int i=0; while (ilength & L-datai!=e) i+; /查找元素e if (i=L-length) /未找到时返回0 return 0; else return i+1; /找到后返回其逻辑序号输出线性表:void
7、DispList(SqList *L) /输出线性表 int i; if (ListEmpty(L) return; for (i=0;ilength;i+) printf(%c ,L-datai); printf(n);输出线性表第i个元素的值:bool GetElem(SqList *L,int i,ElemType &e)/求线性表中某个数据元素值 if (iL-length) return false; /参数错误时返回false e=L-datai-1; /取元素值 return true; /成功找到元素时返回true代码:#include #include #define Max
8、Size 50typedef char ElemType;typedef struct ElemType dataMaxSize; int length; SqList;void InitList(SqList *&L);void DestroyList(SqList *L);bool ListEmpty(SqList *L);int ListLength(SqList *L);void DispList(SqList *L);bool GetElem(SqList *L,int i,ElemType &e);int LocateElem(SqList *L, ElemType e);bool
9、 ListInsert(SqList *&L,int i,ElemType e);bool ListDelete(SqList *&L,int i,ElemType &e);void InitList(SqList *&L)/初始化线性表L=(SqList *)malloc(sizeof(SqList);/分配存放线性表的空间L-length=0;/置空线性表长度为0void DestroyList(SqList *L)/销毁线性表free(L);bool ListEmpty(SqList *L)/判线性表是否为空表return(L-length=0);int ListLength(SqLis
10、t *L)/求线性表的长度return(L-length);void DispList(SqList *L)/输出线性表int i;if (ListEmpty(L) return;for (i=0;ilength;i+)printf(%c ,L-datai);printf(n);bool GetElem(SqList *L,int i,ElemType &e)/求线性表中某个数据元素值if (iL-length)return false;/参数错误时返回falsee=L-datai-1;/取元素值return true;/成功找到元素时返回trueint LocateElem(SqList *
11、L, ElemType e)/按元素值查找int i=0;while (ilength & L-datai!=e)i+;/查找元素eif (i=L-length)/未找到时返回0return 0;elsereturn i+1;/找到后返回其逻辑序号bool ListInsert(SqList *&L,int i,ElemType e)/插入数据元素int j;if (iL-length+1)return false;/参数错误时返回falsei-;/将顺序表逻辑序号转化为物理序号for (j=L-length;ji;j-)/将datai及后面元素后移一个位置L-dataj=L-dataj-1;
12、L-datai=e;/插入元素eL-length+;/顺序表长度增1return true;/成功插入返回truebool ListDelete(SqList *&L,int i,ElemType &e)/删除数据元素int j;if (iL-length)/参数错误时返回falsereturn false;i-;/将顺序表逻辑序号转化为物理序号e=L-datai;for (j=i;jlength-1;j+)/将datai之后的元素前移一个位置L-dataj=L-dataj+1;L-length-;/顺序表长度减1return true;/成功删除返回truevoid main()SqList
13、 *L;ElemType e;printf(顺序表的基本运算如下:n);printf( (1)初始化顺序表Ln);InitList(L);printf( (2)依次采用尾插法插入a,b,c,d,e元素n);ListInsert(L,1,a);ListInsert(L,2,b);ListInsert(L,3,c);ListInsert(L,4,d);ListInsert(L,5,e);printf( (3)输出顺序表L:);DispList(L);printf( (4)顺序表L长度=%dn,ListLength(L);printf( (5)顺序表L为%sn,(ListEmpty(L)?空:非空);GetElem(L,3,e);printf( (6)顺序表L的第3个元素=%cn,e);printf( (7)元素a的位置=%dn,LocateElem(L,a);printf( (8)在第4个元素位置上插入f元素n);ListInsert(L,4,f);printf( (9)输出顺序表L:);DispList(L);printf( (10)删除L的第3个
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年的购房定金合同模板
- 2025电子产品购销合同范文模板
- 2025农业合作经营合同
- 2025年大坝加固工程合同管理与风险评估研究
- 2025企业采购专项法律服务合同
- 房屋中介服务居间合同书
- 二零二五合同付款补充协议
- 二零二五股东转让协议范例
- 房地产买卖合同书样式
- 电子商务的电子合同书与电子签名
- GB/T 15593-2020输血(液)器具用聚氯乙烯塑料
- GB 16410-2007家用燃气灶具
- 铁碳合金的相图解读
- 2023年复旦大学博士研究生入学考试专家推荐信模板
- 中小学教师资格证面试课件讲义
- 全国初中英语优质课大赛一等奖《八年级Unit 6An old man》说课课件
- 云南省饮用水生产企业名录534家
- 湖北地区医院详细名单一览表
- 麦肯锡入职培训第一课:让职场新人一生受用的逻辑思考力新员工培训教材
- 苏霍姆林斯基教育思想-PPT课件
- 金属压铸机的plc控制
评论
0/150
提交评论