ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:383.06KB ,
资源ID:9038658      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9038658.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(顺序表的基本操作.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

顺序表的基本操作.docx

1、顺序表的基本操作实验题目顺序表的基本操作小组合作姓名班级学 号888888888一、实验目的实验(一)1.掌握顺序表的C语言描述,定义等基本操作2.将顺序表的基本操作使用C语言来实现二实验环境DevC+三、实验内容与步骤实验(一)内容:顺序表中是数据结构中的一种顺序存储结构,存储在相邻的内存单元中,其单元的地址是连续的,C语言中通常采用数组来表示顺序表数据的存储实现。顺序表作为一种抽象数据类型(ADT),有创建、添加,删除,查询等相关操作。表示顺序表时,采用结构体形式,结构体包含了顺序表的长度,数据域。(1) 创建一个顺序表,并对顺序表进行初始化(2) 对第1步创建好的顺序表,进行相关的操作步

2、骤:1 向顺序表中插入结点2 删除顺序表中的某个结点3 求顺序表的长度4 查询结点的位置5 清空顺序表四、实验过程与分析(一)用C语言编程实现以上操作1. 创建顺序表之前,先引入头文件、完成一些宏定义和定义一下顺序表:#include#include#define MAXSIZE 100#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int ElemType;typedef int Status;/定义顺序表为结构体类型 typedef struct Node ElemType *data;/数组指针形式表示数据

3、int len;/顺序表的长度 SqList;/结构体别名:SqList代替struct Node字样2. 为了便于更加直观的操作,先写一个函数,用来实现人机交互:void options() printf(*n); printf(【 1】置空顺序表n); printf(【 2】判断顺序表是否为空n); printf(【 3】求顺序表的长度n); printf(【 4】输出顺序表中第i个元素的值n); printf(【 5】获取顺序表中第一个与e相同的元素位置n); printf(【 6】获取元素的的直接前驱n); printf(【 7】获取元素的直接后继n); printf(【 8】插入元素

4、n); printf(【 9】删除顺序表的元素n); printf(【10】访问顺序表的元素n); printf(【11】输出顺序表n); printf(【12】退出n); printf(*n);3. 编写用于初始化顺序表,并对顺序表的数据进行初始化的操作:/构造一个新的顺序表 Status InitList(SqList *L) int i,n; L-data=(ElemType *)malloc(sizeof(ElemType)*MAXSIZE);/动态申请空间 if(!L-data)/如果申请的空间为空 printf(顺序表创建失败n); return ERROR; else L-len

5、=0; printf(顺序表初始化完成n); /对顺序表的数据进行初始化 printf(请输入要插入的元素个数:); scanf(%d,&n); printf(请输入元素:); for(i=0;idatai); L-len+; printf(数据初始化完毕nn);4. 置空线性表:Status ClearList(SqList *L) int i; if(L-len=0) printf(顺序表已空nn); return ERROR; for(i=L-len-1;i=0;i-) L-datai=-1; L-len-; printf(顺序表置空完毕n); return OK;5. 判断线性表是否为

6、空,如果为空返回TRUE,否则,返回FALSE:Status ListEmpty(SqList *L) if(L-len=0) return TRUE; else return FALSE; 6. 求线性表表长的函数:int ListLength(SqList *L) return L-len;7. 用e返回L中第i个元素的值void GetElem(SqList *L,int i,ElemType *e) if(iMAXSIZE) printf(下标越界nn); *e=-1; return; if(iL-len) printf(超出顺序表的范围nn); *e=-1; return; *e=L

7、-datai-1;8. 回L中第一个与e相同的元素位置int LocateElem(SqList *L,ElemType *e) int i; int loc=0; for(i=0;ilen;i+) if(L-datai=*e)/如果找到元素了 loc=i+1; break; if(i=L-len) printf(顺序表中没有找到该元素nn); loc=-1; return loc; else return loc; 9. 如果e不是第一个元素,则返回L中e的直接前驱元素 Status PriorElem(SqList *L,ElemType *e) int i; if(*e=L-data0)

8、 printf(元素%d是第一个元素,没有直接前趋nn); *e=-1; return ERROR; /说明e不是第一个元素 for(i=1;ilen;i+) if(L-datai=*e)/说明元素的直接后继是e *e=L-datai-1; printf(元素%d的直接前驱是%dnn,L-datai,*e); break; if(i=L-len) printf(顺序表中没有该元素nn); *e=-1; return ERROR; return OK;10. 如果e不是最后一个元素,则返回L中e的直接后继元素Status NextElem(SqList *L,ElemType *e) int i

9、; /e是最后一个元素 if(*e=L-dataL-len-1) printf(元素%d为最后一个元素,无直接后继nn,*e); return ERROR; for(i=0;ilen-1;i+) if(L-datai=*e) *e=L-datai+1; printf(元素%d的直接后继是%dnn,L-datai,*e); break; if(i=L-len-1) printf(顺序表中没有元素%dnn,*e); return ERROR; return OK; 11. 在顺序表的i个位置插入元素eStatus ListInsert(SqList *L,int loc,ElemType *e)

10、int i; if(locMAXSIZE) printf(下标越界nn); return ERROR; if(locL-len+1) printf(下标超出顺序表长度nn); return ERROR; if(loc=L-len) L-dataloc-1=*e; L-len+; printf(元素插入成功nn); return OK; for(i=L-len;i=loc;i-) L-datai=L-datai-1; L-datai=*e; L-len+; printf(元素插入成功nn); return OK;12. 删除顺序表的第loc个元素,并用e返回Status ListDlete(Sq

11、List *L,int loc,ElemType *e) int i; if(locMAXSIZE) printf(下标越界nn); return ERROR; if(locL-len) printf(下标超出顺序表长度nn); return ERROR; *e=L-dataloc-1; for(i=loc;ilen;i+) L-datai-1=L-datai; L-len-; printf(删除的元素是:%dnn,*e); return OK; 13. 访问顺序表的第loc个元素Status ListTraverse(SqList *L,int loc) if(locMAXSIZE) pri

12、ntf(下标越界nn); return ERROR; if(locL-len) printf(下标超出顺序表长度nn); return ERROR; printf(顺序表的第%d个元素是:%dnn,loc,L-dataloc-1); return OK; 14. 输出顺序表的元素void print(SqList *L) int i; if(iMAXSIZE) printf(顺序表为空nn); return; for(i=0;ilen;i+) printf(%d ,L-datai); printf(n顺序表输出完毕nn);15. 最后,在main函数中调用相关的操作函数:int main(vo

13、id) SqList *L; int select,i,loc,flag; ElemType e=-1; L=(SqList *)malloc(sizeof(SqList); InitList(L); while(1) options(); printf(请输入你的选择:); scanf(%d,&select); if(select=12) break; switch(select) case 1: ClearList(L); break; case 2: flag=ListEmpty(L); if(flag=TRUE) printf(顺序表为空nn); else printf(顺序表不为空n

14、n); break; case 3: i=ListLength(L); printf(顺序表中有%d个元素nn,i); break; case 4: printf(请输入查找的元素的位置:); scanf(%d,&loc); GetElem(L,loc,&e); if(e!=-1) printf(该位置的元素值是:%dnn,e); break; case 5: printf(请输入要查找的元素:); scanf(%d,&e); i=LocateElem(L,&e); if(i!=0&i!=-1) printf(元素的位置为:%dnn,i); break; case 6: printf(请输入元

15、素的值:); scanf(%d,&e); PriorElem(L,&e); break; case 7: printf(请输入元素的值:); scanf(%d,&e); NextElem(L,&e); break; case 8: printf(请输入插入的元素的位置:); scanf(%d,&loc); printf(请输入要插入的元素:); scanf(%d,&e); ListInsert(L,loc,&e); break; case 9: printf(请输入要删除的元素的位置:); scanf(%d,&loc); ListDlete(L,loc,&e); break; case 10:

16、 printf(请输入位置loc:); scanf(%d,&loc); ListTraverse(L,loc); break; case 11: print(L); break; default: break; return 0;(二)、程序运行截图1.编译运行上述程序:2.输入5个数,分别为1,2,3,4,53.求线性表是否为空:4.求线性表的长度:5.输出顺序表的第4个元素:6.输出第一次出现元素3的位置:7.向线性表中插入一个元素:8.删除元素4,并输出9.输出线性表的元素:10.在线性表的-1位置插入数据:11.清空线性表的所有元素五、实验总结1. 由于线性表是采用的是数组存储,因此,在第i个位置添加或删除一个元素时,需要移动n-i个位置,其时间复杂度为O(n)2. 顺序表的删除并非真正意义的删除,由于数组的特殊原因,只是显示的一种“假象”,如果采用动态的扩展空间,可以实现真正意义的释放空间3. 采用结构体时,访问成员,一般采用结构体变量名.成员变量名4. 采用结构体指针,访问变量,采用结构体变量名-成员变量名5. 编写相关的数据结构算法时,要注意下标小于0和指针指向为空或者下标越界等常见问题。6. 顺序表的插入、删除的时间复杂度是O(n),而访问某个元素的时间复杂度是O(1),输出所有元素的时间复杂度也是O(n).

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1