数据结构单链表实验报告

上传人:pu****.1 文档编号:482211775 上传时间:2022-10-20 格式:DOCX 页数:8 大小:32.63KB
返回 下载 相关 举报
数据结构单链表实验报告_第1页
第1页 / 共8页
数据结构单链表实验报告_第2页
第2页 / 共8页
数据结构单链表实验报告_第3页
第3页 / 共8页
数据结构单链表实验报告_第4页
第4页 / 共8页
数据结构单链表实验报告_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《数据结构单链表实验报告》由会员分享,可在线阅读,更多相关《数据结构单链表实验报告(8页珍藏版)》请在金锄头文库上搜索。

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

2、kNodeint Value;struet 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 Get Lis t

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

4、de); /*建立新结点 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=ge tchar();if(c!=$)s=(Node *)malloc(sizeof(Node);sdat

5、a二c;rnext二s;r=s;elseflag=0;rnext二NULL;/*将最后一个结点的next链域置为空,表示链表的结束*/Node * Get (LinkList L, int i)/*在带头结点的单链表L中查找第i个结点,若找到(1W inext!二NULL)&(jnext; /* 扫描下一结点*/j+;/*已扫描结点计数器*/if(i = j)ret urn p; /* 找到了第i个结点*/elsere turn NULL; /*找不到,i W 0 或 in */Node *Locate( LinkList L,ElemType key)/*在带头结点的单链表L中查找其结点值等

6、于key的结点,若找到则返回该结 点的位置p,否则返回NULL*/Node *p;p=L-nex t; /*从表中第一个结点开始*/while (p!二NULL)if (p-data!二key)p=p-next;elsebreak; /*找到结点值二key时退出循环*/return p;int InsLis t( LinkLis t L,i nt i,ElemType e)/*在带头结点的单链表L中第i个位置插入值为e的新结点s*/Node *pre,*s;int k;pre=L;k=0;/*从头开始,查找第i-1个结点*/while(pre!=NULL&knext;k二k+1;/*查找第i-

7、1结点*/if(!pre) /*如当前位置pre为空表已找完还未数到第 i个,说明插入 位置不合理*/printf (“插入位置不合理!);return ERROR;s=(Node *)malloc(sizeof(Node); /* 申请一个新的结点 S */ sdata二e;/* 值e置入s的数据域*/snex t二pre-nex t;/*修改指针,完成插入操作*/prenext二s;return OK;int DelLis t( LinkLis t L,i nt i,ElemType *e)/*在带头结点的单链表L中删除第i个元素,并将删除的元素保存到变量 *e中 */Node *pre,

8、*r;int k;pre=L;k=0;while(prenext!二NULL & knext;k=k+1;/*查找第i-1个结点*/if(!(prenex t)/*即while循环是因为pnext二NULL或inext;pre-nex t二pre-nex t-nex t;/*修改指针,删除结点 r*/*e = r-data;free(r); /*释放被删除的结点所占的内存空间*/ printf(成功删除结点!);return OK;int ListLength(LinkList L)/*求带头结点的单链表L的长度*/Node *p;int j;p=L-next;j=0;/*用来存放单链表的长度

9、*/whil e(p!二NULL)p=p-next;j+;re turn j; /*j为求得的单链表长度*/5.测试数据及结果I MC:WindciwsSyste m32Dekn.igXCppl.exeMCCendX作SE燥人人.-r仞仞辟矗K茲齐A僉hL.J严緒治 trfi A 壬.:质A n 、古找A Hillis H- i LJ-. I.h 、f.、H-t, I i8裁盧 临孔品|+包 去?7襄痒 洁R叫r谅h诂3-中谿即占雪禹fr盲 -強-A. J.1; : Ml!ll 窃 JBlL-A- J L; J . IllJiJlvj. a . r 艮出2匚:、讥;irdcwsSy5tem32DebligCpp 1 .exe幘输人一串单字符数据,以兴结東!56789*宙前线性表为:5 6 7 8 9青选择您要的操作:1.插入2.查找3.删除0.退岀 醫辘入您要删除的数据的位置:7鋼表知5 6 7 8 9青选择您要的操作:1.插入2.查找3.删除0.退岀36 7 8 9青选择您要的操作:1.插入2.查找3.删除0.退岀实验总结:在调试的时候发现在头插法的时候出现错误,经过逻辑思考与调试,发现错 误所在,并且更改。

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

当前位置:首页 > 机械/制造/汽车 > 电气技术

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号