计算机等级考试Python二级

news2025/4/4 14:29:00

补记录一下之前考Python二级的一些相关理论记录

数据结构与算法

算法杂度

算法复杂度用来衡量算法的优劣,它包括算法的时间复杂度和算法的空间复杂度

时间复杂度:执行算法所需要的计算量【所需要的计算工作量是用算法所执行的基本运算次数来度量的】

空间复杂度:执行算法所需要的存储空间

数据结构基本概念

什么是数据结构?

数据是需要处理的数据元素的集合,一般来,这些数据元素具有一个共同的特征

结构就是关系,是集合各个数据元素之间存在的某种关系(或联系)。在数据处理领域中,通常把数据元素之间的关系用前/后件关系(直接前驱/直接后继关系)

数据结构分为数据的逻辑结构和数据的存储结构,数据的逻辑结构指反映数据元素之间的逻辑关系(前后件关系)的数据结构,数据的存储结构又称为数据的物理结构,是数据的逻辑结构在计算机存储空间中的存放方式

数据结构的表示

数据的逻辑结构的数学形式定义——数据结构是一个二元组

​ B=(D,R)

B:数据结构

D:数据元素的集合

R:D上元素关系的集合,反映了D中各元素之间的前后件关系

如果将军职看作数据结构:

B=(D,R)

D={连长,排长,班长,士兵}

R={(连长,排长),(排长,班长),(班长,士兵)}

一个数据结构除了用二元关系表示外,还可以用图形来表示。用中间标有元素值的方框表示的数据元素,一般称为数据节点,简称节点。对于每一个二元组,用一条有向线段从前件指向后件

节点基本概念

基本概念含义例子
根节点数据结构中,没有前件的节点在军职图中,“连长”为根节点
终端节点(叶子节点)数据结构中,没有后件的节点在图中,“士兵”是终端节点
内部节点数据结构中,除了根节点和终端节点以外的节点在图中,“排长”和“班长”为内部节点

军职数据结构图

在这里插入图片描述

线性表及其顺序存储结构

数据结构中,线性结构习惯称为线性表,线性表是最简单、也是最常用的一种数据结构。线性表是n(x>=0)个数据元素构成的有限序列,除了第一个元素外的每一个元素,有且只有一个前件;除了最后一个元素外,有且只有一个后件

线性表要么是空表,要么表示为(a,b,c,…,d,e,f,*),括号中的每一个都是线性表中的数据元素,也称为线性表中的一个节点,同一个线性表中的数据元素必定都具有相同的特性,即属于同一数据对象。数组、矩阵、向量等都是线性表

使用线性表存储数据的方式可以这样理解,即”把所有数据用一根线串起来,再存储到物理空间中“

在这里插入图片描述

线性表的顺序存储结构

通常,线性表可以采用顺序存储和链式存储两种存储结构,顺序存储是存储线性结构最简单的结构,具体做法是将线性表中的元素一个接一个的存储在相邻的存储区域中

顺序表具有一下两个基本特征

  • 线性表中所有元素所占的存储空间是连续的
  • 线性表中各数据元素在存储空间中是按逻辑顺序依次存放的
  • 顺序表中,其前、后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面

链表

  • 数据分散的存储在物理空间中,通过一根“线”保存着它们之间的逻辑关系
栈和队列

栈及其基本运算

栈是一种特殊的线性表,它所有的插入与删除都限定在表的同一端进行,允许插入和删除的一端称为栈顶,不允许插入和删除的一端称为栈底;如果栈中没有元素时,称为空栈

栈修改的原则为:先进后出,后进先出

通常使用指针top来指示栈顶的位置,用指针bottom来指向栈底,栈顶指针top反映了栈不断变化的状态

栈的基本运算有三种:入栈、退栈、读栈顶元素

栈和一般线性表的存储方式类似,通常也可以采用顺序存储和链式存储

队列及其基本运算

队列是指允许在一端进行插入,而在另一端进行删除的线性表。允许进行删除运算的一端称为队头(排头),允许进行删除运算的一端称为队尾。

与栈相反,队列又称为“先进先出”或“后进后出”的线性表

在这里插入图片描述

在实际应用中,队列的顺序存储结构一般采用循环队列的形式,循环队列就是将队列存储空间的最后一个位置绕道第一个位置,形成逻辑上的环状空间,供队列循环使用

在循环队列中,用队尾指针rear指向队列中的队尾元素,用队头指针front指向排头元素的前一个位置。因此,从队头指针front指向的后一个位置直到队尾指针rear指向的位置之间所有的元素均为队列中的元素

循环队列的初始状态为空,即front=rear=m

在这里插入图片描述

在循环队列中,当front=rear时,不能确定队列是满还是空。在实际使用循环队列时,通常会增加一个标志s来区分队列是满还是空。当s=0时表示队列空;当s=1且front=rear时表示队列满

线性链表

线性链表的概念

线性列表是指线性表的链式存储结构,简称链表。这种链表每个节点只有一个指针域,又称为单链表

在线性列表中,第一个元素没有前件,因此指向链表中的第一个节点的指针,是一个特殊指针,称为这个链表的头指针;最后一个元素没有后件,因此,线性链表最后一个节点的指针域为空,用NULL或0表示

当线性链表指向第一个数据元素的头指针等于NULL或0时,该表称为空表

在某些应用中,对线性链表中的每个节点设置两个指针,一个指针域存放前件的地址,称为左指针;一个指针域存放后件的地址,称为右指针,这样的线性列表称为双向链表。在双向链表中,由与每个节点设置了两个指针,因此从某一个节点出发,可以很方便的找到其他任意一个节点

带链的栈

栈也可以采用链式存储结构表示,可以把栈组织成一个单链表,这种数据结构称为带链的栈

带链的队列

带链的队列就是用一个单链表来表示队列,队列中每一个元素对应链表中的一个节点

循环链表

在单链表的第一个节点前增加一个表头节点,队头指针指向表头节点,最后一个节点的指针域的值有NULL改为指向表头节点,这样的链表称为循环链表。在循环链表中,所有节点的指针构成了一个环状链

在循环链表中,只要指出表中任何一个节点的位置,就可以从它出发访问到表中其他所有的节点。并且,由于表头节点是循环链表固有的节点,因此,即使表中没有数据元素的情况下,表中也至少有一个节点存在,从而使空表和非空表的运算统一

树和二叉树

树的基本概念

树是一种简单的非线性结构

在这里插入图片描述

在这里插入图片描述

树中的节点数等于树中所有节点的度之和再+1,“树”图中的节点数为9

二叉树及其基本性质

二叉树的特点:

  • 二叉树可以为空,空的二叉树没有节点,非空二叉树有且只有一个根节点
  • 每个节点最多有两棵子树,即二叉树中不存在度>2的节点
  • 二叉树的子树有左右之分,其次序不能任意颠倒

二叉树的性质:
在这里插入图片描述

满二叉树和完全二叉树
在这里插入图片描述

在这里插入图片描述

完全二叉树是指除最后一层外,每一层上的节点数均达到最大值,在最后一层上只缺少右边的若干节点的二叉树

在这里插入图片描述

可知:满二叉树一点是完全二叉树,完全二叉树不一定是满二叉树

完全二叉树具有一下特点:

  • 叶子结点只可能在最后两层出现
  • 对于任一节点,若其右子树的深度为m,则该节点左子树的深度为m或m+1
    在这里插入图片描述

二叉树的存储结构

二叉树通常采用链式存储结构,用于存储二叉树中元素的存储节点由数据域和指针域两部分构成。由于每一个元素可以有两个后件,因此用于存储二叉树的存储节点的指针域有两个:一个用与指向该节点的左子节点,即左指针域;一个用于指向该节点的右子节点,即右指针域
在这里插入图片描述

由于二叉树的存储结构中每一个存储节点有两个指针域,因此二叉树的链式存储结构也称为二叉链表

满二叉树和完全二叉树可以按层次进行顺序存储

二叉树的遍历

二叉树的遍历是指不重复地访问二叉树的所有节点,在遍历二叉树的过程中,一般先遍历左子树,再遍历右子树。在先左后右的原则下,根据访问根节点的次序不同,可分为前序遍历、中序遍历、后序遍历

在这里插入图片描述

前序遍历

首先访问根节点,然后遍历左子树,最后遍历右子树

二叉树的前序遍历序列为:A B D H E I C F G

中序遍历

首先遍历左子树,然后访问根节点,最后遍历右子树

二叉树的中序遍历序列为:H D B E I A C F G

后序遍历

首先遍历左子树,然后遍历右子树,最后访问根节点

二叉树的后序遍历序列为:H D I E B G F C A

如果已知前序遍历和中序遍历可以唯一确定这棵二叉树;已知中序遍历和后序遍历也可以唯一确定这颗二叉树。但是已知一棵二叉树的前序遍历序列和后序遍历序列,不能唯一确定这棵二叉树

查找

顺序查找

基本思想:从线性表的第一个元素开始,逐个将线性表中的元素与被查元素进行比较在以下情况下,顺序查找是唯一的选择:

  1. 线性表为无序表(即表中的元素是无序的),则不管采用的是顺序存储结构还是链式存储结构,都只能用顺序查找
  2. 即使线性表是有序的,如果采用的是链式存储结构,也只能用顺序查找

二分法查找

能使用二分法查找的线性表必须满足两个条件:

  • 用顺序存储结构

  • 线性表是有序表

    此处的“有序”特指:元素按非递减顺序排列,即从小到大排列,但是允许相邻元素相等

将X与线性表的中间项比较过程如下:

  1. 如果X的值与中间项的值相等,则查找成功,结束查找
  2. 如果X的值小于中间项的值,则在线性表的前半部分以二分法继续查找
  3. 如果X的值大于中间相的值,则在线性表的后半部分以二分法继续查找

在这里插入图片描述

排序
交换类排序

交换类排序是借助数据元素的“交换”来进行排序的一种方法

冒泡排序

在数据元素的序列中,对于某个元素,如果其后存在一个元素小于它,则称之存在一个逆序。冒泡排序的基本思想就是通过两两相邻数据元素之间的比较和交换,不断的消去逆序,直到所有数据元素以非递减顺序排列为止

在最坏情况下:对长度为n的线性表排序,冒泡排序需要比价的次数为n(n-1)/2

快速排序

在待排序的n个元素中取一个元素K(通常取第一个元素),以元素K作为分隔标准,把所有小于元素K的数据元素都移到K前面,把所有大于元素K的数据元素都移到K后面。这样,以K为分界线,把线性表分割为两个子表,这称为一趟排序。然后,对K前后的两个子表分别重复上述过程,知道分割的子表的长度为1,此时线性表已经排序完成

在最坏情况下:需要进行n(n-1)/2次,实际的排序效率要比冒泡排序高的多

插入类排序

插入类排序是每次将一个待排序元素,按其元素值的大小插入前面已经排好序的子表中的适当位置,直到全部元素插入完成为止

简单插入排序

把n个代排序的元素看成一个有序表和一个无序表,开始时,有序表只包含一个元素,而无序表包含另一个n-1元素,每次取无序表中的第一个元素插入有序表的正确位置,使之成为增加一个新的有序表。插入元素时,插入位置及其后的记录依次向后移动。最后有序表的长度为n,而无序表为空,此时排序完成

在最坏的情况下,简单插入排序需要进行n(n-1)/2次

希尔排序

在这里插入图片描述

选择类排序

通过每一次从待排序序列中选取值最小的元素,然后把其顺序放在已排好序的有序子表的后面,直到全部序列满足排序要求

简单选择排序

先从所有n个待排序的数据元素中选择最小的元素,将该元素与第一个元素交换,再从剩下的n-1个元素中选取最小的元素和第2个元素交换,重复操作直到所有元素有序为止

简单选择排序在最坏的情况下:需要比较n(n-1)/2次

程序设计基础

程序设计风格

程序的质量主要受到程序设计的方法、技术以及风格等因素的影响。“清晰第一、效率第二”是当今主导的程序设计风格

要形成良好的程序设计风格,主要应注重和考虑一下因素:

  1. 源程序文档化
  2. 数据说明风格:次序应规范化;变量安排有序化;使用注释来说明复杂数据的结构等
  3. 语句的结构:不要同一行写多个语句;首先保证程序正确,然后提高速度;尽可能多使用库函数;避免不必要的转移等
  4. 输入和输出:对所有的输入数据都要进行检验,确保输入数据的合法性;在采用交互式输入/输出方式进行输入时,在屏幕上使用提示符明确提示输入的请求,同时在数据输入过程中输入结束时,应在屏幕上给出状态信息;给所有的输出加注释,并设计良好输出的报表格式等
结构化程序设计

程序设计方法的发展而言,主要经历了结构化程序设计和面向对象的程序设计两个阶段

结构化程序设计的原则

结构化程序设计的主要原则是指顶向下、逐步求精、模块化及限制使用goto语句

结构化程序设计的基本结构

结构化程序设计方法是使用“顺序结构”“选择结构”及“循环结构”3中基本结构就足以表达其他各种结构的程序设计方法。它们的共同特征是:严格地只有一个入口和一个出口

遵循结构化程序的设计原则,按此原则设计出的程序具有:

  • 程序易于理解、使用及维护
  • 提高编程工作的效率,降低了软件开发成本
面向对象方法

面向对象方法的优点:

  • 与人类习惯的思维方法一直
  • 稳定性好
  • 可重用性号
  • 便于开发大型软件产品
  • 可维护性好
面向对象方法的基本概念

对象

面向对象方法中的对象由两部分组成

  1. 数据,也称为属性,即对象所包含的信息,表示对象的状态
  2. 方法,也称为操作,及对象能执行的功能、所具有的行为

对象的基本特点:

特点描述
标识唯一性对象是看区分的,且由对象的本质来区分,而不是通过描述来区分
分类性指可以将具有相同属性和操作的对象抽象成类
多态性指同一个操作可以是不同对象的行为,不同对象执行同一操作可以产生不同的结果
封装性从外面只能看到对象的外部特性,对象的内部对外是不可见的
模块独立性由于完成对象功能所需的元素都被封装在对象内部,因此模块独立性好

类和实例

类是具有共同属性、共同方法的对象的集合,是关于对象的抽象描述,反映属于该对象类型的所有对象性质。一个具体对象则是其对类的一个实例

类是关于对象性质的描述,它同对象一样,包括一组数据属性和在数据上的一组合法操作

消息

消息传递是对象间通信的手段,一个对象通过向另一个对象发送消息来请求其服务

继承

在面向对象的程序设计中,类和类之间可以继承,一个子类可以直接继承其父类的全部描述(属性和操作),这些属性和操作在子类中不必定义。此外,子类还可以定义它自己的属性和操作

多态性

在面向对象的软件技术中,多态性是指子类对象可以像父类对象那样使用,同样的消息(如方法)既可以发送给父类对象也可以发送给子类对象

软件工程基础

软件工程的基本概念

软件定义与软件特点

计算机软件是由程序、数据以及相关文档构成的完整集合,它与计算机硬件一起组成计算机系统。其中,程序和数据是机器可执行的,文档是机器不可执行的

软件具有一下特点:

  • 软件是一种逻辑实体,具有抽象性
  • 软件没有明显的制作过程
  • 软件在使用期间不存在磨损、老化问题
  • 软件对硬件和环境具有依赖性
  • 软件复杂性高,成本高
  • 软件开发涉及诸多的社会因素

软件的分类

计算机软件按功能分为系统软件、应用软件、支撑软件(工具软件)

系统软件是管理计算机资源,提高计算机的使用效率,为用户提供各种服务的软件,如操作系统、数据库管理系统、编译程序、汇编程序及网络软件等

应用软件是为了应用于特定领域开发的软件

支撑软件是介于系统软件和应用软件主键,协助用户开发软件的工具软件,其中包括帮助程序人员开发和维护软件产品的工具软件,也包括帮助管理人员控制开发进程和项目管理的工具软件

软件工程

软件工程是试图用工程、科学以及数学的原理和方法研制、维护计算机软件的有关技术和管理方法,是应用于计算机软件的定义、开发及维护的一整套方法、工具、文档、实践标准及工序。软件工程包含3个要素:方法、工具、过程

抽象、信息隐蔽、模块化、局部化、确定性、一致性、完备性以及可验性是软件工程的原则

软件过程

软件过程是把输入转换为输出的一组彼此相光的资源和活动。软件过程是为了获得高质量人家软件所需要完成的一系列任务的框架,它规定了完成各项任务的工作步骤。软件过程所进行的基本活动主要有软件规格说明、软件开发或软件设计与实现、软件确认、软件演进

软件生命周期

软件开发应遵循软件生命周期。软件生命周期分为3个时期,共8个阶段

在这里插入图片描述

软件生命周期各阶段的主要任务:

  • 问题定义:确定要解决的问题是什么
  • 可行性研究:决定该问题是否存在一个可行的解决办法,确定完成开发任务的实施计划
  • 需求分析:对待开发软件提出的需求进行分析并给出详细定义。编写软件规格说明书和初步的用户手册,提交评审
  • 软件设计:通常又分为概要设计和详细设计两个阶段,其目的是给出软件的结构、模块的划分、功能的分配以及处理流程等。软件设计阶段提交评审的文档有概要设计说明书、详细的设计说明书及测试计划初稿
  • 软件实现:在软件设计的基础上编写程序。
  • 软件测试:在设计测试用例的基础上,检验软件的各个组成部分,编写测试分析报告
  • 使用和维护:将已交付的软件投入运行,同时不断地维护,进行必要且可惜的扩充和删改
需求分析及其方法

结构化分析方法的常用工具

结构化分析方法是使用数据流图、数据字典、结构化英语、判定表及判定树等工具,来建立一种新的,被称为结构化规格说明的目标文档

需求分析的结构化分析方法中常用的工具是数据流图

在这里插入图片描述

软件设计及其方法

软件设计的基本概念

软件设计的基本目标就是用比价抽象、概况的方式确定目标系统如何完成预定的任务。也就是说,软件设计是确定系统的物理模型

从工程管理的角度来看可分为两步:概要设计和详细设计

从技术方面来看,软件设计包括结构设计、数据设计、接口设计、过程设计

将软件按功能分解为组成模块,是概要设计的主要任务。划分模块要本着提高独立性的原则。模块独立性的高低决定设计的好坏,而设计又是决定软件质量的关键环节。模块的独立性可以由两个定性标准度量:耦合性和内聚性

  1. 耦合性衡量不同模块彼此间互相依赖(连接)的紧密程度
  2. 内聚性衡量一个模块内部各个元素彼此结合的紧密程度

模块的内聚性越高,模块间的耦合性就越低,可见模块的耦合性和内聚性是相互关联的。因此应尽量做到高内聚、低耦合

软件测试

如果根据软件是否需要被执行,可以分为静态测试和动态测试

如果根据功能划分,可以分为白盒测试和黑盒测试

静态测试和动态测试

  1. 静态测试:静态测试包括代码检查、静态结构分析、代码质量度量等;静态测试不实际运行软件,主要通过人工进行分析
  2. 动态测试:动态测试就是通常所说的上机测试,通过运行软件来检验软件中的动态行为和运行结果的正确性

动态测试的关键是设计高效、合理的测试用例。测试用例就是为测试设计的数据,由测试输入数据和预期的输出结构两部分组成

白盒测试和黑盒测试

  1. 白盒测试:白盒测试假设程序装在一只透明的白盒子里,测试者完全了解程序的结构和处理过。它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按照预定的要求正确的工作
    白盒测试的主要技术有逻辑覆盖测试、基本路径测试等。其中逻辑覆盖测试又分为语句覆盖、路径覆盖、判定覆盖、条件覆盖及判断-条件覆盖
  2. 黑盒测试:黑盒测试友又称功能测试或数据驱动测试,着重测试软件功能
    常见的黑盒测试方法和技术有等价类划分法、边界值分析法、错误推测法即因果图

数据库设计基础

数据库的基本概念

数据

描述事物的符号记录称为数据。数据库系统中的数据具有长期保存的特点,它们通常称为持久性数据,而把一般存放在计算机内存中的数据称为临时性数据

数据库

数据库是指长期存储在计算机内的、有组织的、可共享的数据集合

通俗理解,数据就是存放数据的仓库,只不过数据库存放数据是按一定格式的数据模式存放,数据库中的数据具有两大特点:“集成”与“共享”

数据库管理系统

数据库管理系统是数据库的机构,它是一个系统软件,负责数据库中的数据组织,数据操纵,数据维护、控制及保护,数据服务等

数据库管理系统的主要功能包括:数据模式定义,数据存取的物理构造;数据操纵;数据完整性、安全性的定义与检查;数据库的并发控制与故障回复;数据的服务等

数据库管理系统提供了相应的数据语言:

  • 数据定义语言:负责数据的模式定义与数据的物理存取构造
  • 数据操纵语言:负责数据的操纵,包括增删改查等操作
  • 数据控制语言:负责数据完整性、安全性的定义与检查,以及并发控制、故障恢复等功能
E-R模型

E-R模型采用了3个基本概念:实体、属性及联系

E-R模型的基本概念

  • 实体:客观存在并且可以相互区别的事务称为实体
  • 属性:描述实体的特性称为属性
  • 联系:实体之间的对应关系称为联系

实体间联系根据一个实体型中可能出现的每一个实体和另一个实体型中有多少个具体实体存在联系,可归纳为3中类型:

类型实例
一对一联系一个学校只可以有一个校长,而校长不能在其他学校任职
一对多联系一个部门可以有多个职员,一个职员不能有多个部门
多对多联系一个学生可以选多门课,一节课也可以被多个学生选

E-R图

E-R模型可以用图形来表示,该图形称为E-R图

概念含义
实体集表示法E-R图用矩形表示实体集,并在矩形内写上实体集的名字
属性表示法E-R图用椭圆形表示属性,在椭圆形内写上该属性的名称
联系表示法E-R图用菱形表示联系,在菱形内写上联系名

在这里插入图片描述

关系模型的常用术语
在这里插入图片描述

关系具有一下7个性质:

  • 元组个数的有限性:二维表中元组的个数是有限的
  • 元组的唯一性:二维表中任意两个元组不能完成相同
  • 元组的次序无关性:二维表中元组的次序,即行的次序可以任意交换
  • 元组分量的原子性:二维表中元组的分量是不可分割的基本数据项
  • 属性名的唯一性:二维表中不同的属性要有不同的属性名
  • 属性的次序无关性:二维表中属性的次序可以任意交换
  • 分量值域的同一性:二维表属性的分量具有与该属性相同的值域,或者是列是同质的

满足7个性质的二维表称为关系,以二维表为基本结构所建立的模型称为关系模型

关系模型的完整性约束

  1. 实体完整性约束:若属性M是关系的主键,那么M的属性值不能为空
  2. 参照完整性约束:若属性A是关系M的外键,它与关系N的主键相对应,则关于关系M中的每个元组在A上的值:要么为空,要么为N中的主键值
  3. 用户定义的完整性约束:用户定义的完整性约束反映了某一具体应用所涉及的数据必须满足的语义要求
关系代数

关系代数就是关系与关系主键的运算。在关系代数中,进行运算的对象都是关系,运算的结果也是关系

差运算

交运算

并运算

笛卡尔积运算

投影运算

在关系模式中指定若干个属性组成的新的关系称为投影

对R关系进行投影运算的结果记为

选择运算

除运算

连接运算

数据库设计

数据库设计概述

基本思想:过程迭代和逐步求精

方法:面向数据的方法和面向过程的方法

数据库设计的需求分析

需求收集和分析是数据库设计的第一阶段,常采用结构化分析方法(指顶向下、组层分解)和面向对象的方法,主要工作有绘制数据流图、分析数据、分析功能、确定功能处理模块和数据间关系

数据字典包括数据项、数据结构、数据流、数据存储和处理过程,是对系统中数据的详尽描述

范式

关系数据库中的关系需要满足一定要求,满足不同程度要求的关系为不同的范式。满足最低要求的关系叫第一范式,简称1NF;在满足第一范式的基础上,进一步满足更多要求的关系是第二范式,以此类推。

  • 第一范式:每列(或每个属性)都是不可再分的最小数据单元,则满足第一范式
  • 第二范式:在第一范式基础上更进一层,目标是确保表中的每列都和主键相关
    如果一个关系满足第一范式,并且除了主键以外的其他列,都依赖于该主键,则满足第二范式
  • 第三范式:在第二范式的基础上更近一层,目标是确保每列都和主键列直接想关,而不是简介想关。如果一个关系满足第二范式,并且除了主键意外的其他列都不依赖主键列,则满足第三范式

Python基础

匿名函数

函数名=lambda 参数:表达式

a=lambda x:print(x)

随机数

随机生成范围为[a,b]的整数

random.randint(a,b)

随机生成范围为[a,b]的小数

 random.unifrom(a,b)

生成一个范围为[a,b],以c为步长的随机整数

random.randrange(a,b,c)

生成一个二进制长度为k的随机整数

random.getrandbits(k)

从序列类型中随机选择一个元素

random.choice([1,2,3,4])

把序列中的元素随机排列,返回打乱的序列

random.shuffle([1,2,3,4])

从pop类型中选取k个元素,以列表形式返回

random.sample('abcdefg',3)

pop类型:个人认为是列表、字符串、元组

format进阶用法

填充

print("{:>10}".format('A')  # 左对齐
print("{:<10}".format('A')  # 右对齐
print("{:*>10}".format('A')  # 左对齐填充*
print("{:0=10}".format(3))   # 只适用于数学填充
循环队列及其运算

循环队列的初始状态为空,即front=rear=m

在循环队列中,当front=rear !=m时,队列可能为空也可能为满

如果front<rear,则队列中的元素个数为rear-front个

如果front>rear,则队列中的元素个数为rear-front+m

线性链表

带链的栈:栈为空时,栈顶指针和栈底指针都为NULL,栈中只有一个元素时,栈顶指针和栈底指针都指向这个元素,top !=bottom时,无法确定栈中有多少元素。同样使用与带链的队列

树与二叉树

树的重要性质:树中的节点数等于树中所有节点的度之和+1

前序序列 后序序列 中序序列

示例:前序:ABDEGHCFIJ 中序:DBGEHACIFJ 后序:DGHEBIJFCA

根节点为:A

  • 技巧1:根据中序序列可以看出根节点A的左侧为左子树,右侧为右子树,在前序和后序序列中,不管左子树节点顺序怎样,位置都是连续的

    如:前:BDEGH 中:DBGEH 后:DGHE

  • 技巧2:中序序列和后序序列访问的顺序都是先访问左子树,因此访问的第一个节点是一致的
    如:都访问D

  • 若二叉树的前序遍历序列与中序遍历序列相同,则二叉树的任意一个节点均不存在左子树

  • 若二叉树的后序遍历序列与中序遍历序列相同,则二叉树中的任意一个节点均不存在右子树

性质:

  • 对于任何一棵二叉树,度为0的节点(即叶子结点)总是比度为2的节点多1个

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/293.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

子串和子序列问题-动态规划向

1. 子串子序列问题概述 有关于子序列和子串的问题是字符串或者数组经常会遇到的问题&#xff0c;一般我们经常使用多指针&#xff0c;滑动窗口&#xff0c;回溯&#xff0c;动态规划的方式去解决&#xff0c;而本篇重点关注能用动态规划解决或者说明显使用动态规划解决的子串问…

Java开发手册解析_编程规约-集合处理

前言 《Java开发手册&#xff08;黄山版&#xff09;》编程规约-集合处理 该章节的知识点基本都来源于jdk源码&#xff0c;将结合源码及例子进行理解 备注&#xff1a;文章中的详细及说明为手册本身内容 博客地址&#xff1a;芒果橙的个人博客 【http://mangocheng.com】 1.【强…

服务与发现

文章目录服务与发现什么是服务发现应用层服务发现模式平台层服务发现模式服务与发现 假设你正在编写一些调用具有 REST API 的服务的代码&#xff0c;为了发出请求&#xff0c;你的代码需要知道服务实例的网络位置&#xff08;IP 地址和端口&#xff09;&#xff0c;在物理硬件…

整型数据是如何在内存中存储的

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;《初识C语言》 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一. 整型在内存中的存储1.1 整型…

Vue2生命周期详细图解和代码

加油&#xff0c;新时代打工人&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;看图。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"…

C语言数据结构——链表

C语言数据结构——链表 链表包括单链表&#xff0c;双链表&#xff0c;循环链表等。 而今天要说的是单链表&#xff0c;它是一个线性表&#xff0c;它在内存中是无序的&#xff0c;由一个个指针来连接。 图示&#xff1a; 小方块代表的就是存储的数据&#xff0c;箭头就是指…

(46)STM32——FATFS文件系统实验

目录 学习目标 运行结果 文件系统 常用系统 FATFS 特点 结构图 移植步骤 disk_initialize disk_status disk_read disk_write disk_ioctl get_fattime 代码 总结 学习目标 我们要来介绍的是FATFS文件系统&#xff0c;这是一个为嵌入式设计的文件系统&#xff0c…

大学科目网课搜题接口

大学科目网课搜题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点…

【1024社区大奖】让你一小时内狂揽大奖[保姆级教程①]

四层挑战&#xff0c;一小时内拿捏&#xff01;&#xff08;上&#xff09;一、龙蜥社区大奖二、战前准备1.注册码云Gitee2.注册龙蜥社区三、开始挑战&#xff0c;包揽大奖&#xff01;①第一层&#xff1a;小龙推荐 [15分钟]②第二层随机试炼 [15分钟]一、龙蜥社区大奖 活动分…

【论文笔记】Transformer-based deep imitation learning for dual-arm robot manipulation

【论文笔记】Transformer-based deep imitation learning for dual-arm robot manipulation Abstract 问题&#xff1a;In a dual-arm manipulation setup, the increased number of state dimensions caused by the additional robot manipulators causes distractions and …

微信小程序入门与实战之更多电影列表与电影搜索

wx.request的更多参数详解 在网络请求中我们可以采用下面这种形式&#xff1a; 如果我们可以不采用直接写在url的方式我们可以采用data的方式&#xff1a; 默认请求方式是GET我们可以通过设置method修改请求方式&#xff1a; 更多电影页面 我们要实现的效果&#xff1a;…

应用层——HTTP协议

文章目录一、应用层1.1 应用层概念1.2 再谈协议二、网络版本的计算器网络计算器编码部分版本1&#xff1a;原生版本版本2&#xff1a;引入序列化和反序列化三、HTTP协议3.1 URL3.2 urlencode和urldecode3.3 HTTP协议格式3.3.1 请求报文3.3.2 响应报文3.4 HTTPDemo3.4.1改进3.4.…

这里不适合做技术

6点&#xff0c;の&#xff0c;下班了又是一个差不多一样的星期过去了&#xff0c;又是一个差不多的周末要到来了。我也差不多要离开这家公司了&#xff0c;入职4年多&#xff0c;那时候雄心壮志&#xff0c;决定干一番大事业&#xff0c;那个时候的自己&#xff0c;技术的炉火…

【图像融合】基于 DCT结合拉普拉斯金字塔的图像融合附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

论文理解与笔记【CVPR_2022.6】Region-Aware Face Swapping

论文理解与笔记【CVPR_2022】Region-Aware Face Swapping论文的缩写全拼&#xff1a;一、贡献二、介绍三、提出问题&#xff0c;也是论文解决的问题四、具体实现方案五、实验六、最终感想和总结论文地址&#xff1a;传送门或者传送门2 先看看效果&#xff1a; 论文的缩写全拼…

【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计

最近设计了一个项目基于单片机的八层电梯系统&#xff0c;与大家分享一下&#xff1a; 一、基本介绍 项目名&#xff1a;八层电梯 项目编号&#xff1a;mcuclub-jj-003 单片机类型&#xff1a;STC89C52、STM32F103C8T6 功能简介&#xff1a; 1、通过3*4矩阵键盘实现电梯内部…

【Linux修炼】5.vim详解

每一个不曾起舞的日子&#xff0c;都是对生命的辜负。 Linux-yum&vim工具的使用本节目标1. Linux 软件包管理器 yum1.1 什么是软件包1.2 关于rzsz1.3 查看软件包1.4 如何安装软件1.5 如何卸载软件2. Linux编辑器-vim的使用&#xff08;重点&#xff09;2.1 什么是vim&#…

C++内存管理

1.C内存分布 学习C内存分布之前&#xff0c;先小试牛刀一下。 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd&quo…

webpack--》webpack底层深入讲解,从初识到精通,真正实现从0到1的过程

目录 webpack webpack的基本使用 安装 配置 修改自定义打包的入口与出口 优化js或图片的存放路径 配置webpack中符号的使用 webpack中相关插件安装 webpack-dev-server html-webpack-plugin clean-webpack-plugin webpack中的loader 打包处理css文件 打包处理les…

TPM分析笔记(十二)TPM PCR操作

目录一、PCR初始化&#xff08;Initializing PCR&#xff09;二、PCR的扩展&#xff08;Extend of a PCR&#xff09;2.1 其他PCR命令三、使用PCR Banks进行扩展&#xff08;Using Extend with PCR Banks&#xff09;四、事件记录&#xff08;Recording Events&#xff09;五、…