数据结构基础(上) ppt289.ppt

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

JYP 数据结构基础(上) 第1章 基本概念和方法 1.1 数据结构与软件系统 1.2 数据抽象与封装 1.3 算法定义 1.4 递归算法 1.5 性能分析 1.5.1 空间复杂性 1.5.2 时间复杂性 1.5.3 O表示法 1.5.5 实际可行的复杂性 1.6 性能测量 1.7 C++中的模板 1.8 效率与权衡 第2章 线性表 2.1 线性表与数组 2.2 多项式 2.2.1 多项式的表示 2.2.2 多项式相加 2.3 稀疏矩阵 2.3.1 稀疏矩阵的表示 2.3.2 稀疏矩阵的转置 2.4 字符串 2.4.1 字符串模式匹配的简单算法 2.4.2 字符串模式匹配的KMP算法 2.5 栈 2.6 队列 2.7 迷宫问题 2.8 表达式计算 2.8.2 后缀表示 2.8.3 将中缀转化为后缀 第3章 链表 3.1 单链表 3.1.1 单链表的表示 3.1.2 基本操作 3.2 可重用链表类 3.2.2 链表游标 3.2.3 链表操作 3.3 环链表 3.4 链式栈和队列 3.5 链式多项式 3.5.2 多项式相加 3.5.3 删除多项式 3.5.4 环链多项式 3.6 等价类 3.7 稀疏矩阵的链表实现 3.7.2 输入稀疏矩阵 3.7.3 删除稀疏矩阵 3.8 双链表 3.9 广义表 3.9.2 递归算法 3.9.3 引用计数、共享与递归表 定义:集合S上的关系 ? 称为等价(equivalence)关系,当且仅当 ? 在S上是对称的、自反的和传递的。 集合S可以依据? 划分成等价类,使得对任意x?S和y?S,x和y在同一个等价类中当且仅当x ? y。 例如,S = {0,1,2,3,4,5,6,7,8,9,10,11},S上存在以下等价对: 0 ? 4,3 ? 1,6 ? 10,8 ? 9,7 ? 4,6 ? 8,3 ? 5,2 ? 11,11 ? 0 则S应划分为以下三个等价类: {0,2,4,7,11};{1,3,5};{6,8,9,10} 求解等价类问题分两阶段: (1)输入等价对(i,j)并有效存储。 (2)计算等价类:从0开始,找到所有(0,j),0和j属于同一个等价类。根据传递性,所有(j,k)蕴涵k也在0的等价类中。如此搜索下去,直到包含0的等价类的元素全部找到并标记。接着,继续计算新的等价类。 主要困难:找到蕴涵的k,而且不能有遗漏。可以采用类似迷宫解法的策略,利用栈保留尚未搜索的途径。 m——等价对的个数 n——元素个数 如用二维Boolean数组pairs[n][n]表示输入的等价对(pairs[i][j] = TRUE当且仅当(i,j)是输入的等价对),则由于一般m远小于n2,这样表示很浪费空间,且相应的算法至少需要O(n2)时间。 因此,对于每一行,用一个链表表示。表结点只需要data和link字段。同时,为了随机访问第i行,可用一维数组seq[n]存放n个链表的首结点指针。 此外,用Boolean数组out[n]标记已纳入等价类的元素。 对于前面给出的数据,输入后建立的链表结构如下所示。每个i ? j对应两个结点,seq[i]指向由含有与i直接等价的元素的结点构成的链表。 求等价类可扫描seq数组,从满足out[i] == FALSE的i(0≤i n)开始,将表seq[i]的全部元素归入当前等价类。由于传递性,这些元素对应链表的元素也应归入当前等价类,因此在遍历链表的同时也将元素存入栈中,以搜索所有的相关链表。在此,利用链表反转技巧实现栈的功能。 整个程序如下所示: enum Boolean {FALSE, TRUE}; class ListNode { friend void equivalence( ); private: int data; ListNode *link; ListNode(int); }; typedef ListNode* ListNodePtr; // 以便用new 创建指针数组 ListNode::ListNode(int d) { data = d; link = 0; } void equivalence( ) { // 输入等价对,输出等价类 ifstream inFile(“equiv.in”, iso::in); // “equiv.in”是输入文件 if (!inFile) { cerr “不能打开输入文件” endl; return; } int

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档