欢迎来到优知文库! | 帮助中心 分享价值,成长自我!
优知文库
全部分类
  • 幼儿/小学教育>
  • 中学教育>
  • 高等教育>
  • 研究生考试>
  • 外语学习>
  • 资格/认证考试>
  • 论文>
  • IT计算机>
  • 法律/法学>
  • 建筑/环境>
  • 通信/电子>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 优知文库 > 资源分类 > PPT文档下载
    分享到微信 分享到微博 分享到QQ空间

    单链表数据结构.ppt

    • 资源ID:162267       资源大小:1.96MB        全文页数:36页
    • 资源格式: PPT        下载积分:7金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录
    二维码
    扫码关注公众号登录
    下载资源需要7金币
    邮箱/手机:
    温馨提示:
    快捷下载时,如果您不填写信息,系统将为您自动创建临时账号,适用于临时下载。
    如果您填写信息,用户名和密码都是您填写的【邮箱或者手机号】(系统自动生成),方便查询和重复下载。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单链表数据结构.ppt

    第二章 线性表单链表(Singly linked list)线性表 单链表一一单链表定义与特点单链表定义与特点二二单链表的单链表的C C语言描述语言描述三三单链表基本形态单链表基本形态四四单链表基本操作实现单链表基本操作实现五五单链表的运用单链表的运用一、单链表的定义与特点定义定义特点特点一组数据项的集合,其中每个数据项都是一个结点的一部分,每个结点都包含指向下一个结点的链接(即指针指针)。1.数据元素在“逻辑逻辑关系上的相邻相邻”用“指针指针”来表示。2.单链表 中访问数据元素时需从头开始“顺序访问顺序访问”。3.比顺序表的优势在于,提供高效地重排重排数据项的能力。a1a2a3a4anL结点结点链接项(指针域)链接项(指针域)每个链接项只链接其后一个结点数据项数据项(域域)二、单链表的C语言描述 typedef struct LNode ElemType data; / 数据域 struct LNode *next; / 指针域 LNode, *LinkList; LinkList L; / L为单链表的头指针头指针指向单链表中的用表示,结点是由和组成的,链接用表示,用于指向下一个结点。 a类型定义实例声明三、单链表的基本形态空表空表非空表非空表为了操作方便,在第一个结点之前虚加一个为了操作方便,在第一个结点之前虚加一个“头结点头结点”LL-next = NULL;不允许删除操作不允许删除操作La1a2a3an可以进行插入、删除操作可以进行插入、删除操作哑元结点哑元结点不存储数据项不存储数据项头结点头结点四、单链表基本操作1.1.初始化操作初始化操作(initialize)(initialize)2.2.查找操作查找操作(locate/find)(locate/find)3.3.插入新元素操作插入新元素操作(insert)(insert)4.4.删除元素操作删除元素操作(delete)(delete)5.5.清空操作清空操作(clear)(clear)6.6.销毁操作销毁操作(destroy)(destroy)7.7.其它操作其它操作4.1 初始化操作Stutas InitList(LinkList &L) L = (LinkList) malloc(sizeof(LNode) ; / 1.动态分配结点内存动态分配结点内存 if(!L) exit(overflow); L-next=NULL; / 2.结点指针初始化结点指针初始化 return OK;L头结点头结点L211830754256pppj1 2 34.2 查找操作(1)查找指定位序的数据元素;(2)数据元素值匹配查找。演示例子:取单链表中第3个元素值找到!找到!4.2 查找操作单链表是一种单链表是一种“顺序访问顺序访问”的结构,为找第的结构,为找第 i i 个数据个数据元素,必须先找到第元素,必须先找到第( ( i-1 i-1 ) )个数据元素。个数据元素。1.1.指针指针p p始终指向单链表中第始终指向单链表中第j j个结点;个结点;2.2.移动指针,比较移动指针,比较 j j 和和 i i,相等则找到。,相等则找到。Status GetElem_L(LinkList L, int i, ElemType &e) / L是带头结点的链表的头指针,以 e 返回第 i 个元素 p = L-next; / p指向第一个结点 j = 1; / j为计数器 / 顺指针向后查找顺指针向后查找,直到 p 指向第 i 个元素或 p 为空 while (p & j next; j +; if ( p & j=i ) / 找到 e = p-data; / 取得第 i 个元素 return OK; else /第 i 个元素不存在 return ERROR; / GetElem_L算法时间复杂度为:O(ListLength(L)与顺序表相比,链表不适合于查找与顺序表相比,链表不适合于查找第第i i个元素的操作。个元素的操作。按结点位序(位置序号)查找LNode * GetElem_L(LinkList L, ElemType e) / 查找第一个元素值为 e 的结点,返回其结点指针 p = L-next; / p指向第一个结点 / 顺指针向后查找顺指针向后查找,直到找到匹配项或 p 为空 while (p) if ( p-data = e )/ 找到,元素值匹配值 return p; / 返回结点指针 p = p-next; return NULL; / 无匹配项,返回空指针 / GetElem_L算法时间复杂度为:O(ListLength(L)按数据元素值匹配查找4.3 插入新元素操作在单链表中的第i个元素前插入元素e。单链表中:ai-1 有序对有序对 改变为改变为 和和 eai在单链表中在单链表中插入结点插入结点。若要在第若要在第 i i 个结点之前插入元素,修改的是第个结点之前插入元素,修改的是第 (i-1) (i-1) 个结点的指针。个结点的指针。Status ListInsert_L(LinkList &L, int i, ElemType e) / 链表中第链表中第i 个结点之前插入新的元素个结点之前插入新的元素 e p = L; j = 0; while (p != NULL & j next; +j; / 查找第找第 (i-1) 个结点个结点 if (p != NULL & j = i-1) / 找到第找到第i个结点个结点 s = (LinkList) malloc ( sizeof (LNode); / 生成新结点 s-data = e; / 数据域赋值 s-next = p-next; /新结点指针指向后一结点 p-next = s; / 前一结点指针指向新结点 return OK; else / 未找到第未找到第i个结点个结点 return ERROR; / LinstInsert_L算法的时间复杂度为:O(ListLength(L)s ai ai-1 ep查找查找插入插入有序对有序对 和和 改变为改变为 aiai+1ai-1ai-14.4 删除元素操作从单链表中删除第i个元素。在单链表中在单链表中删除第删除第 i i 个结点个结点时,要找到单链表中第时,要找到单链表中第( (i-1i-1) )个结点,个结点,修改其指向后继的指针。修改其指向后继的指针。ai-1aiai+1q = p-next;p-next = q-next; e = q-data; free(q);pq Status ListDelete_L(LinkList &L, int i, ElemType &e) / 删除以 L 为头指针(带头结点)的单链表中第 i 个结点 p = L; j = 0; / 查找第 i-1 个结点,并令 p 指向它。 while (p-next & j next; +j; if (p-next& j = i-1) e = q-data; q = p-next; / q指向要删除结点 p-next = q-next; / 前一结点指针指向要删除结点的后一结点 free(q); / 释放删除结点内存 return OK; else return ERROR; / 删除位置不合理 / ListDelete_L算法的时间复杂度为:O(ListLength(L)查找查找删除删除4.5 清空操作5、清空while (L-next) p = L-next; / p指向当前结点 L-next = p-next; / 头结点指向当前结点的后结点 free(p); / 释放当前结点内存/ 清空完成后,仍保留头结点保留头结点L算法的时间复杂度为:O(ListLength(L)4.6 销毁操作6、销毁while(L) p = L-next; / p指向第一结点(头节点为“哑结点”) free(L); / 释放首结点 L=p; / L指向p/ 销毁完成后,L为空为空(NULL)算法的时间复杂度为:O(ListLength(L)4.7 其它操作判空if(L-next=NULL) return TRUE; / 空else return FALSE; /非空求表长int ListLength(LinkList L) p=L-next; i=0; / 计数 while(p) i+; p=p-next; return i;空链表不允空链表不允许删除操作许删除操作单链表和顺序表特性对比单链表顺序表按位序访问效率顺序访问,效率较低位序地址可计算,效率高查找效率顺序访问,效率较低排序后可用折半查找,效率较高插入、删除操作效率仅需通过修改指针即可实现,效率高需要移动元素,效率低动态改变大小支持不支持内存使用效率可利用内存碎片,但每个数据项需要额外的指针域需要完整内存块,无额外内存开销两种实现方式特性不同,存在互补,在实际应用中应根据应用要求选择更两种实现方式特性不同,存在互补,在实际应用中应根据应用要求选择更适用的方式。适用的方式。五、单链表的运用1.1.建立单链表建立单链表2.2.归并有序列表归并有序列表3.3.稀疏多项式相加稀疏多项式相加5.1 建立单链表(1)顺序建立单链表链表是一个动态结构,它不需要预分配空间,生成链表的过程是一个链表是一个动态结构,它不需要预分配空间,生成链表的过程是一个 的过程。的过程。新结点插入在新结点插入在,作为重排链表后的作为重排链表后的第一个结第一个结点点。新结点插在新结点插在,作为重排链表后的作为重排链表后的最后一最后一个结点。个结点。(2)逆序建立单链表La1a2an e逆序逆序顺序顺序 e5.1.1 顺序建立单链表a1建立一个带头结点的空单链表;建立一个带头结点的空单链表;输入数据元素输入数据元素ai,建立新结点,并,建立新结点,并把其插入在尾结点把其插入在尾结点p之后成为最后一之后成为最后一个结点。个结点。重复执行重复执行步,直到完成单链表的步,直到完成单链表的建立。建立。a2a1创建出来的链表结点顺序与插入操作。void CreateList_N(LinkList &L, int n) / 逆序输入 n 个数据元素,建立带头结点的单链表 L = (LinkList) malloc (sizeof (LNode); L-next = NULL; / 先建立一个带头结点的单链表 p = L; / p指向L for (i = 1; i data); / 输入元素值 q-next = NULL; / q为尾结点 p-next = q; / 将q链接到p之后 p = q; / p指向新的尾结点 / CreateList_L算法的时间复杂度为:O(ListLength(L)步骤步骤1 1步骤步骤2 2指针指针p p始终指始终指向链表尾结向链表尾结点。点。5.1.2 逆序建立单链表a1建立一个带头结点的空单链表;建立一个带头结点的空单链表;输入数据元素输入数据元素ai,建立新结点,建立新结点p,并把并把p插入在头结点之后成为第一个插入在头结点之后成为第一个结点。结点。重复执行重复执行步,直到完成单链表的步,直到完成单链表的建立。建立。a1a2创建出来的链表结点顺序与插入操作。void CreateList_N(LinkList &L, int n) / 逆序输入 n 个数据元素,建立带头结点的单链表 L = (LinkList) malloc (sizeof (LNode); L-next = NULL; / 先建立一个带头结点的单链表 for (i = 1; i data); / 输入元素值 p-next = L-next; / 将第一个数据结点链接到新结点之后 L-next = p; / 头结点指向新的结点p / CreateList_L算法的时间复杂度为:O(ListLength(L)步骤步骤1 1步骤步骤2 25.2 归并有序链表归并有序单链表归并有序单链表L La a和有序单链表和有序单链表L Lb b得到有序单链表得到有序单链表L Lc c。链表结点

    注意事项

    本文(单链表数据结构.ppt)为本站会员(王**)主动上传,优知文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知优知文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 yzwku网站版权所有

    经营许可证编号:宁ICP备2022001189号-2

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

    收起
    展开