第2章线性表.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第2章线性表

第二章 线性表 2.1 线性表的逻辑结构 一. 线性表定义如下: 线性表(Linear_list )是具有相同数据类型的n(n=0)个数据元素的有限序列,通常记为:(a1,a2,… ai-1,ai,ai+1,…an) ,其中 n 为表长, n=0 时称为空表。 有且仅有一个开始结点和一个终端结点,每一结点最多只有一个直接前趋和一个直接后继。 分析上面两个算法: 算法2.2的时间复杂度为O(ListLength(La)+ListLength(Lb)) 算法2.1的时间复杂度为O(ListLength(La)*ListLength(Lb)) 原因? 2.2 线性表的顺序表示和实现 在C语言中用一维数组表示的顺序表: 2.3 线性表的链式存储结构 顺序表的优缺点 优点:可随机存取; 无需增加额外的存储空间 缺点: 插入、删除要移动大量的节点,时间开销大 ; 要有连续的存储空间,有时会浪费或难以满足分配。 链式存储可以利用任意的存储单元 链表 用一组地址任意的存储单元存放线性表中的数据元素, 以元素(数据元素的映象) + (指示后继元素存储位置的)指针 = 结点(表示数据元素)。 线性表结点的序列??称作链表 单链表的表示: 用头指针命名.如 La, Head Status ListInsert_L(LinkList L, int i, ElemTyp e ) { //在带头结点的单链表L中第i个位置之前插入元素e p=L;j=0; while (p ji-1) //当循环结束时p可能指向第i-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 单链表的删除操作 设r指向单链表中某结点,删除*r。操作示意图如下图所示。通过示意图可见,要实现对结点*r的删除,首先要找到*r的前驱结点*p。 静态链表 静态链表用一维数组表示,表中的结点是数组的一个分量,用游标代替指针来指示结点在数组中的相对位置,数组的第零个分量作为头结点,这种结构仍需预先分配一个较大的空间,但插入和删除不需移动结点,仅需修改游标。 开始先将整个数组初始化为一个备用链表。 2.3.2循环链表 循环链表: 最后一个结点的指针域指向头结点,形成一个环。 一般用尾指针rear来表示单循环链表。 2.4 一元多项式的表示及相加 一元多项式的表示: 单链表的结点定义 void CreateList_L(LinkList L, int n) { LinkList p; int i; L = (LinkList)malloc(sizeof(LNode)); L-next = NULL; // 先建立一个带头结点的单链表 for ( i=n; i0; --i ) { p = (LinkList)malloc(sizeof(LNode)); // 生成新结点 p-data = random(200); // 随机生成的数字(200以内) p-next = L-next; L-next = p; // 插入到表头 } } // CreateList_L 算法2.11 用头插法建立单链表 尾插法 头插入建立单链表简单,但读入的数据元素的顺序与生成的链表中元素的顺序是相反的,若希望次序一致,则用尾插入的方法。因为每次是将新结点插入到链表的尾部,所以需加入一个指针 r 用来始终指向链表中的尾结点。 算法思路: 初始状态:头指针Head=NULL,尾指针 r=NULL; 按线性表中元素的顺序依次读入数据元素,不是结束标志时,申请结点,将新结点插入到 r 所指结点的后面,然后 r 指向新结点(第一个结点有所不同)。 合并两个非递减有序的单链表 思路: ? void MergeList_L(LinkList La, LinkList Lb, LinkList Lc) { // 已知单链线性表La和Lb的元素按值非递减排列

文档评论(0)

170****0532 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8015033021000003

1亿VIP精品文档

相关文档