单链表数据结构.ppt
《单链表数据结构.ppt》由会员分享,可在线阅读,更多相关《单链表数据结构.ppt(36页珍藏版)》请在第壹文秘上搜索。
1、第二章 线性表单链表(Singly linked list)线性表 单链表一一单链表定义与特点单链表定义与特点二二单链表的单链表的C C语言描述语言描述三三单链表基本形态单链表基本形态四四单链表基本操作实现单链表基本操作实现五五单链表的运用单链表的运用一、单链表的定义与特点定义定义特点特点一组数据项的集合,其中每个数据项都是一个结点的一部分,每个结点都包含指向下一个结点的链接(即指针指针)。1.数据元素在“逻辑逻辑关系上的相邻相邻”用“指针指针”来表示。2.单链表 中访问数据元素时需从头开始“顺序访问顺序访问”。3.比顺序表的优势在于,提供高效地重排重排数据项的能力。a1a2a3a4anL结点
2、结点链接项(指针域)链接项(指针域)每个链接项只链接其后一个结点数据项数据项(域域)二、单链表的C语言描述 typedef struct LNode ElemType data; / 数据域 struct LNode *next; / 指针域 LNode, *LinkList; LinkList L; / L为单链表的头指针头指针指向单链表中的用表示,结点是由和组成的,链接用表示,用于指向下一个结点。 a类型定义实例声明三、单链表的基本形态空表空表非空表非空表为了操作方便,在第一个结点之前虚加一个为了操作方便,在第一个结点之前虚加一个“头结点头结点”LL-next = NULL;不允许删除操作
3、不允许删除操作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 I
4、nitList(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 个数据个数据元素,必须先找到第元素,必
5、须先找到第( ( 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
6、 & 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 为空 w
7、hile (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 ListI
8、nsert_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; / 前一结点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 数据结构
