Python计算机⼆级之公共基础知识
⼀、算法和数据结构
算法及其基本特征:
  算法是对解题⽅法的准确⽽完整的描述。
  算法的四个基本特征:可⾏性,确定性,有穷性,拥有⾜够的情报。
算法的复杂度:
  算法的时间复杂度是指执⾏算法所需的计算⼯作量,⽽计算⼯作量⼀般通过基本运算次数来衡量
  算法的空间复杂度是指执⾏算法所需要的内存空间
数据结构:
  数据结构是指有关联的数据元素的集合。数据元素⼀般有共同的特征,例如早餐,午餐,晚餐构成⼀⽇三餐名的集合。⽽结构指的是数据元素之间的关系,继续引⽤前⾯的例⼦,早餐是午餐的前件,晚餐是午餐的后件,这就是这三个元素的关系。
数据结构的表⽰:
  B = (D,R),B表⽰数据结构,D表⽰数据元素的集合,R是D中元素间关系的集合。此外数据结构还能⽤图形来表⽰,⽤箭头来表⽰元素间的关系。
线性结构和⾮线性结构:
  线性结构指有且只有⼀个根节点(指起始元素),每个节点最多只有⼀个前件也最多只有⼀个后件的⾮空数据结构
  不满⾜线性结构条件的就是⾮线性结构
线性表:
  数据结构中,线性结构习惯性称为线性表。线性表若没有元素,则称为空表。若有元素,可表⽰为(a1,a2,a3,a4……)
线性表的两种储存结构:
  顺序储存:将线性表中的元素⼀个接⼀个的储存在相邻的存储区域中,按顺序储存的线性表也称为顺
序表。这种表有两个特征:表中元素所占存储空间是连续的;表中元素在存储空间中是按逻辑顺序存放的
  链接储存:链表
栈和队列:
  栈是⼀种特殊的线性表,它所有的插⼊和删除都在表的同⼀端进⾏,允许插⼊与修改的⼀端为栈顶,另⼀端为栈底。当栈中没有元素时,称为空栈。
  栈的修改原则是后进先出或先进后出。栈的基本运算包括:⼊栈、退栈、读栈顶元素。
  队列是指允许在⼀端进⾏插⼊另⼀端进⾏删除的线性表,允许删除的那⼀端称为队头,允许插⼊那⼀端称为队尾。
  队列的修改原则是先进先出或后进后出。队列可⽤顺序存储的线性表来表⽰,⽤排头指针front指⽰退队运算的队头位置,⽤队尾指针rear指⽰⼊队运算的队尾位置。队列的顺序存储结构⼀般采⽤循环队列的形式,也就是将队列存储的最后⼀个位置绕到第⼀个位置,形成逻辑上的环状空间。当front=rear时,队列要么为满要么为空(选择题可能会考),实际使⽤时会⽤标志s来指⽰,s=1时为满,s=0时为空。线性链表:
  线性链表指线性表的链式存储结构。指向链表中第⼀个节点的指针称为链表的头指针(HEAD),最后⼀个元素没有后件,所以最后⼀个节点的指针域为空,⽤null或0表⽰。
  线性链表的存储单元是任意的。
  在某些应⽤中,对线性链表中的每个节点设置两个指针,⼀个指针存放前件地址,称为左指针,⼀个指针存放后件地址,称为右指针。这样的线性链表称为双向链表。
  栈和队列也可以⽤链式存储结构表⽰,只做了解。
顺序表和链表的⽐较:
  顺序表:优点:可以随机存取表中任意节点
         ⽆须为表⽰节点间的逻辑关系额外增加存储空间
      缺点:插⼊和删除的运算效率很低
         存储空间不利于扩充和动态分配
  链表:优点:进⾏插⼊和删除运算时,只需要改变指针即可,不需要移动元素
         存储空间易于扩充和动态分配
      缺点:需要额外的空间(指针域)表⽰数据元素之间的逻辑关系
         存储密度较低
循环链表:
  将单链表的第⼀个节点前增加⼀个表头节点。队头指针指向表头节点,最后⼀个节点的指针域由null改为指向表头节点,形成环状链。
  循环链表中由于有表头指针存在,所以在表中没有元素时也⾄少要有⼀个节点存在
python入门教程app
树:
  树是⼀种简单的⾮线性结构。图形就类似于族谱。
  根节点:每个树只有⼀个没有前件的节点,称为根节点
  ⽗节点:在树形结构中,每个节点最多只有⼀个前件,该前件称为⽗节点
  ⼦节点:每个节点可以有多个后件,称为该节点的⼦节点
  叶⼦节点:没有后件的节点称为叶⼦节点
  度:⼀个节点拥有的后件个数称为度
  深度:树的根节点为第⼀层,总层数就是树的深度
  ⼦树:以某节点的⼦节点为根构成的树称为该节点的⼦树 
  在树中,树的节点等于树中所有节点的度之和再加⼀(选择题中可能会⽤这个特性求某种节点的个数)
⼆叉树:
  ⼆叉树和树形结构略有不同,特点如下:
    ⼆叉树可以为空,空的⼆叉树没有节点,⾮空⼆叉树有且只有⼀个根节点。
    每个节点最多有两棵⼦树,即⼆叉树中不存在度⼤于2的节点。
    ⼆叉树的⼦树有左右之分,不能任意颠倒
  ⼆叉树的性质:
    在⼆叉树的第k层上,最多有2的k-1次⽅个节点
    深度为m的⼆叉树中,最多有2的m次⽅-1个节点
    对任何⼆叉树,度为0的节点总是⽐度为2的节点多⼀个(选择题可能会⽤该特性求总节点个数)
    具有n个节点的⼆叉树,其深度⾄少为log2n + 1,log2n取整数部分
    具有n个节点的完全⼆叉树的深度为log2n + 1
满⼆叉树和完全⼆叉树:
  满⼆叉树是指除最后⼀层外,每⼀层的所有节点都有两个⼦节点的⼆叉树。
  完全⼆叉树是指除最后⼀层外,每⼀层上的节点数均达到最⼤值,在最后⼀层只缺少右边的若⼲节点的⼆叉树。
⼆叉树的存储结构:
  ⼆叉树通常采⽤链式存储结构,存储⼆叉树中元素的存储节点由数据域和指针域两部分构成。
⼆叉树的遍历:
  前序遍历:⾸先访问根节点,然后遍历左⼦树,最后遍历右⼦树,遍历⼦树时依旧按照此顺序
  中序遍历:⾸先遍历左⼦树,然后访问根节点,最后遍历右⼦树,遍历⼦树时依旧按照此顺序
  后序遍历:⾸先遍历左⼦树,然后遍历右⼦树,最后访问根节点,遍历⼦树时依旧按照此顺序
查技术:
  顺序查:从线性表的第⼀个元素开始,逐个将线性表中的元素与被查元素进⾏⽐较。最好情况查⼀次,最差查n次,平均查n/2次。当线性表为⽆序表或采⽤链式结构的有序表只能使⽤顺序查。
  ⼆分法查:通过和中间值⽐较确定值在前半段还是后半段,然后再不断⽐较直到出值。只有采⽤顺序存储结构的有序表才能使⽤⼆分法查。
排序技术:
  交换类排序法:
    冒泡排序:两两⽐较和交换,直到所有数据元素有序为⽌。最坏情况下需要排n(n-1)/2次
    快速排序:取⼀个随机元素并通过与之⽐较⼤⼩将线性表分为两个⼦表,对⼦表不断进⾏该步骤直到分割的⼦表长度为1为⽌。最坏情况下要进⾏n(n-1)/2次⽐较,但实际上该⽅法效率⽐冒泡排序效率⾼。
  插⼊类排序法:
    简单插⼊排序:将n个元素分为两组,⼀组⼀个元素,为有序表,另⼀组n-1个元素,为⽆序表,通过将⽆序表中的元素与有序表中的元素进⾏⽐较再插⼊合适的位置来进⾏排序,当⽆序表为空,排序完成。最坏情况下需要n(n-1)/2次⽐较。
    希尔排序:先取⼀个整数d<n,把所有元素分为d个组,所有距离为d的倍数的元素为⼀组,组成⼀个⼦序列。对每个⼦序列进⾏简单插⼊排序。然后取d1<d重复上述步骤,直到所有记录在⼀组中为⽌。最坏情况下⽐较的次数为n的r次⽅,1<r<2。
  选择类排序法:
    简单选择排序:从n个元素中选出最⼩的元素与第⼀个元素交换位置,在剩下的n-1个元素中选出最⼩的元素与第⼆个元素交换,重复该操作直到所有元素有序为⽌。最坏情况下要⽐较n(n-1)/2次。
    堆排序:将元素排列成⼀颗完全⼆叉树,当所有节点按照⼤⼩顺序排列时称为堆。所有节点的值⼤
于或等于左右节点的值,称为⼤根堆,所有节点的值⼩于或等于左右节点的值,称为⼩根堆。最坏情况需要nlog2n次⽐较。
⼆、程序设计基础   
程序设计风格:
  程序的质量受到程序设计的⽅法,技术,和风格等因素的影响。“清晰第⼀,效率第⼆”是当今主导的程序设计风格。
  形成良好的程序设计风格需要的因素:
    源程序⽂档化
    数据说明风格
    语句的结构
    输⼊和输出
结构化程序设计:
  结构化程序设计⽅法的重要原则:⾃顶向下,逐步求精,模块化和限制使⽤goto语句
  结构化程序设计的基本结构:顺序结构,选择结构,循环结构。共同特征是:只有⼀个⼊⼝和⼀个出⼝
  结构化程序设计的优点:程序易于理解,使⽤和维护;提⾼了编程⼯作的效率,降低了软件开发成本。
⾯向对象的程序设计:
  优点:与⼈类思维⽅式⼀致
     稳定性好
     可重⽤性好
     容易开发⼤型项⽬
     可维护性好
  基本概念:
     对象:由数据(属性)和⽅法(操作)两部分组成。特点:标识唯⼀性,分类性,多态性,封装性,模块独⽴性好
     类和实例:类是具有共同属性,共同⽅法的对象的集合,是关于对象的抽象描述,⼀个具体对象则是其对应类的⼀个实例     消息:对象间的通信
     继承:类和类之间可以继承,⼦类可以继承⽗类的全部描述(数据和操作)
     多态性:⼦类对象可以像⽗类对象那样使⽤,同样的消息既可以发送给⽗类对象也可以发送给⼦类对象
三、软件⼯程基础
软件⼯程的基本概念:
  软件定义:计算机软件是由程序,数据及相关⽂档构成的完整集合,它与计算机硬件⼀起组成计算机系统
  软件特点:软件是⼀种逻辑实体,具有抽象性
       软件没有明显的制作过程
       软件在使⽤期间不存在磨损⽼化问题
       对硬件和环境具有依赖性
       软件复杂度⾼,成本昂贵
       软件开发涉及诸多的社会因素
  软件的分类:
    计算机软件按功能分为应⽤软件,系统软件,⽀撑软件(⼯具软件)
暴雪与网易游戏协议  软件⼯程:
    三要素:⽅法,⼯具,过程
    原则:抽象,信息隐蔽,模块化,局部化,确定性,⼀致性,完备性和可验证性。
  软件过程:
黑马java全套视频    软件过程是把输⼊转化为输出。
  软件⽣命周期:
    软件定义期,软件开发期,运⾏维护期。
    各阶段主要任务:
      问题定义:确定要解决的问题是什么
      可⾏性研究:解决该问题是否存在⼀个可⾏的解决⽅法,制定完成开发任务的实施计划
      需求分析:对待开发软件提出的需求进⾏分析并给出详细定义。编写软件规格说明书及初步的⽤户⼿册,提交评审
      软件设计:通常⼜分为概要设计和详细设计两个阶段,给出软件的结构、模块的划分、功能的分配以及处理流程。
a型血      软件实现:在软件设计的基础上编写程序。
      软件测试:在设计测试⽤例的基础上,检验软件的各个组成部分。编写测试分析报告
      运⾏维护:将已交付的软件投⼊运⾏,同时不断地维护,进⾏必要⽽且可⾏的扩充和删改
需求分析及其⽅法:
  需求分析:
    需求分析的任务是发现需求,求精,建模和定义需求的过程。
    需求分析可分为四个⽅⾯:需求获取,需求分析,编写需求规格说明书和需求评审
    需求分析⽅法可分为结构化分析⽅法和⾯向对象分析⽅法
随机数表法为什么从00开始编  数据化分析⽅法是使⽤数据流图,数据字典,结构化英语,判定表和判定树等⼯具来为结构化规格说明的⽬标⽂档。
  数据流图注意事项:
    每个元素都必须命名
    对加⼯处理建⽴唯⼀,层次性的编号,且每个加⼯处理通常要求既有输⼊,⼜有输出
    数据存储间不应有数据流
    输⼊输出和读写相对应(⼀致性)
    ⼦图不⼤于⽗图中的处理个数,所有⼦图的输⼊输出数据流和⽗图中相对应处理的输⼊输出数据流必须⼀致
软件设计及其⽅法:
  软件设计的基本概念:activex组件无法创建对象
    软件设计是确定系统的物理模型
    从⼯程管理的⾓度来看可以分为两步:概要设计和详细设计
    从技术观点来看可分为软件结构设计,数据设计,接⼝设计,过程设计
    模块的独⽴程度由内聚性和耦合性衡量,耦合衡量不同模块彼此间互相依赖的紧密程度,内聚衡量⼀个模块内部各个元素彼此结合的紧密程度,模块的内聚性越⾼,耦合性越低,好的软件要做到⾼内聚低耦合。
  概要设计:
    概要设计⼜称总体设计,基本任务如下:设计软件系统结构,数据结构及数据库设计,编写概要设计⽂档(包括概要设计说明书,数据库设计说明书和集成测试计划)
    结构图:
      上级模块是控制其他模块的模块
      从属模块是被另⼀个模块调⽤的模块

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。