【学习笔记】计算机二级C语言:《第一章、公共基础知识(一)》数据结构与算法

这篇博客详细介绍了数据结构与算法的基础知识,包括算法的基本特征、复杂度分析、数据结构的逻辑与存储结构。重点讲解了线性表和链表的概念,栈和队列的特性及其运算,以及树和二叉树的定义、特点和基本操作。此外,还讨论了查找和排序的方法,如顺序查找、二分查找以及常见的排序算法。这些内容是理解和掌握计算机科学基础的重要组成部分。
摘要由CSDN通过智能技术生成

公共基础知识一共有数据结构与算法,程序设计基础,软件工程基础,数据库设计基础四个部分。这一篇记录的是数据结构与算法部分,更多知识点可以去看本专栏的其他文章。

一、数据结构与算法的基本概念(熟记内容)

1、算法基本概念

算法是指对解题方案准确而完整的描述。
(1)算法的基本特征

  • 可行性:针对实际问题而设计的算法执行后能够得到满意的结果,即必须有一个或多个输出。如果某一算法在数学理论上是正确的,但在实际工具上不能执行,该算法也是不具有可行性的。
  • 确定性:指算法中每一步骤都必须是有明确定义的。
  • 有穷性:只算法必须能在有限的时间内做完。
  • 拥有足够的情报:一个算法是否有效,还取决于为算法所提供的情报是否足够。
    (2)算法基本要素
    算法一般有两种基本要素构成:
  • 对数据对象的运算和操作
    算法就是按解题要求,从指令系统中选择合适的指令组成的指令序列。计算机算法就是计算机能执行的操作所组成的指令序列不同的计算机系统,其指令系统是有差异的,但一般的计算机系统中都包括的运算和操作有四类,即算术运算,逻辑运算,关系运算和数据传输。
  • 算法的控制结构,即运算和操作时间的顺序
    算法中各操作之间的执行顺序称为算法的控制结构,算法的功能不仅取决于所选用的操作,还与各操作之间执行的顺序有关。基本的控制结构包括顺序结构,选择结构和循环结构。

2、算法复杂度

(1)算法的时间复杂度
是指执行算法所需要的计算工作量。一般情况下,算法的工作量用算法所执行的基本运算次数来度量,而算法所执行的基本运算次数是问题规模的函数及算法的工作量=f(n),其中,n表示问题的规模。这个表达式表示,随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同。在同一问题规模下,如果算法执行所需的基本运算次数取决于某一特定输入可以用两种方法来分析算法的工作量:平均性态分析和最坏情况分析。
(2)算法的空间复杂度
一个算法的空间复杂度一般是指执行这个算法所需要的内存空间。做法,执行期间所需要的存储空间包括三个部分:

  • 算法程序所占的空间;
  • 输入的初始数据所占的存储空间;
  • 算法执行过程中所需要的额外的空间。

在许多实际问题中为了减少算法所占的存储空间,通常采用压缩存储技术。

3、数据结构的基本概念

(1)数据结构的定义
数据结构是指相互有关联的数据元素的集合,即数据的组成形式。

  • 数据的逻辑结构
    数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构。它包括数据元素 的集合和数据元素之间的关系。
  • 数据的存储结构
    数据的存储结构在计算机存储空间中的存放形式称为数据的存储结构。也称为数据的物理结构。数据结构的存储方式有顺序存储方式,链式存储方式,索引存储方式和散列存储方式。
  • 数据结构研究的内容主要包括三个方面:
    ① 数据集合中各数据元素之间的逻辑关系,即数据的逻辑结构;
    ②在对数据进行处理时,各数据元素在计算机中的存储关系及数据的存储结构;
    ③ 对各种数据结构进行运算。
    (2)数据结构的图形表示,用图形表示数据结构具有直观易懂的特点。
    (3)线性结构和非线性结构
    如果一个非空的数据结构有且只有一个根结点,并且每个节点最多有一个直接前驱或直接后继,则称该数据结构为线性结构,又称线性表。不满足上述条件的数据结构称为非线性结构。

二、线性表和链表(了解概念)

1、线性表

(1)线性表的基本概念
在数据结构中,线性结构也称为线性表,线性表是最简单也是最常用的一种数据结构。
若不为空表,可以表示为:
(a2,a2,…2
其中的每一个元素是线性表的一个节点。

(2)线性表的顺序存储结构两个基本特点:

  • 元素所占的存储空间必须是连续的;
  • 元素在存储空间的位置是按照逻辑顺序存放的。

(3)线性表的插入运算,在第i个元素之前插入一个新元素,三步:

  • 把原来第n个结点至第i个结点依次往后移动一个元素位置
  • 把新结点放在第二个位置上
  • 修正线性表的结点数(n+1)

如果在第一个位置插入新的元素需要移动表中所有数据;如果在第末尾插入新的元素。则不需要移动数据。下面的删除运算也一样。

(4)线性表的删除运算
两步步:

  • 把第i个元素之后(不包括第i个元素)的n-1个元素依次前移一个位置。
  • 修正线性表的节点个数

2、链表

(1)链表的基本概念
线性表的链式存储结构称为链表。
在链式存储结构中,每个结点由两部分组成:一部分称为的数据域,用于存放数据元素值;另一部分称为指针域,用于存放下一个数据元素的存储序号,即指向下一节点。
线性表链式存储结构的特点是:用一组不连续的存储单元存储线性表中的各个元素。
(2)链表的基本运算。

  • 指定元素的结点之前插入一个新元素
  • 删除包含指定元素的节点
  • 将两个链表按要求合并成一个链表
  • 将一个链表进行分解
  • 逆转链表
  • 复制链表
  • 链表的排序
  • 念表的查找

(3)循环链表及其基本运算
在单链表的第一个结点前增加一个表头,结点队头指针指向表头结点,在最后一个结点的指针域的值由Null改为指向表头结点,这样的链表称为循环链表。所有节点的指针构成了一个环状链。

三、栈和队列(必考点)

1、栈

(1)栈的基本概念
插入和删除运算都只在一端进行的先进后出的特殊线性表,允许插入删除运算的一端称为栈顶,另一端称为栈底。
(2)栈的特点

  • 栈顶元素总是最后被插入的元素,也是最早被删除的元素
  • 栈底元素总是最早被插入的元素,也是最晚被删除的元素
  • 具有记忆功能
  • 在顺序存储结构下,栈的插入和删除运算都不需要移动表中其他数据元素
  • 栈顶指针top动态反映了栈中元素的变化情况

(3)栈的基本运算

  • 入栈运算:在栈顶位置插入一个新元素
  • 出栈运算:取出栈顶元素并赋给一个特定的变量
  • 读取栈顶元素:将栈顶元素赋给一个特定的变量

2、队列

(1)队列的基本概念
队列是指允许在一端进行插入而在另一端进行删除的先进后出的特殊线性表,允许插入的一端的称为队尾(rear:指向队尾元素的指针)。允许删除的一端称为队头(front:指向队头元素的指针)。
(2)循环队列及其运算
所谓循环队列,就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间供队列循环使用。
循环队列的初始状态为空,即rear=front。
循环队列的基本运算:

  • 入队运算:指在循环队列的队尾插入一个新的元素
  • 出队运算:在循环队列的队头位置删除一个元素

四、树和二叉树(必考点)

1、树

(1)基本概念
树是一种简单的非线性结构,树是以分支关系定义的层次结构。

(2)树的结构中几个概念

  • 每一个节点只有一个前驱,称为父节点,没有前驱的节点只有一个,称为树的根节点,简称树的根。
  • 每一个节点可以有多个后继,称为该节点的子节点。没有后继的节点,称为叶子节点。
  • 一个结点所拥有的后继个数称为该节点的度。
  • 所有节点最大的度称为树的度。
  • 树的最大层次称为树的深度。

2、二叉树

(1)二叉树的定义
二叉树是一种非线性结构,是一个有限的结点集合,该集合或者为空,或者由一个根节点及其两棵互不相交的左右二叉树组成,当集合为空时,该二叉树称为空二叉树。
(2)二叉树的特点

  • 二叉树可以为空,空的二叉树没有节点,非空二叉树有且只有一个根节点。
  • 每一个结点最多有两棵子数,且分别称为该结点的左子树与右子树。

(3)满二叉树和完全二叉树
满二叉树除最后一层外,每一层上的所有结点都有两个子结点,即在满二叉树的第k层上有2k-1个节点。且深度为m的满二叉树中有2m-1个节点。
完全二叉树除最后一层外,每一层上的结点数都达到最大值。在最后一层上,只缺少右边的若干结点。
两者的关系:满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。

(4)二叉树的存储结构和遍历
二叉树通常采用链式存储结构。
二叉树的遍历有前序遍历(DLR),中序遍历(LDR)和后序遍历(LRD)。
前序遍历首先访问根结点,然后遍历左子树,最后遍历右子树。
中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。
后续遍历首先遍历左子树,然后遍历右子数,最后访问根结点。

五、查找和排序(理解)

1、查找

(1)顺序查找
从表中的第一个元素开始,依次将线性表中的元素与被查找元素进行比较,直到查到为止;否则表中没有要找的元素查找不成功。
最好情况,第一个元素就是要查找的,比较一次即可。
最坏情况,需要比较n次。
在平均情况下,需要比较n/2次。因此查找算法的时间复杂度为O(n)。
下列两种情况,只能采取顺序查找:

  • 线性表中元素的排序是无序的,无论是采用顺序存储还是链式存储结构。
  • 如果是有序的,若采用链式存储结构

(2)二分查找
使用二分查找的线性表,必须满足两个条件:

  • 顺序存储结构
  • 线性表是有序表(即从小到大,允许相邻元素值相等)

对于长度为n的有序线性表,用二分查找元素x的过程:
①将x与线性表的中间项进行比较
②若中间项的值等于x,则查找成功,结束查找
③若x是小于中间项的值,则在线性表的前半部分以二分法继续查找
④若x是大于中间项的值,则在线性表的后半部分以二分法继续查找
这样反复进行查找,直到查找成功或指标长度为0(说明表中没有这个元素)为止。

在最坏的情况下,二分查找只需要比较log2n次,而顺序查找需要比较n次。

2、排序

(1)交换类排序法

  • 冒泡排序(时间复杂度O(n2))
    在线性表中依次查找相邻的数据元素,将表中最大的元素不断往后移动,反复操作,直至消除所有逆序。此时该表已经结束排序。
  • 快速排序
    在线性表中逐个选取元素,将线性表进行分割,直到所有元素全部选取完毕,此时线性表已经排序结束。

(2)插入类排序法

  • 简单插入排序法
    简单插入排序是把n个待排序的元素看成一个有序表和一个无序表。开始时,有序表只包含一个元素,而无序表包含n-1个元素,每次取无序表中的第一个元素插入到有序表的正确位置,使之成为增加一个元素的新的有序表。插入元素时,插入位置及其后的记录依次向后移动,最后有序表的长度为n。而无序表为空,此时排序完成。
  • 希尔排序法
    希尔排序法的基本思路为,将整个无序序列分割成若干个小的子序列,并分别进行插入排序。

(3)选择类排序法

  • 简单选择排序法(时间复杂度O(n2))
    简单选择排序的基本思路是,首先从所有n个待排序的数据元素中选择最小的元素,将该元素与第一个元素交换,再从剩下的n-1个元素中选出最小的元素与第二个元素交换。重复这样的操作,直到所有的元素有序为止。
  • 堆排序(时间复杂度O(nlog2n))
    ①将一个无序序列建成堆;
    ②将堆顶元素与堆中最后一个元素交换。忽略已经交换到最后的那个元素,考虑前n-1个元素构成的子序列,只有左右子数是堆,可以将该指数调整为堆,这样重复去做第二步,直到剩下的子序列为空时止。

二级c语言的数据结构与算法的知识,一般都是考些概念,不会很难,粗略的看一下,记一记有个印象就可以了。后续将不断整理和更新后面的知识点,欢迎关注收藏学习!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

东篱_Y

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

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

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

打赏作者

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

抵扣说明:

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

余额充值