第二章-数据结构与算法

NCRE全国计算机等级考试

公共基础知识

1.1.算法

算法:是指解题方案的准确而完整的描述。(算法不等于程序)

算法的特征:

​ 1.可行性(在设计一个算法时,必须考虑它的可行性)

​ 2.确定性(算法中的每个步骤必须时明确定义的,不允许模棱两可)

​ 3.有穷性(算法必须在有限的时间内做完,必须在执行的有限个步骤之后终止)

​ 4.足够的情报(是指算法要有一定的输入数据和必须要有输出结果)

算法的基本要素:

对数据对象的运算和操作:

算数运算、逻辑运算、关系运算、数据传输

算法的控制结构:

算法中各种操作之间的执行顺序;

描述算法的工具通常由传统流程图、N-S结构流程图、算法描述语言等;

一个算法一般可以用顺序、选择、循环三种基本结构组成。

算法的时间和空间复杂度:

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

空间复杂度:是指执行算法所需要的内存空间。包括算法程序、输入的初始数据以及算法执行过程中需要的额外空间。

算法的时间复杂度和算法的空间复杂度相互独立。

第二章 数据结构与算法

1.2数据结构的基本概念:

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

数据元素是数据的基本单位,即数据集合中的个体

有时一个数据元素可由若干数据项组成。数据项是数据处理的最小单位

结构:所谓“结构”,是集合中各个数据元素之间存在的某种关系(或联系)

数据结构:是指相互有关联的数据元素的集合。

数据结构的分类:

一逻辑结构:指反应数据元素之间的逻辑关系(即前后件关系)的数据结构
  1. 线性结构:线性表、栈、队列
    在这里插入图片描述

  2. 非线性结构:树、图
    在这里插入图片描述

二存储结构:又称为数据的物理结构,是数据的逻辑结构在计算机存储空间中的存放方式

1.顺序存储结构:这种存放方式主要用于线性的数据结构,它把逻辑上相邻的数据元素存储在物理上相邻的存储单元里。

2.链式存储结构:每一个结点至少包含一个指针域,用指针的指向来体现数据元素之间在逻辑上的联系。

特点:

1.一种逻辑结构可以有多种存储结构。

2.不同的存储结构其数据处理的效率不同。

三运算:插入,删除,查找,排序

1.3线性表及其顺序存储结构:

线性表:

线性表是n(n>=0)个数据元素构成的有限序列,表中除第一个元素外的每一个元素,有且只有一个前件,除最后一个元素外,有且只有后件。

线性表的顺序存储结构:

通常,线性表可以采用顺序存储和链式存储,但一般使用顺序存储结构。

线性表的顺序存储又叫做顺序表

特点:

1.线性表中所有元素所占的存储空间是连续的;

2.线性表中数据元素在存储空间中是按逻辑顺序依次存放的。

3.可以随机访问数据元素。

4.做插入、删除时需要移动大量元素,因此线性表不便于插入和删除元素。

1.4栈和队列:

栈:栈时限定在一端进行插入和删除的线性表

在这里插入图片描述

特点:

1.栈是只能在栈顶进行插入和删除。

2.栈的修改原则是“先进后出”或“后进先出”。

3.栈底指针不变,栈中元素随栈顶指针的变化而动态变化。

  1. 栈底指针bottom
  2. 栈顶指针top
  3. 入栈
  4. 栈满
  5. 出栈

4.栈具有记忆功能。

5.栈支持子程调用.

队列:队列是指允许在一端进行插入,而在另一端进行删除的线性表。原则是:先进先出(或后进后出)。

  1. 队头指针front
  2. 队尾指针rear
  3. 入队
  4. 出队
特点:

1.队列只允许在队尾进行插入,而在对头进行删除。

2.队列的修改原则是“先进先出”或“后进后出”。

3.队列中元素随队头指针和队尾指针的变化而动态变化。

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

判断队列中的元素个数:

  • if rear>front 则 s=rear-front
  • if rear<front 则 s=容量+rear-front
  • if rear=front 则 s=容量或者s=0

1.5线性链表:

线性链表:

线性表可以采用顺序存储和链式存储

线性表的顺序存储叫做顺序表,线性表的链式存储结构叫做线性链表。

特点:

1.各数据结点的存储空间可以不连续。

2.各数据元素的存储顺序与逻辑顺序可以不一致。

3.线性表的链式存储所占存储空间大于顺序存储空间。

4.查找结点时链式存储要比顺序存储慢。

5.链式存储插入删除元素比顺序存储灵活。

在这里插入图片描述

线性表:

在这里插入图片描述

1.6树与二叉树:

树:树是n(n>0)个元素的有限集合。它有且仅有一个称为根的元素;其余元素是互不相交的子树。

在这里插入图片描述

常用术语:
  1. 父结点、子结点。

  2. 根结点、叶子结点。

  3. 结点的度(一个结点所拥有的后件的个数)、树的度(所有结点中最大的度称为树的)

  4. 树的深度

  5. 子树

二叉树:是一个有限的结点集合,该结合或者为空,或者由一个根结点及其两棵互不相交的左右二叉子树所组成。

特点:
  1. 非空二叉树只有一个根结点;
  2. 每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。

在这里插入图片描述

特殊二叉树:
满二叉树:除最后一层外,每一层上的结点树均达到最大值。

在这里插入图片描述

完全二叉树:除最后一层外,每一层上的结点树均道道最大值,在最后一层上只缺少右边的若干结点。

在这里插入图片描述

二叉树的性质:

在这里插入图片描述

二叉树的遍历:
  1. 前序遍历: 访问根结点->前序遍历左子树->前序遍历右子树
  2. 中序遍历: 中序遍历左子树->访问根结点->中序遍历右子树
  3. 后序遍历: 后序遍历左子树->后续遍历右子树->访问根结点

在这里插入图片描述

1.7查找技术

顺序查找:对于长度为n的线性表,平均要进行n/2次比较,在最坏情况下进行n次比较。

顺序查找适用于无序表或链式线性表(不管无序还是有序)

二分查找:适用于顺序存储的有序表,对长度为n的线性表,在最坏情况下进行log2N次比较。

注意:即使是有序线性表,如果采用链式存储结构,也只能用顺序查找。

1.8排序技术

在这里插入图片描述

快速排序:
  • 基本思想:

    1. 在要排序的序列中找一个数作为基准数(通常为第一个数)

    2. 通过交换将这个序列中所有比基准数大的数放在右边,比基准数小的数放在左边。

    3. 以基准数为分割线分为两个子表,对两个子表重复上述步骤。

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GwaTPXmC-1650870814425)(C:\Users\Mao\AppData\Roaming\Typora\typora-user-images\image-20220316110514785.png)]

能用顺序查找。

1.8排序技术

在这里插入图片描述

快速排序:
  • 基本思想:

    1. 在要排序的序列中找一个数作为基准数(通常为第一个数)

    2. 通过交换将这个序列中所有比基准数大的数放在右边,比基准数小的数放在左边。

    3. 以基准数为分割线分为两个子表,对两个子表重复上述步骤。
      在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

springboot大神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值