第一章 数据结构与算法

一、算法

1.1算法的概念

1.1.1、算法的概念

算法:是指解决方案准确而完整的描述

通俗的理解为:解决问题的方法和步骤(不仅仅是理论的)

两个要素:确定方法 确定步骤

比如:

排序:选择法排序 冒泡法排序

1.1.2、算法的特征

(1)特征:确定性

每条指令都有明确含义,要让算法的执行者或阅读者能够明确它的含义及如何执行

(2)特征:可行性

不是 海市蜃楼  空中楼阁 渴望而不可及,算法的每一条指令都是可以执行的,可以通过已经实现的基本操作运算得到结果(科学幻想是不可以的)

(3)特征:有穷性 有限的时间 有限的步骤内得到一个结果

算法在执行有限的步骤之后一定能够结束,算法的每个步骤都能在有限的时间内完成。

算法最大的忌讳:死循环

(4)特征:拥有足够的情报(情报可以理解为数据)

一个算法与输入的原始数据有莫大的关系,不同的输入得到不同的结果,当一个算法拥有了足够多的情报时,此算法才是有效的,而情报不够是,算法可能无效。

输入性(算法都输入量(一个程序可以没有输入但是必须有输出))

输出性(一个算法要得到一个结果(列如一个函数必须有一个返回值))

1.2、算法设计基本方法

1.2.1、列举法

就是根据所要解决的问题,把所有可能的清空条件来检验哪些是需要的,哪些是不需要的。

(不能解决无限复杂问题)

1.2.2、归纳法

从特殊到一般

基本思想是通过列举少量的特殊情况,进过分析,最后找出一般的关系,可以解决列举量为无限的问题。

1.2.3、递推

递推法:(从条件到结论)

从已知的初始条件出发,这次推出所要求的各中间结果和最后结果

1.2.4、递归

递归:函数的自调用(假定有某种方法存在)

在解决某些复杂问题时,为了降低问题的复杂程度(如问题的规模等),可以将问题逐层分解,最后归结为一些简单的问题

1.2.5、减半递推技术

减半递推技术——分治

减半 是指将问题的规模减半,而问题的性质不变;“递推”是指重复“减半”的过程。

1.2.6、回朔法

对于某些问题,一种有效的方法是“试”,即通过对问题的分析,找出一个解决问题的线索,试探失败,就逐步回退,换别的路线再进行试探。这种方法称为回朔法。

1.3、算法复杂度(重点)

解决一个问题可以有多种算法如何去评价一个算法的好与坏 优与劣评价标准:

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

误区:一个算法的时间复杂度越高运行这个算法消耗的时间越长 是错误的

空间复杂度:执行这个算法所需要的内存空间或者存储空间空间复杂度作为算法所需存储空间的度量。

执行时所占的内存空间(包括常用空间和临时空间)

内存和外存:

内存  运算速度快  容量小

外存  运算速度慢  容量大

二、数据结构

2.1、数据结构的基本概念

这是一门研究非数值计算的程序设计问题中计算机的操作对象以及他们之间的关系。

计算机内的数值运算依靠方程式,而非数据运算(如:表、树、图等)则需要数据结构

同样的数据对象,用不同的数据结构来表示,运算效率可能有明显的差异。

程序设计的实质:好算法+好结构

2.1.1、什么是数据结构

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

数据元素:在数据处理领域中每个需要处理的对象都可以抽象表示为数据元素

2.2、数据结构的图形表示

2.3、线性结构和非线性结构

2.3.1、线性结构的特点(条件):

有且只有一个根节点 每个节点最多有一个前件、也最多有一个后件

2.3.2、非线性结构:

只要有一个条件不满足线性结构的就是非线性结构

2.4、线性表及存储结构

2.4.1、线性表的含义

线性表属于线性结构

线性表是线性结构的一个具体实例

2.4.2、满足线性结构的4个基本特征

有且只有一个头结点

有且只有一个尾结点

头结点外每个结点有且只有一个前件

尾结点外每个结点有且只有一个后件

2.4.3、线性表的循序存储结构

简称:顺序表

顺序表的特点:

所有空间必须连续

逻辑上连续的元素在物理存储空间上也必须连续

三、栈和队列

3.1、栈和队列的基本概念

栈和队列都属于线性结构

栈和队列是线性的实例

线性结构有2端,首段和尾端

栈规定只能在1端操作

队列规定在2端操作

3.2、栈及其基本运算

栈是只能在一段操作的结构 类似模型:瓶子(一端开口、另一端封闭)

栈顶:可操作的端

栈底:不可以操作的端

栈的特点:

先进后出也称为后进先出、FILO

栈的基本运算

入栈:也称为插入元素

出栈:也称为删除元素

读栈:将栈顶元素赋给一个指定的变量。

在这个运算总栈顶指针不会改变。

3.3、队列及其基本运算

3.3.1、什么是队列

队列是限定仅在表的一段进行插入,而在表的另一端进行删除的线性表。

允许插入的一端称为队尾

允许删除的一端称为队头

3.3.2、循环队列及其运算

所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间。

因此从队头指针指向的后一个位置直到队尾指针rear指向的位置之间,就是队列的元素。

1)队列是“先进先出”或“后进后出”的线性表,入口和出口不是同一个口。

2)循环队列是队列的一种顺序存储结构。因此存储空间是按顺序连续定义。

3)循环队列是线性结构

四、线性链表

4.1、线性链表的概念

线性表的链式存储结构称为线性链表,线性链表中的每一个元素是有2个部分组成数据域和指针域

在链式存储即可以表示线性结构,也可以表示非线性结构

4.1.1、单向线性链表的逻辑状态

指向线性表中第一个结点的指针第一个为头指针,当head=null时为空表

4.1.2、双向线性链表

线性链表中的每个结点设置两个指针域,一个指向其前件结点称为前件指针或者做左指针,另一指向后件结点,称为后件指针或右指针。这样的线性链表称为双向链表。

4.1.3、带链的栈

栈也是线性表,也可以采用链式存储

带链栈的基本操作:

1)栈的初始化。(建一个空栈)

2)入栈运算(插入新元素)

3)退栈运算(取出栈顶元素)

4)读栈顶元素

4.1.4、带链的队列

基本操作:

1)队列的初始化。(建一个空队列)

2)入队运算(插入新元素)

3)退队运算(在循环队列的排头位置退出一个元素)

4.2、线性链表的基本运算

在线性链表中查找指定元素

线性链表的插入运算

线性链表的删除运算

4.3、循环链表

循环链表的结构与普通链表相比,具有以下特点:

1)在循环链表中增加了一个表头节点,指针域指向第一个元素

2)循环链表中有一个节点的指针不为空,而是指向表头结点。即在所有结点的指针域构成了一个环状链。

五、树与二叉树

5.1、树的基本概念

5.1.1、什么是树?

树是n(n>=0)个结点的有限集合T。

T非空时满足:

(1)有且仅有一个他叔的称为根的结点。

(2)当n>1时,其余结点可分为m个互不相交的有限集T1,T2......Tm,其中每个集合本身又是一棵树,并且称为根的子树。

5.2、二叉树及其基本性质

5.2.1、什么是二叉树?

二叉树是另一种树形结构,它的特点是每个结点至多有两颗子树,并且二叉树的子树有左右之分,不能任意颠倒。

5.2.2、二叉树的基本术语

结点:表示树中的元素,包含数据项及若干子树的分支

叶子结点:也叫终端结点,是度为0的结点

分支结点:度不为0的结点

结点的度:拥有结点子树的个数

树的深度:树中最大的结点层数

5.2.3、二叉树的基本性质

一颗非空二叉树的第i层上最多有2的i+1次方个节点。

一颗深度为k的二叉树,最多有2的k次方-1个节点。

一颗二叉树中度为0的结点比度为2的多一个结点。

5.2.4、满二叉树

在一棵二叉树中,如果所有分支结点都存在左右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树(特点:每层都“充满”了结点)

5.2.5、完全二叉树

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

5.3、二叉树的存储结构

二叉树通常采用链式存储结构

二叉树中各个元素的存储结点也是两部分组成:数据域和指针域,由于每个元素有2个后件,因此用于存储二叉树的指针域有两个

5.4、二叉树的遍历

遍历是按照指定的次序访问二叉树的每一个结点,使每个结点访问一次。

前序遍历:根左右

中序遍历:左根右

后序遍历:左右根

六、查找

6.1、顺序查找

顺序查找又称为顺序搜索。顺序查找一般是在线性表查找的指定元素。

基本方法:从线性表的第一元素开始,一次将线性表中的元素与被查找元素进行比较,若相等则表示找到;若线性表中所有元素都与被查元素进行比较后都不相等,表示查找失败。

优缺点:

顺序查找最好的情况为1次,最差的情况为n次,所以查找成功时的平均查找长度为(n+1)/2,且顺序查找的时间复杂度为O(n)。

缺点:平均查找长度较大,当查找长度较大时,效率低。

优点:算法简单,适应面广。

6.2、二分法查找

二分查找又称折半查找

二分查找首先要求待查找的表示有序表,

如果要查找的元素是表的中间的那个元素,则招待要查找的元素,查找成功;如果要查找的元素比中间的那个元素小则使用相同的策略只在左边的区间查找就可以;如果要查找的元素比中间的那个元素大,则使用相同的策略在右边的区间进行查找;每次将待查找的元素的所在区间缩小一半。

七、排序

7.1、交换类排序法

7.1.1、快速排序法

快速排序是分治排序的一种排序算法,它将一个数组分成两个子数组,将两个部分独立的排序。快速排序和归并排序是互补的,归并排序将数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序,而快速排序则是就当两个子数组都有序时,整个数组就自然有序了。归并中,递归调用发生在处理整个数组之前,而在快速中,递归调用发生在处理整个数组之后。

7.1.2、冒泡排序法

它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

7.2、选择类排序法

7.2.1、堆排序法

堆排序是利用这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序

堆排序是利用这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序

7.2.2、简单选择法

一是它真的非常简单,二是它主要依靠选择和交换操作来进行排序。可以将简单选择排序实现为稳定的排序算法,也可以实现为不稳定的排序算法。

计算机Python二级公共基础部分相关推荐

  1. python二级公共基础知识

    python二级公共基础知识 一.算法和数据结构 算法及其基本特征: 算法是对解题方法的准确而完整的描述. 算法的四个基本特征:可行性,确定性,有穷性,拥有足够的情报.  算法的复杂度: 算法的时间复 ...

  2. 计算机等级二级公共基础

    计算机等级二级公共基础 第一节 计算机概述 第二节 计算机系统组成原理 第三节 计算机中的数制与编码 第四节 计算机安全 第五节 数据结构与算法 第六节 程序设计基础 第七节 软件工程基础 第八节 数 ...

  3. Python二级——公共基础总结

    我在考前7天前所总结的考点,通过N多套的考题总结而来.我目前的均分90,刷题一定有用,求点赞,总结不易 目录标题 计算机基础 二叉树,栈,队列 二叉树 二叉树的排序题 树的结点问题 栈 栈的存储空间 ...

  4. 二级公共基础知识_计算机二级选择题(公共基础知识)

    在这一期的文章主要以计算机二级选择题的公共基础知识进行讲解. 在计算机二级考试当中,选择题中的二级公共基础知识是必考的部分.很多考生对计算机二级的公共基础知识选择题有很多不解.二级公共基础知识选择题主 ...

  5. 计算机二级公共基础知识总结百度云,计算机二级公共基础知识总结详细版本[精]...

    计算机二级公共基础知识总结详细版本[精] (15页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 15.9 积分 全国计算机等级考试二级公共基础知识总结第一 ...

  6. 计算机二级公共基础知识证书,计算机二级公共基础知识

    计算机二级公共基础知识 下面是小编收集整理的计算机二级公共基础知识,希望对您有所帮助!如果你觉得不错的话,欢迎分享! 第一章 数据结构与算法 1.1算法 算法:是指解题方案的准x而完整的描述. 算法不 ...

  7. 计算机二级公共基础知识2017,2017年计算机二级公共基础知识基础试题

    2017年计算机二级公共基础知识基础试题 随着微处理机的迅速发展,计算机广泛应用于工业.农业.文化教育.卫生保健.服务行业.社会公用事业等.yjbys小编收集了一些关于计算机二级公共基础知识基础试题, ...

  8. 全国计算机等级考试——二级公共基础知识辅导讲义 卿勇军主讲

    全国计算机等级考试--二级公共基础知识辅导讲义 卿勇军主讲 第一章数据结构与算法 1.1算法 1.算法是指解题方案的准确而完整的描述.换句话说,算法是对特定问题求解步骤的一种描述. *:算法不等于程序 ...

  9. 全国计算机二级考试vf知识点总结,VF全国计算机等级考试二级公共基础知识点总结.doc...

    VF全国计算机等级考试二级公共基础知识点总结 第一章数据结构与算法 算法的基本特征:可行性,确定性,有穷性,拥有足够的情报. 算法的三种基本控制结构:顺序,选择,循环. 算法的复杂度主要包括:时间复杂 ...

最新文章

  1. P114、面试题17:合并两个排序的链表
  2. 干货丨贝叶斯机器学习前沿进展
  3. iframe 返回上一页_寻找高颜值小姐姐难吗!直到我在Github上发现了这个Python库
  4. 《Spring Cloud与Docker微服务架构实战》配套代码
  5. Linux易混名词整理和相关操作
  6. 迅雷2014校园招聘笔试题
  7. leetcode刷题 74.搜索二维矩阵
  8. 操作系统学习(三)-- CPU调度
  9. mysql sync es 异步双写_mysql数据同步es方案思考
  10. 【note】《软件体系结构》知识整理(1-5章)
  11. JSTL 核心标签库标签共有13个
  12. 函数式编程基础---高阶函数和偏函数
  13. 老调新弹,也玩Linq To Sql批操作
  14. 73.【JavaWeb-01】
  15. 安装paddledetection
  16. PAT_乙级_1011_筱筱
  17. 如何将过长的链接放到excel里面
  18. C4D全版本软件安装包(含最新2023)
  19. 亚马逊、速卖通、沃尔玛、阿里国际、煤炉、wish、eBay、Lazada、Shopee测评自养号,listing流量不高,导致转化率低该怎么办?
  20. 首个AI公园探秘:身高体重一秒被曝,大爷大妈坐无人车玩疯了

热门文章

  1. 电路基础_模拟电路_问答_2023_01
  2. “躺平家”出世,阿里做家装成不成?
  3. 清明海报文案|设计素材|图片
  4. span 文字自动换行(实测可用)
  5. PyInstaller指定打包的Python版本
  6. 梯度下降法和牛顿法优化原理
  7. IDEA EasyCode Oracle映射关系
  8. 使用paddlehub制作酷炫视频
  9. 看完押井守的电影,你就已经是凯撒了,你该知道如何避开凯撒的悲剧,却也可以去享受凯撒的光辉文明
  10. 《java与模式》读书笔记