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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

线性表的存储结构定义及基本操作实验报告600724何俊林Word下载.docx

1、依次对L的每个数据元素进行输出;. “销毁算法”初始条件:销毁顺序线性表 L;. “置空表算法”初始条件:将L重置为空表;. “求表长算法”初始条件:返回L中数据元素个数;. “按序号查找算法”初始条件:顺序线性表 L 已存在,元素位置为 i,且 1iListLength(L) 操作结果:返回 L 中第 i 个数据元素的值. “按值查找算法”初始条件:顺序线性表 L 已存在,元素值为 e;返回 L 中数据元素值为 e 的元素位置;. “判表空算法”初始条件:顺序线性表 L 已存在;若 L 为空表,则返回 TRUE,否则返回 FALSE;分析:修改输入数据,预期输出并验证输出的结果,加深对有关算

2、法的理解。(二) 基本实验内容(单链表): 建立单链表,完成链表(带表头结点)的基本操作:建立链表、插入、删除、查找、输出、求前驱、求后继、两个有序链表的合并操作。其他基本操作还有销毁链表、将链表置为空表、求链表的长度、获取某位置结点的内容、搜索结点。利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作:. 初始化一个带表头结点的空链表;. 创建一个单链表是从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相互链接的关系。又分为逆位序(插在表头)输入 n 个元素的值和正位序(插在表尾)输入 n 个元素的值;. 插入结点可以根据给定位置进行插入(

3、位置插入),也可以根据结点的值插入到已知的链表中(值插入),且保持结点的数据按原来的递增次序排列,形成有序链表。. 删除结点可以根据给定位置进行删除(位置删除),也可以把链表中查找结点的值为搜索对象的结点全部删除(值删除);. 输出单链表的内容是将链表中各结点的数据依次显示,直到链表尾结点;其它的操作算法描述略。2. 实现要求:对链表的各项操作一定要编写成为 C(C+) 语言函数,组合成模块化的形式,还要针对每个算法的 实现从时间复杂度和空间复杂度上进行评价。构造一个空的线性表 L,产生头结点,并使 L 指向此头结点;. “建立链表算法”初始条件:空链存在;选择逆位序或正位序的方法,建立一个单

4、链表,并且返回完成的结果;. “链表(位置)插入算法”初始条件:已知单链表 L 存在;在带头结点的单链线性表 L 中第 i 个位置之前插入元素 e;. “链表(位置)删除算法”初始条件:在带头结点的单链线性表 L 中,删除第 i 个元素,并由 e 返回其值;. “输出算法”初始条件:链表 L 已存在;依次输出链表的各个结点的值;(三) 扩展实验内容(顺序表) 查前驱元素、查后继元素、顺序表合并等. 根据给定元素的值,求出前驱元素;. 根据给定元素的值,求出后继元素;. 对已建好的两个顺序表进行合并操作,若原线性表中元素非递减有序排列,要求合并后的结果还是有序(有序合并);对于原顺序表中元素无序

5、排列的合并只是完成 A=AB (无序合并),要求同样的数据元素只出现一次。. 修改主程序,实现对各不同的算法调用。. “查前驱元素算法”初始条件:若数据元素存在且不是第一个,则返回前驱,否则操作失败;. “查后继元素算法”初始条件:若数据元素存在且不是最后一个,则返回后继,否则操作失败;. “无序合并算法”的初始条件:已知线性表 La 和 Lb;将所有在线性表 Lb 中但不在 La 中的数据元素插入到 La 中;. “有序合并算法”的初始条件:已知线性表 La 和 Lb 中的数据元素按值非递减排列;归并 La 和 Lb 得到新的线性表 Lc,Lc 的数据元素也按值非递减排列;(四) 扩展实验内

6、容(链表). 求前驱结点是根据给定结点的值,在单链表中搜索其当前结点的后继结点值为给定的值,将当前结点返回;. 求后继结点是根据给定结点的值,在单链表中搜索其当前结点的值为给定的值,将后继结点返回;. 两个有序链表的合并是分别将两个单链表的结点依次插入到第 3 个单链表中,继续保持结点有序;. “求前驱算法”初始条件:线性表 L 已存在;若 cur_e 是 L 的数据元素,且不是第一个,则用 pre_e 返回它的前驱;. “求后继算法”初始条件:若 cur_e 是 L 的数据元素,且不是最后一个,则用 next_e 返回它的后继;. “两个有序链表的合并算法”初始条件: 线性表单链线性表 La

7、 和 Lb 的元素按值非递减排列;归并 La 和 Lb 得到新的单链表。三、 实验环境和实验步骤实验环境:利用CodeBlocks10.05集成开发环境进行本实验的操作。实验步骤顺序表的定义与操作:1.启动CodeBlocks10.5;2.按“Create a new project”, 通过”file”, 按“C/C+ source”,选择”c”,然后GO.储存文件“D:c语言顺序表.c “,3.进行编代码。4、编好之后,搞ctrl+shift+F9进行编译。然后按ctrl+F10.5.如果编译出问题,然后进行调试。实验步骤链表的定义与操作:c语言单链表.c “,四、 实验分析顺序表代码如下

8、:#include #include stdlib.hmalloc.h#define LIST_INIT_SIZE 100#define ok 1#define ERROR 0#define OVERFLOW -1#define Num 3typedef int DataType;typedef int Status;typedef struct DataType *elem; int Length; int Listsize;SeqList;SeqList L;Status InitSeqList(SeqList *L) L-elem=(DataType*)malloc(LIST_INIT_

9、SIZE*sizeof(DataType); if(!L-elem) exit(OVERFLOW);Length=0;Listsize=LIST_INIT_SIZE; return ok;Status InsertSeqList(SeqList *L,int i,DataType e) DataType *q,*p; if(iLength+1) return ERROR; else if(L-Length=L-Listsize) printf(TheSeqList is full!); q=L-elem+i-1; for(p=L-elem+L-Length-1;p=q;-p) *(p+1)=*

10、p; *q=e; +L-Length;int DeleteSeqList(SeqList *L,int i) int j;Length)the i number is not exist! for(j=i-1;jelem+j)=*(L-elem+j+1);Length-;/void SearchSeqList(SeqList *L, DataType x)void SearchSeqList(SeqList *L,int x) int j=0; while (jelem+j)!=x) j+; if(jerror运行结果%d,j+1);void PrintfSeqList(SeqList *L)

11、 Printf(运行结果: int i; for (i=0;ielem+i);void LenSeqList(SeqList *L) int i=0,*j; for(j=L-elem; i+;n 元素个数为:,i);void PriorSeqLement(SeqList *L,int i) int *j;输入有误 else if(i=1)无前驱 else j=L-elem+i-2;运行结果:,*j);Status NextSeqElement(SeqList *L,int i) int*j;1|L-无后继elem+i;void ListSeqEmpty(SeqList *L)Length=0)

12、书序表为空 else printf(顺序表非空Status ChangSeqList(SeqList *L) int i,j,q; for(i=0,j=L-Length/2;i+,j-) q=*(L-elem+i);elem+i)=*(L-elem+j);elem+j)+q;Status ClearSeqList(SeqList *L)void DestorySeqList(SeqList *L) free(L);Listsize=0;void main() SeqList *LA=&L; int i,e,j,x,k,m,*p,q=0; InitSeqList(&L);输入元素: for(p=

13、LA-qLength+;PrintfSeqList(&printf(n 输入要插入元素的位置和元素:scanf(%d,%d,&i,&e);InsertSeqList(LA,i,e);n 输入要删除元素的位置:j);DeleteSeqList(&L,j);n 输入要查找的值:x);SearchSeqList(&L,x);n 输入元素求其前驱:k);PriorSeqList(&L,k);n 输入元素求其后继:m);NextSeqList(&L,m);n 求表长:LenSeqList(&/判断表是否为空n判断表是否为空:nListSeqEmpty(&逆转:ChangSeqList(&置空表:Clea

14、rSeqList(&销毁:DestorySeqList(&单链表代码:/ List.hfstreamusing namespace std;typedef int ElemType ;typedef struct student ElemType n; struct student *next;Student,*SListLink;class SListpublic: SList(); /建立一个空链表 * void CreateSList(); /建立链表* void ClearSList(); /将链表重置为空链表* ElemType SListLength(); /返回链表中的长度* b

15、ool SListEmpty(); /判断链表是否为空链表* ElemType GetElem(); /返回链表的一个元素* void SortElem(); /对链表排序 void SListInsert(); /插入一个元素* void SListDelete(); /删除一个元素* bool SlistDeleteSame(); /删除相同的元素 void ShowSList(); /显示一个链表* void FileSave(); /写入文件 void FileRead(); /从文件打开 void FileDelete(); /从文件删除 void FileCheck(); /查看文

16、件内容 SList(); /销毁链表private: SListLink head; SListLink p; SListLink q; SListLink temp; int slistlength;SList:SList() /建立一个空链表 head=p=q=temp=NULL; slistlength=0;void SList:CreateSList() /建立链表 if (head=NULL) ElemType m; coutm; if (m0) head=q=p=temp=new Student; q-n=m; +slistlength; while (m!=0&m=0) if (

17、m! p=new Student; p-next=p; q=p;next=NULL;链表创建成功 /没有输出? head=p=q=NULL;你已经创建过新链表了int SList:SListLength() /返回链表中的长度链表中的元素个数是:slistlength=m) int indx=1; p=head; while(1) if (m=indx)链表返回你查找的数:head-nn; p=p-next; +indx;p- return p-序号超出链表范围 return -1;不允许非法输入此链表是空链表bool SList:SListEmpty() /判断链表是否为空链表此链表不是空链表 return false; return true;SlistDeleteSame() /删除链表中相同元素删除链表中相同元素的节点,请输入一个要删除的数:这是一个空链表SortElem() /对链表排序 for (p=head;p!=NULL;p=p-next) temp=p; for (q=p-q!q=q- if (q-n=temp-n) temp=q; if (temp!=p) ElemType t=p-n=temp- temp-n=t;排序成功此链表是空链表,不能进行此操作ClearSList() /将链表重置为空表

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

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