数据结构单链表实验报告.doc

上传人:小** 文档编号:3018720 上传时间:2020-06-22 格式:DOC 页数:8 大小:61.02KB
返回 下载 相关 举报
数据结构单链表实验报告.doc_第1页
第1页 / 共8页
数据结构单链表实验报告.doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《数据结构单链表实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构单链表实验报告.doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、*-洛阳理工学院实验报告系别计算机系班级 学号姓名课程名称数据结构实验日期11.7实验名称链表的基本操作成绩实验目的:熟悉掌握线性表链式存储结构,掌握与应用查找、插入、删除等基本操作算法,训练和提高结构化程序设计能力及程序调试能力。实验条件:计算机一台,Visual C+6.0实验内容:1. 问题描述以单链表为存储结构实现以下基本操作:(1) 在第i个元素前插入一个新元素。(2) 查找值为x的某个元素。若成功,给出x在表中的位置;不成功给出提示信息。(3) 删除第i个元素,若成功,给出提示信息并显示被删元素的值;不成功给出失败的提示信息。2. 数据结构类型定义typedef struct Li

2、nkNodeint Value;struct LinkNode * Next;Node,*LinkList;3. 模块划分(1)初始化链表:void InitList(LinkList * L);(2)创建链表:尾插法:int CreateFromTail(LinkList L); (3)在指定位置插入元素:int InsList(LinkList L,int i,int e); (4)在指定位置删除元素:int DelList(LinkList L,int i,int *e); 返回值说明:返回ERROR插入失败,返回OK插入成功; (5)按位置查找链表元素:int GetList(Link

3、List L,int i,int *e);4. 详细设计void init_linklist(LinkList *l)/*对单链表进行初始化*/*l=(LinkList)malloc(sizeof(Node); /*申请结点空间*/(*l)-next=NULL; /*置为空表*/void CreateFromHead(LinkList L) Node *s;char c;int flag=1; while(flag) /* flag初值为1,当输入$时,置flag为0,建表结束*/c=getchar(); if(c!=$)s=(Node*)malloc(sizeof(Node); /*建立新结

4、点s*/s-data=c;s-next=L-next;/*将s结点插入表头*/L-next=s;elseflag=0;void CreateFromTail(LinkList L) Node *r, *s;char c;int flag =1; /*设置一个标志,初值为1,当输入$时,flag为0,建表结束*/r=L; /*r指针动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/while(flag) /*循环输入表中元素值,将建立新结点s插入表尾*/c=getchar();if(c!=$)s=(Node*)malloc(sizeof(Node);s-data=c;r-next=s;

5、r=s;elseflag=0;r-next=NULL; /*将最后一个结点的next链域置为空,表示链表的结束*/ Node * Get (LinkList L, int i)/*在带头结点的单链表L中查找第i个结点,若找到(1in),则返回该结点的存储位置; 否则返回NULL*/ int j;Node *p;p=L;j=0; /*从头结点开始扫描*/ while (p-next!=NULL)&(jnext; /* 扫描下一结点*/j+; /* 已扫描结点计数器 */if(i = j)return p; /* 找到了第i个结点 */else return NULL; /* 找不到,i0或in

6、*/ Node *Locate( LinkList L,ElemType key)/*在带头结点的单链表L中查找其结点值等于key的结点,若找到则返回该结点的位置p,否则返回NULL*/ Node *p;p=L-next; /*从表中第一个结点开始 */while (p!=NULL)if (p-data!=key)p=p-next; else break; /*找到结点值=key时退出循环 */return p; int InsList(LinkList L,int i,ElemType e)/*在带头结点的单链表L中第i个位置插入值为e的新结点s*/ Node *pre,*s;int k;p

7、re=L; k=0; /*从头开始,查找第i-1个结点*/while(pre!=NULL&knext;k=k+1; /*查找第i-1结点*/if(!pre) /*如当前位置pre为空表已找完还未数到第i个,说明插入位置不合理*/ printf(插入位置不合理!);return ERROR;s=(Node*)malloc(sizeof(Node); /*申请一个新的结点S */s-data=e; /*值e置入s的数据域*/s-next=pre-next;/*修改指针,完成插入操作*/pre-next=s;return OK;int DelList(LinkList L,int i,ElemTyp

8、e *e)/*在带头结点的单链表L中删除第i个元素,并将删除的元素保存到变量*e中*/ Node *pre,*r;int k;pre=L;k=0;while(pre-next!=NULL & knext; k=k+1;/*查找第i-1个结点*/if(!(pre-next) /* 即while循环是因为p-next=NULL或inext;pre-next=pre-next-next; /*修改指针,删除结点r*/*e = r-data;free(r); /*释放被删除的结点所占的内存空间*/printf(成功删除结点!);return OK;intListLength(LinkList L)/*求带头结点的单链表L的长度*/ Node *p;int j;p=L-next;j=0; /*用来存放单链表的长度*/while(p!=NULL) p=p-next;j+;return j;/*j为求得的单链表长度*/ 5.测试数据及结果实验总结:在调试的时候发现在头插法的时候出现错误,经过逻辑思考与调试,发现错误所在,并且更改。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁