数据结构7-线性表的链式表示与实现.ppt

  1. 1、本文档共25页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数 据 结 构 第七课 线性表的链式表示与实现 第八课:线性表的链式表示与实现 二、线性链表的概念: 1.线性链表:以链式结构存储的线性表称之为线性链表。 特点是该线性表中的数据元素可以用任意的存储单元来存储。线性表中逻辑相邻的两元素的存储空间可以是不连续的。 插入、删除操作是不再需要移动大量的元素,但失去了顺序表的可随机存取特点。 2.结点(Node):数据元素的映象用一个结点来表示。结点的一个域表示元素本身,称为数据域, 另一个域是能指示其后继的指针 ,称为指针域, 用来表示线性表数据元素的逻辑关系。 3﹑用线性链表表示线性表时,数据元素之间的逻辑关系是由结点中的指针指示的 链式结构存储的线性表实例 链表的种类 链表可分为单链表、循环链表和双向链表。 单链表:链表中的每一个结点中只包含一个指针域的称为单链表或线性链表。 二、线性链表(单链表)的存储实现 struct LNODE{ ElemType data; struct LNODE *next; }; typedef struct LNODE LNode; typedef struct LNODE * LinkList; 三、线性表(单链表)的操作实现(类C语言)(1) 1. 初始化操作 Status Init_L(LinkList L){ if (L=(LinkList *)malloc(sizeof(LNode))) {L-next=NULL;return 1;} else return 0; } 三、线性表(单链表)的操作实现(类C语言)(2) 2. 插入操作:要在数据元素a和b 之间插入元素x。 算法思想:决定a和b之间的相邻关系是由a 的指针决定的。若要实现插入,生成x结点,然后让a 的指针指向x 且x 的指针指向b。实现三个元a、x和b的逻辑关系。 设p为指向结点a 的指针,s为指向结点x的指针,则修改s、a的指针: s→next=p→next;p→next=s; 插入操作 Status ListInsert_L(LinkList L,int i,ElemType e){ p=L,j=0; while(pji-1){p=p-next;++j;} if(!p||ji-1) return ERROR; s=(LinkList)malloc(sizeof(LNode)); s-data=e;s-next=p-next; p-next=s; return OK; }//ListInsert_L 三、线性表(单链表)的操作实现(类C语言)(3) 3. 删除操作:在单链表数据元素a、b、c三个相邻的元素中删除b, 算法思想:就是要让a 的指针直接指向c,使b从链表中脱离。 即,p→next=p→next→next Status ListDelete_L(LinkList L,int i,ElemType e){ p=L,j=0; while(pji-1){p=p-next;++j;} if(!p-next||ji-1) return ERROR; q=p-next;p-next=q-next; e=q-data;free(q); return OK; }//ListDelete_L 三、线性表(单链表)的操作实现(类C语言)(4) 4.取某序号元素的操作 算法思想:单链表是非随机存取结构。每个元素的位置信息都包含在前驱结点的信息中,所以取得第i个元素必须从头指针出发寻找。设置一个指针变量指向第一个结点,然后,让该指针变量逐一向后指向,直到第i个元素。 取某序号元素的操作 Status GetElem_L(LinkList L,int i,ElemType e){ p=L-next , j=1; while(pji){p=p-next;++j;} if(!p||ji) return ERROR; e=p-data; return OK; }//GetElem_L 三、线性表(单链表)的操作实现(类C语言)(5) 5.归并两个单链表的操作 例:将两个有序链表合并为一个有序链表。 算法思想:设立三个指针pa、pb和pc 分别用来指向两个有序链表和合并表的当前元素。比较两个表的当前元素的大小,将小的元素链接到合并表中,即,让合并表的当前指针指向该元素,然后,修改指针。在归并两个链表为一个链表时,不需要另建新表的结点空间,而只需将原来两个链表中结点之间的关系解除,重新建立关系。 归并两个单链表的操作 void

文档评论(0)

整理王 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档