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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构上机报告编写一个程序实现单链表的各种基本运算.docx

1、数据结构上机报告编写一个程序实现单链表的各种基本运算数据结构上机报告姓名 赵颖 学号 2009114121 专业 信息与计算科学1. 实验题目及要求编写一个程序,实现单链表的各种基本运算2. 需求分析建立一个单链表,实现单链表的初始化,插入、删除节点等功能,以及确定某一元素在单链表中的位置。(1) 初始化单链表;(2) 依次采用尾插入法插入a,b,c,d,e元素;(3) 输出单链表L;(4) 输出单链表L的长度;(5) 判断单链表L是否为空;(6) 输出单链表L的第三个元素;(7) 输出元素a的位置;(8) 在第4个元素位置上插入f元素;(9) 输出单链表L;(10) 删除L的第3个元素;(1

2、1) 输出单链表L;(12) 释放单链表。3. 概要设计(1) 为了实现上述程序功能,需要定义一个简化的线性表抽象数据类型:ADT LinearList 数据对象:D= ai|aiIntegerSet,i=0,1,2,n,n0 结构关系:R=|ai,ai+1 D 基本操作: InitList_L(L) 操作前提:L是一个未初始化的线性表 操作结果:将L初始化为一个空的线性表 CreateList_L(L) 操作前提:L是一个已初始化的空表 操作结果:建立一个非空的线性表L ListInsert_L(L,pos,e) 操作前提:线性表L已存在 操作结果:将元素e插入到线性表L的pos位置 Lis

3、tDelete_L(L,pos,e) 操作前提:线性表L已存在 操作结果:将线性表L中pos位置的元素删除,删除的元素值通过e返回 LocateList_L(L,e) 操作前提:线性表L已存在 操作结果:在线性表L中查找元素e,若存在,返回元素在表中的序号位置;若不存在,返回-1 DestroyList_L(&L) 初始条件:线性表L已存在 操作结果:销毁线性表 ListEmpty_L(L) 初始条件:线性表已存在 操作结果:若L为空表,则返回ERROR,否则返回FALSE ListLength_L(L) 初始条件:线性表L已存在 操作结果:返回L中数据元素个数 GetElem_L(L,I,&

4、e) 初始条件:线性表L已存在 操作结果:用e返回L中第i个数据元素值(2) 本程序包含10个函数: 主函数main() 初始化单链表函数InitList_L() 显示单链表内容函数DispList_L() 插入元素函数ListInsert_L() 删除元素函数ListDelete_L() 查找元素函数LocateList_L() 创建链表函数CreateList_L() 链表元素长度函数ListLength_L() 判断链表是否为空函数ListEmpty_L() 取值函数GetElem_L()各函数间调用关系如下:( 3 ) 主函数的伪码main() 说明一个单链表 L ;初始化 L ; 建

5、立 L ; 显示 L ;4. 详细设计采用单链表实现概要设计中定义的抽象数据类型,有关的数据类型和伪码算法定义如下:(1) 类型定义typedef int ElemType;typedef struct LNode ElemType data; /数据域 struct LNode *next; /指针域 LNode,* LinkList;(2) 基本操作的伪码算法 初始化Bool InitLinkList(LinkList *L) *L=申请新结点; 如果申请失败,返回失败标志; (*L)-next=NULL; 返回成功标志; 建立单链表Bool CrtLinkList(LinkList L)

6、/* L是已经初始化好的空链表的头指针,通过键盘输入元素值,利用尾插法建单链表L */ rear=L; 打印输入提示:“请输入若干个正整数(用空格分隔),并用 -1 结束:”读入一个数x;当x不是结束标志时,循环做如下处理: 申请一个新结点s;如果申请失败,返回失败标志;将x送到s的data域;rear-next=s;rear=s;读入下一个数x;rear-next=NULL;返回成功标志; 显示单链表(输出)void DispLinkList(LinkList L)p=首元素结点地址; while ( p不空 ) 打印结点p 的元素值;p=下一个结点地址; 插入操作bool InsLinkL

7、ist(LinkList L, int pos, ElemType e)/*在带头结点的单链表L中第pos个位置插入值为e的新结点s*/ 从“头”开始,查找第i-1个结点 pre ;if (查找失败) 显示参数错误信息; return ERROR; else 申请一个新的结点s ; 将e放入s的数据域; 将s 插到pre 后面;return OK; 删除操作bool DelLinkList(LinkList L, int pos, ElemType *e)/* 在带头结点的单链表L中删除第pos个元素,并将删除的元素保存到变量*e中 */ 查找待删除结点i的前驱结点,并用pre指向它;if (

8、查找失败) 显示参数错误信息; return ERROR; elser=pre-next;修改指针,删除结点r ;释放被删除的结点所占的内存空间;return OK; 查找操作int LocLinkList(LinkList L, ElemType e)/ * 在带头结点的单链表L中查找其结点值等于e的结点,若找到则返回该结点的序号位置k,否则返回 -1 * / p=首元素结点地址; while ( p不空 ) if (p-data!=e) p=p-next; k+; else break; if ( p 不空 ) return k; else return -1; 5. 调试分析开始运行时会

9、出现Debug Error,DAMAGE: After Normal block, 搜索后了解到是内存越界操作,检查后发现内存分配L和S=(LinkList)malloc(sizeof(LNode)写成了=(LinkList)malloc(sizeof(LinkList),修改后正常。6. 使用说明程序执行后,界面直接输出要求的结果7. 测试结果8. 附件#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define NULL 0typedef int Status;typedef int Elem

10、Type;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;Status InitList_L(LinkList &L) /初始化线性表 L=(LinkList )malloc(sizeof(LNode); /L指向头节点,头节点数据域为空 L-next=NULL; return OK;/ InitList_LStatus DispList_L(LinkList &L) /输出线性表 LinkList p=L-next; while(p!=NULL) printf(%c,p-data); p=p-nex

11、t; return OK; / DispList_LStatus CreateList_L(LinkList &L,ElemType a,int n) /尾插法建表 LinkList s,r;int i; L=(LinkList )malloc(sizeof(LNode); r=L; for(i=0;idata=ai; r-next=s; r=s; r-next=NULL; return OK;/ CreateList_LStatus ListLength_L(LinkList L) /求线性表的长度 LinkList p=L;int n=0; while(p-next!=NULL) n+;

12、p=p-next; return(n);/ ListLength_LStatus ListEmpty_L(LinkList L) /判断单链表是否为空 return(L-next=NULL);/ ListEmpty_LStatus DestroyList_L(LinkList &L) /销毁线性表 LinkList p=L,q=p-next; while(q!=NULL) free(p); p=q; q=p-next; free(p); return OK;/ DestroyList_LStatus GetElem_L(LinkList L, int i, ElemType &e) / L为带

13、头节点的单链表的头指针。 / 当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR int j=0; LinkList p=L; while(jnext; if(p=NULL) return ERROR; else e=p-data; return OK; / GetElem_LStatus ListInsert_L(LinkList &L, int i, ElemType e) /插入数据元素 int j=0; LinkList p=L,s; /* 找到插入节点的上一个元素,如果是头节点则退出,当i=1时表示头节点,i=2时,表示第一个元素 */ while(jnext; if(p=

14、NULL) return ERROR; else s=(LinkList )malloc(sizeof(LNode); s-data=e; s-next=p-next; p-next=s; return OK; / ListInsret_LStatus ListDelete_L(LinkList &L, int i, ElemType &e) /删除数据元素 int j=0; LinkList p=L,q; while(jnext; if(p=NULL) return ERROR; else q=p-next; /q为要删除的元素节点 if(q=NULL) return ERROR; e=q-

15、data; /e为删除节点的数据区域 p-next=q-next; free(q); return OK; / ListDelete_Lint LocateElem_L(LinkList L, ElemType e) /按元素值查找元素 LinkList p=L-next; int i=1; while(p!=NULL&p-data!=e) p=p-next;i+; /如果要插入的节点为头节点,则退出 if(p=NULL) return ERROR; else return(i); / LocateElem_Lint main() ElemType e,a5=a,b,c,d,e; LinkLi

16、st L; printf(1)初始化单链表Ln); InitList_L(L); /初始化单链表L printf(2)依次采用尾插法插入a,b,c,d,e元素n); CreateList_L(L,&a0,5); /依次采用尾插入法插入a,b,c,d,e元素 printf(3)输出单链表L:); DispList_L(L); /输出单链表L printf(n); printf(4)单链表L的长度为:); printf(%d,ListLength_L(L); /输出单链表L的长度 printf(n); if(ListEmpty_L(L) printf(5)该单链表为空n); else printf

17、(5)该单链表不为空n); /判断单链表L是否为空 GetElem_L(L,3,e); printf(6)单链表L的第三个元素为:); printf(%c,e); printf(n); /输出单链表L的第3个元素 printf(7)单链表L中a的位置为:); printf(%d,LocateElem_L(L,a); /输出元素a的位置 printf(n); ListInsert_L(L,4,f); /在第4个元素位置插入f元素 printf(8)在第4个元素位置上插入 f 元素n); printf(9)输出单链表L:); DispList_L(L); /输出单链表L printf(n); ListDelete_L(L,3,e); /删除L的第3个元素 printf(10)删除L的第3个元素n); printf(11)输出单链表L:); /输出单链表L DispList_L(L); printf(n); printf(12)释放单链表Ln); DestroyList_L(L); /释放单链表L return 0;

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

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