-
行逻辑链接的顺序表 压缩存储稀疏矩阵 细说
所属栏目:[语言] 日期:2022-07-08 热度:164
前面学习了如何使用三元组顺序表存储稀疏矩阵,其实现过程就是将矩阵中各个非 0 元素的行标、列标和元素值以三元组的形式存储到一维数组中。通过研究实现代码你会发现,三元组顺序表每次提取指定元素都需要遍历整个数组,运行效率很低。 本节将学习另一种[详细]
-
十字链表法 十字链表压缩存储稀疏矩阵解析
所属栏目:[语言] 日期:2022-07-08 热度:102
对于压缩存储稀疏矩阵,无论是使用三元组顺序表,还是使用行逻辑链接的顺序表,归根结底是使用数组存储稀疏矩阵。介于数组 不利于插入和删除数据 的特点,以上两种压缩存储方式都不适合解决类似 向矩阵中添加或删除非 0 元素 的问题。 例如,A 和 B 分别为[详细]
-
矩阵 稀疏矩阵 的转置算法 C语言 说明
所属栏目:[语言] 日期:2022-07-08 热度:129
矩阵(包括稀疏矩阵)的转置,即互换矩阵中所有元素的行标和列标, 矩阵转置的实现思路是:不断遍历存储矩阵的三元组表,每次都取出表中 j 列最小的那一个三元组,互换行标和列标的值,并按次序存储到一个新三元组表中,。 例如,将图 2a) 三元组表存储的[详细]
-
什么叫做广义表
所属栏目:[语言] 日期:2022-07-08 热度:123
前面讲过,数组即可以存储不可再分的数据元素(如数字 5、字符 a),也可以继续存储数组(即 n 维数组)。 但需要注意的是,以上两种数据存储形式绝不会出现在同一个数组中。例如,我们可以创建一个整形数组去存储 {1,2,3},我们也可以创建一个二维整形数[详细]
-
广义表的存储结构详解 包括2种存储方案
所属栏目:[语言] 日期:2022-07-08 热度:160
由于广义表中既可存储原子(不可再分的数据元素),也可以存储子表,因此很难使用顺序存储结构表示,通常情况下广义表结构采用链表实现。 使用顺序表实现广义表结构,不仅需要操作 n 维数组(例如 {1,{2,{3,4}}} 就需要使用三维数组存储),还会造成存储空[详细]
-
广义表的复制解说 含C语言代码实现
所属栏目:[语言] 日期:2022-07-08 热度:86
对于任意一个非空广义表来说,都是由两部分组成:表头和表尾。反之,只要确定的一个广义表的表头和表尾,那么这个广义表就可以唯一确定下来。 代码实现: #include stdio.h #include stdlib.h typedef struct GLNode{ int tag;//标志域 union{ char atom;/[详细]
-
数据结构的树存储构架
所属栏目:[语言] 日期:2022-07-08 热度:156
将具有一对多关系的集合中的数据元素按照图 1(A)的形式进行存储,整个存储形状在逻辑结构上看,类似于实际生活中倒着的树(图 1(B)倒过来),所以称这种存储结构为树型存储结构。 树的结点 结点:使用树结构存储的每一个数据元素都被称为结点。例如,[详细]
-
什么是二叉树 包含满二叉树与完全二叉树
所属栏目:[语言] 日期:2022-07-08 热度:157
通过《树的存储结构》一节的学习,我们了解了一些树存储结构的基本知识。本节将给大家介绍一类具体的树结构二叉树。 经过前人的总结,二叉树具有以下几个性质: 二叉树中,第 i 层最多有 2i-1 个结点。 如果二叉树的深度为 K,那么此二叉树最多有 2K-1 个[详细]
-
二叉树的顺序存储结构 瞧了无师自通
所属栏目:[语言] 日期:2022-07-08 热度:112
二叉树的存储结构有两种,分别为顺序存储和链式存储。本节先介绍二叉树的顺序存储结构。 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。需要注意的是,顺序存储只适用于完全二叉树。换句话说,只有完全二叉树才可以使用顺序表存储。因此,如果我[详细]
-
树的双亲表示法 包含C语言达成代码
所属栏目:[语言] 日期:2022-07-08 热度:137
前面讲了二叉树的顺序存储和链式存储,本节来学习如何存储具有普通树结构的数据。 普通树的过程转化为 C 语言代码为: #define MAX_SIZE 100//宏定义树中结点的最大数量 typedef char ElemType;//宏定义树结构中数据类型 typedef struct Snode{ TElemType[详细]
-
回看算法详解
所属栏目:[语言] 日期:2022-07-08 热度:135
回溯算法,又称为试探法。解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择。这种走不通就回退再走的方法就是回溯算法。 例如,在解决列举集合 {1,2,3} 中所有子集的[详细]
-
n个结点构造几种树
所属栏目:[语言] 日期:2022-07-08 热度:81
本节要讨论的是当给定 n(n=0)个结点时,可以构建多少种形态不同的树。 如果两棵树中各个结点的位置都一一对应,可以说这两棵树相似。如果两棵树不仅相似,而且对应结点上的数据也相同,就可以说这两棵树等价。本节中,形态不同的树指的是互不相似的树。[详细]
-
何为描述符 Python描述符详解
所属栏目:[语言] 日期:2022-07-07 热度:183
Python 中,通过使用描述符,可以让程序员在引用一个对象属性时自定义要完成的工作。 本质上看,描述符就是一个类,只不过它定义了另一个类中属性的访问方式。换句话说,一个类可以将属性管理全权委托给描述符类。 描述符是 Python 中复杂属性访问的基础,[详细]
-
Python property 函数 概念属性
所属栏目:[语言] 日期:2022-07-07 热度:137
前面章节中,我们一直在用类对象.属性的方式访问类中定义的属性,其实这种做法是欠妥的,因为它破坏了类的封装原则。正常情况下,类包含的属性应该是隐藏的,只允许通过类提供的方法来间接实现对类属性的访问和操作。 因此,在不破坏类封装原则的基础上,[详细]
-
Python封装机制及达成方法
所属栏目:[语言] 日期:2022-07-07 热度:166
不光是 Python,大多数面向对象编程语言(诸如 C++、Java 等)都具备 3 个典型特征,即封装、继承和多态。其中,本节重点讲解 Python 类的封装特性,继承和多态会在后续章节给大家做详细讲解。 简单的理解封装(Encapsulation),即在设计类时,刻意地将一[详细]
-
Python继承机制及其利用
所属栏目:[语言] 日期:2022-07-07 热度:60
Python 类的封装、继承、多态 3 大特性,前面章节已经详细介绍了 Python 类的封装,本节继续讲解 Python 类的继承机制。 继承机制经常用于创建和现有类功能类似的新类,又或是新类只需要在现有类基础上添加一些成员(属性和方法),但又不想直接将现有类代[详细]
-
Python父类方式重写 入门必读
所属栏目:[语言] 日期:2022-07-07 热度:89
前面讲过在 Python 中,子类继承了父类,那么子类就拥有了父类所有的类属性和类方法。通常情况下,子类会在此基础上,扩展一些新的类属性和类方法。 但凡事都有例外,我们可能会遇到这样一种情况,即子类从父类继承得来的类方法中,大部分是适合子类使用的[详细]
-
Python super 函数 调用父类的创造方法
所属栏目:[语言] 日期:2022-07-07 热度:191
前面不止一次讲过,Python 中子类会继承父类所有的类属性和类方法。严格来说,类的构造方法其实就是实例方法,因此毫无疑问,父类的构造方法,子类同样会继承。 但我们知道,Python 是一门支持多继承的面向对象编程语言,如果子类继承的多个父类中包含同名[详细]
-
Python __slots__ 限制类实例动态增加属性和方法
所属栏目:[语言] 日期:2022-07-07 热度:96
通过学习《Python类变量和实例变量》一节,了解了如何动态的为单个实例对象添加属性,甚至如果必要的话,还可以为所有的类实例对象统一添加属性(通过给类添加属性)。 那么,Python 是否也允许动态地为类或实例对象添加方法呢?答案是肯定的。我们知道,[详细]
-
Python type 函数 动态创造类
所属栏目:[语言] 日期:2022-07-07 热度:152
我们知道,type() 函数属于 Python 内置函数,通常用来查看某个变量的具体类型。其实,type() 函数还有一个更高级的用法,即创建一个自定义类型(也就是创建一个类)。 type() 函数的语法格式有 2 种,分别如下: type(obj) type(name, bases, dict) 以上[详细]
-
Python MetaClass元类解说
所属栏目:[语言] 日期:2022-07-07 热度:125
MetaClass元类,本质也是一个类,但和普通类的用法不同,它可以对类内部的定义(包括类属性和类方法)进行动态的修改。可以这么说,使用元类的主要目的就是为了实现在创建类时,能够动态地改变类中定义的属性或者方法。 不要从字面上去理解元类的含义,事[详细]
-
什么叫做多态 Python多态及用法详解
所属栏目:[语言] 日期:2022-07-07 热度:198
在面向对象程序设计中,除了封装和继承特性外,多态也是一个非常重要的特性,本节就带领大家详细了解什么是多态。 我们都知道,Python 是弱类型语言,其最明显的特征是在使用变量时,无需为其指定具体的数据类型。这会导致一种情况,即同一变量可能会被先[详细]
-
Python pass语句及其用途
所属栏目:[语言] 日期:2022-07-06 热度:171
在实际开发中,有时候我们会先搭建起程序的整体逻辑结构,但是暂时不去实现某些细节,而是在这些地方加一些注释,方面以后再添加代码,请看下面的例子: 纯文本复制 age = int( input(请输入你的年龄:) ) if age 12 : print(婴幼儿) elif age = 12 and ag[详细]
-
Python assert断言函数和用法
所属栏目:[语言] 日期:2022-07-06 热度:106
Python assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。 assert 语句的语法结构为: assert 表达式 assert 语句的执行流程可[详细]
-
Python while循环语句解析
所属栏目:[语言] 日期:2022-07-06 热度:88
Python 中,while 循环和 if 条件分支语句类似,即在条件(表达式)为真的情况下,会执行相应的代码块。不同之处在于,只要条件为真,while 就会一直重复执行那段代码块。 while 语句的语法格式如下: while 条件表达式: 代码块 这里的代码块,指的是缩进[详细]