单链表实验报告总结
篇一:
单链表实验报告 实验一 线性表基本操作的编程实现 --线性表在链表存储下的主要操作实现 班级:T523-1 姓名:王娟 学号:33 完成日期:201X.0
4.04 地点:5502 学时:2学时
一、需求分析 【实验目的】 通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的 链接存储及相应的基本操作;并熟练掌握VC++
6.0操作平台,学会调试程序,以及编写电子实验报告 【实验要求】 编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除, 查找,求表长等基本功能,在此基础上能够加入DS下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。 【实验任务】
(1).线性表基本操作的编程实现,掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。
(2).用菜单管理,把线性表的顺序存储和链表存储的数据插入、删除运算 进行程序实现。建议实现键盘数据输入实现改实验的通用性。为了体现功能的正常性,至少要编制遍历数据的函数.
(3).注意事项:开发语言使用C++,尽量使用面向对象的思想和实现方法,可以改编成应用软件. 【实验类型】 验证型实验 二、概要设计 需要实现线性表的以下功能: 1、创建单链表
2、删除链表中的某个结点 3、输出单链表(遍历)
4、释放结点所占空间 5、查找第i个结点 6、插入一个结点 7、求链表的长度 二、详细设计
(1).数据结构 线性表的线性结构觉决定了它的性质:
数据元素之间是一种线性关系,数据元素 一个接一个的排列,除了最后一个数据,其他的数据面临的下一个数据有且仅有一个。 (2) .存储结构 单链表采用一个结点存放一个数据元素,每个结点除了包括存放数据元素值的数据域(data)外,还包括指向下一个元素的存储位置的指针域(next)。最后一个结点的指针域为空。 (3). 算法分析(函数功能的实现) a.创建链表 创建链表的过程实际相当于申请了一个一个的节点,将这些节点用一种关系连接起来。本程序没有空置的头结点。创建的过程中分别对头结点和非头结点进行不同的处理。
(1).创建的过程 ndetype *create //建立单链表,由用户输入各节data域之值 { elemtype d; ndetype *h=NULL,*s,*t; int i=1; cut 建立一个单链表 endl; hile
(1) { cut 输入第 i 节点data域值: cin d; if (d==0) break; //以0表示输入结束 if(i==1) //建立第一个节点 { h=ne ndetype; h- data=d; h- next=NULL; t=h; } else //建立其于节点 { s=ne ndetype; s- data=d; s- next=NULL; t- next=s; t=s; //t始终指向生成的单链表最后一结点 } i++; } return (h); } b.插入函数 链表的插入分为往前插和往后插两种操作,此程序采用了往后插的方法,同时实现了从键盘输入数据的功能。也考虑了特殊情况即链表的溢出,对此首先进行了判断,保证了程序的安全性和健壮性。在此过程中调用了另一函数find; ndetype *ins(ndetype *h,int i,elemtype x) //在第i个节点后插入 data域为x的节
点 { ndetype *p,*s; s=ne ndetype; //建结点s s- data=x; s- next=NULL; if(i==0) //插入到第一个位置 { s- next=h; h=s; } else { p=find(h,i); //查找第i个节点,并由p指向该节点 if
(p!=NULL) { s- next=p- next; p- next=s; } else cut 输入的i值不正确 endl; } return h; } c.删除函数 对于删除,和插入一样也要通过改链来实现,不过在单链表中,当一个指针指向某一个节点时,是不能删除它的,因为地址存放在上一个节点的链域中,所以必须启动一个尾随指针。同插入一样,是删除某个结点后的数,也调用了find();函数,由于插入和删除类似所以不附上原程序。 d.输出函数(遍历) 采用hile循环输出单链表的内容,用到了p1=p1- next以及输出函数cut 信息;输出前同样对链表是否为空进行了判断,该函数比较简单,相应操作如下:
if (p==NULL) cut 空表 else hile(p!=NULL) //链表不为空时输出 { cut p- data p=p- next; 篇二:
单链表的实验报告 辽宁工程技术大学上机实验报告 篇三:
链表实验报告 数据结构实验报告 姓名; 方钢 学号: 201X5567 专业: 电子商务 班 级: 10-1班 指导教师: 实验时间: 实验地点:
新区实验楼4楼 (实验题目)单链表实验 1.实验内容和要求 1.1实验要求
① 本次实验中的链表结构均为带头结点的单链表;
② 链表结构定义,算法实现放入库文件“linkList.h”; 运算和变量命名直观易懂,并有相应的注释
1.2实验内容 1 求链表中第i个结点的指针(函数),若不存在,则返回NULL。 2 在第i个结点前插入值为x的结点。 3 删除链表中第i个元素结点。 4 在一个递增有序的链表L中插入一个值为
x的元素,并保持其递增有序特 性。 5 将单链表L中的奇数项和偶数项结点分解开(元素值为奇数、偶数),申请 2个头结点,把分开的奇数项和偶数项分别链接到这2个头结点上,然后再 将 这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照 求解 结果。 6 求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。 2.实验目的
2.1 理解线性表的链式存储结构。
2.2熟练掌握单链表结构及有关算法的设计。
2.3根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关 算法。
3.数据结构设计 1 求链表中第i个结点的指针(函数),若不存在,则返回NULL。 实验代码 nde *L,*p; int i; createNde(* //尾插法创建一个链表, cut 链表包含:
endl; p=L- next; hile(p) { cut p- data , p=p- next; } cut endl; cut 请输入待求元素序号:
cin i; lcateNde (L, i, p ); if(p!=NULL) cut 序号 i 的元素值为:
p- data endl; else cut NULL endl; destryList(L); //销毁链表,释放heap内存 _CrtDumpMemryLeaks; //debug 模式下检测是否内存泄漏 测试截图 2 在第i个结点前插入值为x的结点。 实验代码 nde *L,*p; int i; elementType x; createNde(L); //尾插法创建一个链表, cut 插入前链表包含:
endl; p=L- next; hile(p) { cut p- data , p=p- next; } cut endl; cut 插入前表长度len= listLength(L) endl; //调用长度函数 cut 请输入待插入的元素(x): cin x; cut 请输入插入位置(i):
cin i; //调用插入函数,并检查是否插入成功 if(insertNde (L,i,x)) cut 元素 x 成功插入表第 i 个节点位置! endl; else cut 抱歉!元素插入失败! endl; //打印插入元素后的链表 cut 插入操作后链表元素:
endl; p=L- next; hile(p) { cut p- data , p=p- next; } cut endl; cut 插入后表长度len= listLength(L) endl; destryList(L); //销毁链表,释放heap内存 _CrtDumpMemryLeaks; //debug 模式下检测是否内存泄漏 测试截图 3 删除链表中第i个元素结点。 实验代码 nde *L,*p; int i; elementType x; creatNde(L); //尾插法创建一个链表, cut 链表包含:
endl; p=L- next; hile(p) { cut p- data , p=p- next; } cut endl; (单链表实验报告总结) cut endl; cut 请输入待删除元素位置(i):
cin i; //调用删除函数,并检查是否删除成功
if(deleteNde (L,i)) cut 删除链表第 i 个节点成功! endl; else cut 删除元素失败! endl; //删除节点后的链表 cut endl; cut 删除节点后的链表元素:
endl; p=L- next; hile(p) { cut p- data , p=p- next; } cut endl; destryList(L); //销毁链表,释放heap内存
_CrtDumpMemryLeaks; //debug 模式下检测是否内存泄漏 测试截图篇四:
数据结构单链表实验报告
一、 设计人员相关信息 1. 设计者姓名、学号和班号: 12地信李晓婧 1201X242983
2. 设计日期:
201X.
3. 上机环境: VC++ 6.0
二、 程序设计相关信息 1. 实验题目:
编写一个程序,实现单链表的各种基本运算(假设单链表的元素类型为char),并在此基础上设计一个程序,完成如下功能:
(1) 初始化单链表;
(2) 采用尾插法依次插入元素a,b,c,d,e; (3) 输出单链表 (4) 输出单链表长度
(5) 判断单链表是否为空
(6) 输出单链表第3个元素 (7) 输出元素a的位置 (8) 在第4个元素位置上插入元素f (9) 输出单链表 (10)删除第三个元素 (11)输出单链表 (12)释放单链表
2. 实验项目组成:
(1) 插入和删除节点操作 (2) 建立单链表 尾插法建表
(3) 线性表基本运算在单链表中的实现 初始化线性表 销毁线性表 判断线性表是否为空表 求线性表的长度
3. 实验项目的程序结构(程序中的函数调用关系图):
4. 实验项目包含的各个文件中的函数的功能描述: 尾插法建表CreateListR:
将新节点插到当前链表的表尾上,为此必须增加一个尾指针 r,使其始终指向当前链表的尾节点。 ? 初始化线性表InitList: 该运算建立一个空的单链表,即创建一个头节点; ? 销毁线性表DestryList:
释放单链表占用的内存空间,即逐一释放全部节点的空间; ? 判断线性表是否为空表ListEmpty:
若单链表没有数据节点,则返回真,否则返回假; ? 求线性表的长度ListLength:
返回单链表中数据节点的个数; ? 输出线性表DispList: 逐一扫描单链表的每个数据节点,并显示各节点的data域值; ? 求线性表中某个数据元素值GetElem:
在单链表中从头开始找到第i个节点,若存在第 i个数据节点,则将其data域值赋给变量e; ? 按元素值查找LcateElem: 在单链表中从头开始找第一个值域与e相等的节点,若存 在这样的节点,则返回逻辑序号,否则返回0; ? 插入数据元素ListInsert: 先在单链表中找到第i-1个节点*p,若存在这样的节点,将值 为e的节点*s插入到*p节点的后面; ? 删除数据元素ListDelete: 先在单链表中找到第i-1个节点*p,若存在这样的节点,且 也存在后继节点*q;删除*q节点,返回TRUE;否则返回FALSE表示参数i错误。
5. 算法描述或流程图: 篇五:
单链表实验报告 《数据结构》实验报告二 分校: 学号: 日期: 班级:
姓名: 程序名: L231 1.CPP
一、上机实验的问题和要求:
单链表的查找、插入与删除。设计算法,实现线性结构上的单链表的产生以及元素的查找、插入与删除。具体实现要求:
1. 从键盘输入20个整数,产生带表头的单链表,并输入结点值。
2. 从键盘输入1个整数,在单链表中查找该结点。若找到,则显示“找到了”;否则,则 显示“找不到”。
3. 从键盘输入2个整数,一个表示欲插入的位置i,另一个表示欲插入的数值x,将x插 入在对应位置上,输出单链表所有结点值,观察输出结果。
4. 从键盘输入1个整数,表示欲删除结点的位置,输出单链表所有结点值,观察输出结果。
5. 将单链表中值重复的结点删除,使所得的结果表中个结点值均不相同,输出单链表所有 结点值,观察输出结果。
6. 删除其中所有数据值为偶数的结点,输出单链表所有结点值,观察输出结果。
7. 把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观察输出结果。
8. (★)将单链表分解成两个单链表A和B,使A链表中含有原链表中序号为奇数的元 素,而B链表中含有原链表中序号为偶数的元素,且保持原来的相对顺序,分别输出单链表A和单链表B的所有结点值,观察输出结果。
二、程序设计的基本思想,原理和算法描述:
(包括程序的结构,数据结构,输入/输出设计,符号名说明等) 三、源程序及注释:
四、运行输出结果:
五、调试和运行程序过程中产生的问题及采取的措施:
六、对算法的程序的讨论、分析,改进设想,其它经验教训: 七、对实验方式、组织、设备、题目的意见和建议:
因篇幅问题不能全部显示,请点此查看更多更全内容