单链表心得体会

发布 2023-09-12 16:35:45 阅读 9852

篇一:数据结构课程设计实验报告心得体会链表c语言数据结构课程设计。

设计题目:两个链表的交叉合并专业班级:08软件工程3班姓名:******学号:080107031123设计时间:2010/9/25指导教师:杨薇薇。

一、设计题目实现两个链表的合并设计目的。

1.掌握线性链表的建立。2.掌握线性链表的基本操作。设计内容和要求。

第1页/共15页。

1.建立两个链表a和b,链表元素个数分别为m和n个。2.假设元素分别为(x1,x2,?xm),和(y1,y2,?yn)。把它们合并成一个线形表c,使得:

当m>=n时,c=x1,y1,x2,y2,?xn,yn,?,xm当n>m时,c=y1,x1,y2,x2,?ym,xm,?,yn输出线性表c。

3.用直接插入排序法对c进行升序排序,生成链表d,并输出链表d。4.能删除指定单链表中指定位子和指定值的元素。二、运行环境(软、硬件环境)

软件环境:vc++6.0编程软件,运行平台:win32硬件:普通个人pc机、算法设计的思想。

三、算法的流程图。

四、算法设计分析。

这个两个链表的交叉合并算法主要运用到的是链表的基本操作,定义节点,将链表的创建、计算链表的长度、链表a,b的交叉组合、链表内容升序排列、删除链表指定位置元素、删除指定的元素等算法写成了独立函数,通过主函数调用。这样就大大精简了主函数的操作。但主函数中很大篇幅用到了if、else语句,用以指定链表指定结点和指定元素的删除操作,这样就使得本来很精简变得繁琐,降低了程序的质量。

所以其有优点和缺点,但需要不断的改进,不断优化该程序。五、源**程序源**:#include<>

第2页/共15页。

#include<>

typedefstructnode//节点定义node,*linklist;

linklistcreat(linklisthead)//该函数用来创建链表。

r->next=null;returnhead;

第3页/共15页。

linklistlength(linklistl)//返回l中数据元素个数returni;}

篇二:单链表实验报告。

实验一线性表基本操作的编程实现--线性表在链表存储下的主要操作实现。

班级:t523-1姓名:王娟学号:33完成日期:2007.04.04地点:5502学时:2学时。

一、需求分析【实验目的】

通过本次实验,对课堂上线性表的知识进行巩固,进一步熟悉线性表的。

链接存储及相应的基本操作;并熟练掌握vc++6.0操作平台,学会调试程序,以及编写电子实验报告【实验要求】

第4页/共15页。

编写线性表的基本操作,有构造线性表,线性表的遍历,插入,删除,查找,求表长等基本功能,在此基础上能够加入dos下的图形界面以及学会文件的操作等功能,为以后的学习打下基础。【实验任务】

1).线性表基本操作的编程实现,掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结构中任选,可以完成部分主要功能,也可以用菜单进行管理完成大部分功能。还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

2).用菜单管理,把线性表的顺序存储和链表存储的数据插入、删除运算。

进行程序实现。建议实现键盘数据输入实现改实验的通用性。为了体现功能的正常性,至少要编制遍历数据的函数。

3).注意事项:开发语言使用c++,尽量使用面向对象的思想和实现方法,可以改编成应用软件。【实验类型】验证型实验。

二、概要设计。

需要实现线性表的以下功能:1、创建单链表。

2、删除链表中的某个结点3、输出单链表(遍历)4、释放结点所占空间。

第5页/共15页。

5、查找第i个结点6、插入一个结点7、求链表的长度。

二、详细设计(1).数据结构。

线性表的线性结构觉决定了它的性质:数据元素之间是一种线性关系,数据元素。

一个接一个的排列,除了最后一个数据,其他的数据面临的下一个数据有且仅有一个。(2).存储结构。

单链表采用一个结点存放一个数据元素,每个结点除了包括存放数据元素值的数据域(data)外,还包括指向下一个元素的存储位置的指针域(next)。最后一个结点的指针域为空。(3).

算法分析(函数功能的实现)a.创建链表。

创建链表的过程实际相当于申请了一个一个的节点,将这些节点用一种关系连接起来。本程序没有空置的头结点。创建的过程中分别对头结点和非头结点进行不同的处理。(1).创建的过程。

nodetype*create()/建立单链表,由用户输入各节data域之值。

else//建立其于节点i++;

第7页/共15页。

return(h);}

b.插入函数。

链表的插入分为往前插和往后插两种操作,此程序采用了往后插的方法,同时实现了从键盘输入数据的功能。也考虑了特殊情况即链表的溢出,对此首先进行了判断,保证了程序的安全性和健壮性。在此过程中调用了另一函数find();

nodetype*ins(nodetype*h,inti,elemtypex)//在第i个节点后插入data域为x的节点elseelse

cout<<"输入的i值不正确"

对于删除,和插入一样也要通过改链来实现,不过在单链表中,当一个指针指向某一个节点时,是不能删除它的,因为地址存放在上一个节点的链域中,所以必须启动一个尾随指针。同插入一样,是删除某个结点后的数,也调用了find();函数,由于插入和删除类似所以不附上原程序。d.

输出函数(遍历)

采用while循环输出单链表的内容,用到了p1=p1->next以及输出函数cout《信息;输出前同样对链表是否为空进行了判断,该函数比较简单,相应操作如下:if(p==null)cout<<"空表";else

while(p!=null)//链表不为空时输出lnode,*linklist;

第11页/共15页。

/linklist为结构体类型的指针,可以直接定义变量,比如linklistp;//建表(头插法)

voidcreatlistf(linklist&l,elemtypea,intn)}

/建表(尾插法)

voidcreatlistr(linklist&l,elemtypea,intn)

p->next=null;}

/初始化线性表voidinitlist(linklist&l)

/获得链表元素。

statusgetelem(linklistl,inti,elemtype&e)

/第i个元素不存在if(!p||j>i)returnerror;//取第i个元素e=p->data;returnok;}/插入。

statuslistinsert(linklist&l,inti,elemtypee)

if(!p||j>i-1)returnerror;linklists;

第15页/共15页。

优秀心得体会 电器单店经营心得体会

电器单店经营心得体会。一 转型谋发展 多渠道入手提升品牌力量。作为电器单店经营我们积极营造一个交易平台,努力突破传统 的格局,建设电子交易平台,倾力打造一个集设计 产销 咨询 技术支持等为一体的 一站式 专业集贸集散中心,服务整个产业链,并努力形成在行业内的话语权。一 加大vip服务力度。商业的不断...

学习单使用心得体会

学习单 使用心得体会。储能中学莫文静。从开始设计 学习单 到各校的推广这一年多的时间,在平时上课中我已经越来越离不开 学习单 学习单 是在二期课改的背景下推出的,在我和其他老师的使用过程中,我发现 学习单 真正改变了教师的教学行为和学生的学习行为。以往上课教师ppt做的很精彩,很吸引学生的眼球,但往...

学习单使用心得体会

学习单 使用心得体会。储能中学莫文静。从开始设计 学习单 到各校的推广这一年多的时间,在平时上课中我已经越来越离不开 学习单 学习单 是在二期课改的背景下推出的,在我和其他老师的使用过程中,我发现 学习单 真正改变了教师的教学行为和学生的学习行为。以往上课教师ppt做的很精彩,很吸引学生的眼球,但往...