数据结构02课程介绍.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
例一 Status ListInsert_L(LinkList L, int i, ElemType e) { // 在带头结点的单链线性表 L 的第 i 个元素之前插入元素 e } // ListInsert_L 利用上述定义的线性链表如何完成 线性表的其它操作 ? if (!LocatePos (L, i-1)) return ERROR; // i 值不合法,第 i-1 个结点不存在 if (InsAfter (L, e)) return OK; // 完成插入 else return ERROR; Status MergeList_L(LinkList Lc, LinkList La, LinkList Lb ,int (*compare) (ElemType,ElemType))) { // 归并有序表 La 和 Lb ,生成新的有序表 Lc, // 并在归并之后销毁La 和 Lb, // compare 为指定的元素大小判定函数 …… } // MergeList_L 例二 if ( !InitList(Lc)) return ERROR; // 存储空间分配失败 LocatePos (La, 0); LocatePos (Lb, 0); // 当前指针指向头结点 if ( DelAfter( La, e)) a = e; // 取得 La 表中第一个元素 a else a = MAXC; // MAXC为常量最大值 if ( DelAfter( Lb, e)) b = e; // 取得 Lb 表中第一个元素 b else b = MAXC; // a 和 b 为两表中当前比较元素 while (!( a==MAXC b==MAXC)) { // La 或 Lb 非空 … … //见下页 } DestroyList(La); DestroyList(Lb); // 销毁链表 La 和 Lb return OK; if ((*compare)(a, b) =0) { // a≤b InsAfter(Lc, a); if ( DelAfter( La, e1) ) a = e1; else a = MAXC; } else { // a>b InsAfter(Lc, b); if ( DelAfter( Lb, e1) ) b = e1; else b = MAXC; } 1. 双向链表 五、其它形式的链表 typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *prior; // 指向前驱的指针域 struct DuLNode *next; // 指向后继的指针域 } DuLNode, *DuLinkList; 最后一个结点的指针域的指针又指回第一个结点的链表 a1 a2 … ... an 2. 循环链表 和单链表的差别仅在于,判别链表中最后一个结点的条件不再是“后继是否为空”,而是“后继是否为头结点”。 双向循环链表 空表 非空表 a1 a2 … ... an 双向链表的操作特点: “查询” 和单链表相同 “插入” 和“删除”时需要同时修改两个方向上的指针。 ai-1 ai e s-next = p-next; p-next = s; s-next-prior = s; s-prior = p; p s ai-1 ai 插入 ai-1 删除 ai ai+1 p-next = p-next-next; p-next-prior = p; p ai-1 一、单链表 二、结点和单链表的 C 语言描述 三、线性表的操作在单链表中的实现 四、一个带头结点的单链表类型 五、其它形式的链表 六、有序表类型 用一组地址任意的存储单元存放线性表中的数据元素。 一、单链表 元素(数据

文档评论(0)

武神赵子龙 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档