全国计算机等级考试公共基础知识

全国计算机等级考试公共基础知识

书名:2017全国计算机等级考试二级C语言知识点超全整(打印版)

第 1 章算法与数据结构

考点1 算法

1.什么是算法 算法是指对解题方案的准确而完整的描述。 计算机程序本质上就是一个算法,它告诉计算 机确切的步骤来执行一个指定的任务。 (1)算法的基本特征 一般来说,算法应具有:可行性、确定性、 有穷性、拥有足够的情报这几个特征。 (2)算法的组成要素 通常,一个算法由两部分组成:一是对数据 对象的运算和操作,二是算法的控制结构。
2.算法的复杂度 算法的复杂度是算法规模的度量,一个算法 的复杂度高低体现在运行该算法所需要的计算机 资源的多少,所需的资源越多,就说明该算法的 复杂度越高;反之,所需的资源越少,则该算法 的复杂度越低。算法复杂度包括算法的时间复杂 度和算法的空间复杂度。

考点2 数据结构

1.数据结构的概念 所谓数据结构是指由某一数据对象及该对象 中所有数据成员之间的关系组成的集合。成员之 间的关系有很多种,最常见的是前后件关系。
2.数据的逻辑结构 (1)逻辑结构的定义 数据的逻辑结构,是指反映数据之间逻辑 关系的数据结构。对于电脑上的数据而言,逻 辑结构就是能够用眼睛看到的数据形式,包括 在屏幕上看到的文本、图片、视频等。 (2)逻辑结构的分类 根据数据结构中各元素之间前后关系的复 杂程度,将数据的逻辑结构分成线性结构和非 线性结构。一个非空的线性结构如果满足以下 两个条件:①有且只有一个根结点;②每一个 结点最多有一个前件,也最多有一个后件。
3.数据的存储结构 数据的存储结构也称为数据的物理结构, 是指数据在计算机中存放的方式,包括数据元 素的存储和关系的存储。通常,一种数据的逻 辑结构根据需要可以表示成多种存储结构,常 用的存储结构有顺序、链式存储结构。

考点 3 线性表及其顺序存储结构

1.线性表的基本概念 线性表是由 n 个数据元素组成的有限序列, 是最简单、最常用的数据结构。其中的数据元 素有着广泛的含义,可以是一个单独的数字或 字母,可以是矩阵中的一行或一列向量,也可 以是二维表中的一条记录。线性表是一种线性 结构。数据元素在线性表中的位置,只取决于 它们自己的序号,即数据元素之间的相对位置 是线性的。
2.线性表的顺序存储结构 一种数据的逻辑结构根据需要可以表示成多 种存储结构。线性表的存储结构常用的是顺序存 储,也称为顺序分配。线性表的顺序存储结构具 有以下两个基本特点:①线性表中所有元素所占 的存储空间是连续的;②线性表中各数据元素在 存储空间中是按逻辑顺序依次存放的。
3.顺序表的插入 所谓“顺序表”指的是使用顺序存储结构的 线性表。在顺序表中插入一个新的数据元素,就 像是在排队买票的时候进来了一个插队的人。
4.顺序表的删除 在顺序表中删除一个数据元素,就像是在排 队买票的时候其中的一个人离开了。在平均情况 下,要在线性表中删除一个元素,需要移动线性 表中一半的数据元素。

考点 4 栈和队列

1.栈及其基本运算
(1)什么是栈
栈是一种特殊的线性表。在这种特殊的线 性表中,其插入和删除运算都只能在线性表的 一端进行。一端是封闭的,不允许插入和删除 数据元素;另一端是敞开的,允许插入和删除 数据元素。
在栈中,允许插入和删除数据元素的一端 称为栈顶,而不允许插入和删除数据元素的一 端称为栈底。栈顶元素总会是被最后插入的元 素,从而也是最先被删除的元素;栈底元素总 是最先被插入的元素,从而也是最后才能被删 除的元素。即栈是按照“先进后出”或“后进 先出”的原则组织数据的。栈具有记忆的功能, 支持子程序的调用。通常用指针top 来指示栈顶位 置,用指针 bottom 来指示栈底的位置。往栈中插 入一个元素称为入栈运算,从栈中删除一个元素称为退栈运算。通过栈顶指针top 来反反映 栈中元素的动态变化情况。
(2)栈的基本运算
栈的基本运算有 3种:入栈、退栈与读栈顶 元素。①入栈运算。入栈运算是指在栈顶位置 插入一个新元素。这个运算有两个基本操作: 首先将栈顶指针进一(即 top加1),然后将新 元素插入到栈顶指针指向的位置。②退栈运算。 退栈运算是指取出栈顶元素并赋给指定的变量。 这个运算有两个基本操作:首先将栈顶元素赋 值给一个指定的变量,然后将栈顶指针退一 (即top减1)。③读栈顶元素。读栈顶元素是指 将栈顶元素赋给一个指定的变量,但是不删除 栈顶元素。因此,在这个运算中,栈顶指针不 会改变。当栈顶指针为 0时,说明栈空,读不到 栈顶元素。
2.队列及其基本运算
(1)什么是队列 队列是指允许在表的一端进行插入、而在另 一端进行删除的线性表。允许插入的一端称为队 尾,通常用一个队尾指针( rear)指向队尾元素, 队尾指针总是指向最后被插入的元素;允许删 除的一端称为排头(也称为队头) ,通常也用一 个排头指针( front)指向排头元素的前一个位置。
(2)循环队列及其运算 队列的顺序存储结构一般采用循环队列 的形式。所谓的循环队列,就是将队列的存储 空间的最后一个位置绕到第一个位置,形成逻 辑上的环状空间,供队列循环使用。
①入队运算。入队运算是指在循环队列的 队尾加入一个新元素。这个运算有两个基本操 作:首先将队尾指针进一(即 rear=rera+1),并 当rear=m+1 时置rear=1;然后将新元素插入到队 尾指针指向的位置。②退队运算。退队运算是指 在循环队列的排头位置退出一个元素并赋值给指 定的变量。这个运算有两个基本操作:首先将排 头指针进一(即 front=front+1),并当 front=m+1 时置front=1;然后将排头指针指向的元 素赋给指定的变量。

考点5 线性链表

1.线性链表
(1)线性链表
线性表的链式存储结构称为线性链表。在线性链表中,存储空间上的每一个存储结点都 要分成两部分:一部分用于存储数据元素的 值,称为数据域;另一部分用于存储该数据元 素的存储序号(存储结点的地址,即指向后件 结点),称为指针域。
(2)线性链表的查找
在非空的线性链表中查找指定元素的操 作:从头指针指向的结点开始往后沿着指针进行 扫描,如果找到要查找的内容,则查找成功;如果 没有对应的要查找的元素,则查找失败。为了弥 补线性单链表的这个缺点,对线性链表中的每个 结点设置两个指针,一个称为左指针 (Llink ),用以指向其前件结点;另一个称为 右指针( Rlink),用来指向其后件结点。这样 的线性表称为双向链表。
(3)线性链表的插入
在向线性链表中插入一个新元素之前,我 们先要给该元素分配一个新结点,其中包括值 域和指针域以便用于存储该元素的值。然后找 到插入位置,将插入位置前件的指针指向新结点, 将新接点的指针指向插入位置后件的结点。
(4)线性链表的删除
要从线性表中删除一个元素,首先将要删除 元素的前后件两个指针断开,然后把要删除结点 的前件的指针,指向删除结点后的数据元素。
2.循环链表
循环链表与单链表唯一的不同,就是最后 一个结点的指针域中的值不同。单链表的最后 一个结点的指针域存放的是一个空指针,而循 环链表的最后一个结点的指针域存放的是指向 第一个结点的指针。

考点 6 树与二叉树

1.树的基本概念
树是一种比较简单的非线型结构。在树中所 有的数据元素之间具有明显的层次关系。之所以 将这种数据结构命名为“树”,是因为其结构 看上去像一棵倒长着的树。在树的图形表示中, 上端的结点是前件,下端的结点是后件。
2.二叉树及基本性质
(1)二叉树
二叉树是一种特殊的树,是一种很有用的非 线型结构。所有树结构上的术语都可以用在二叉 树上。二叉树具有以下两个特征:① 非空二叉树只 有一个根结点;② 每个结点最多有两棵子树,且分别称为该结点的左子树和右子树。在二叉树 中,每个结点的度最大为 2,所有的左子树和右 子树也均是二叉树。同时,在二叉树中所有的结 点可以没有左子树,也可以没有右子树。即没有 左子树又没有右子树的结点是叶子结点。
(2)满二叉树
所谓满二叉树是指:除最后一层外,每一层 上的所有结点都有两个子结点。这就是说,在满 二叉树中,每一层上的结点数都达到最大值,即 满二叉树的第 k 层上有2k-1 个结点,且深度为 m 的满二叉树有2m-1 个结点。 (3)完全二叉树
所谓的完全二叉树是指:除最后一层外, 每一层上的结点数均达到最大值,最后一层上 只缺少右边的若干个结点。 完全二叉树就是去掉最后一层若干个右 边结点的满二叉树。
(4)二叉树的基本性质
①二叉树的基本性质。二叉树具有以下几 个基本性质:性质 1:在二叉树的第 K 层上最多 有2k-1(k≥1)个结点。性质 2:深度为 m 的二 叉树最多有 2m-1 个结点。性质 3:在任意一棵二 叉树中,叶子结点(即度为 0 的结点),总比度为 2 的结点多一个。性质4:具有n 个结点 的二叉树, 其深度至少为 [log 2n]+1。
②完全二叉树的两项特性。完全二叉树还 具有以下两项特性:性质 5:具有n 个结点的 完全二叉树,其深度为 [log2n]+1。性质 6:设完 全二叉树共有n 个结点。如果从根结点开始,按层 序(每一层从左到右)用自然数“ 1,2,, n”给结点进行编号。
3.二叉树的遍历
二叉树的遍历是指按照一定的顺序访问 二叉树中的结点,每个结点只被访问一次。为 了保证所有结点被不重不漏地访问,必须按照 一定的顺序进行。
(1)前序遍历
( DLR) 首先访问根结点,然后遍历左子树,最后遍 历右子树;在遍历左、右子树时,也按上述的顺序 执行。可见前序遍历二叉树是一个递归的过程。对于 二叉树的前序遍历,具有如下的规则:对于空的 二叉树,不进行操作返回空值。对于非空的二叉 树的遍历按下列顺序执行:①访问根结点; ②前序遍历左子树;③前序遍历右子树。
(2)中序遍历( LDR)
首先遍历左子树,然后访问根结点,最后遍 历右子树;在遍历左、右子树时,也按上述的顺 序执行。可见中序遍历二叉树也是一个递归的过 程。对于二叉树的中序遍历,具有的规则:①对 于空的二叉树,不进行操作返回空值。②对于非 空的二叉树的遍历按下列顺序执行:中序遍历左 子树;访问根结点;中序遍历右子树。
(3)后序遍历( LRD)
首先遍历左子树,然后遍历右子树,最后 访问根结点;在遍历左、右子树时,也按上述 的顺序执行。可见后序遍历二叉树同样也是一 个递归的过程。对于二叉树的后序遍历,具有 的规则:①对于空的二叉树,不进行操作返回 空值。②对于非空的二叉树的遍历按下列顺序 执行:后序遍历左子树;后序遍历右子树;访 问根结点。

考点 7 查找技术

查找就是从给定的一个数据结构中,找出指 定的数据元素。本节中我们只学习对线性表的查 找, 常用的查找方法有顺序查找和二分法查找。
1.顺序查找
顺序查找的过程是:从线性表的第一个元素 开始,依次将线性表中的数据与要查找的数据进 行比较,如果找到了相等的数据,则查找成功, 停止向下查找;如果比较完了线性表中的所有数 据元素,没有找到相等的数据,则查找失败。
2.二分法查找
二分法查找又称为折半查找,只能应用于 顺序存储的有序表。有序表是指线性表中的元 素已经按值非递减(从整体上看是升序,但相 邻的元素的值可以相同)排列。

考点 8 排序技术

排序就是将一组无序的数据按照一定的顺 序排列起来。本节中所指的顺序是非递减顺序 (整体上呈升序,但相邻的数据可以相等) ,基 本排序算法主要有交换类排序、插入类排序和 选择类排序3 大类。
1.交换类排序
交换排序就是借助数据元素之间的互相交 换进行排序的方法。常用的交换排序方法有冒 泡排序和快速排序。 (1)冒泡排序 冒泡排序的过程简单,它的基本思想是通过对相邻元素进行比较,并根据比较的结果交 换位置,从而逐步由任意序列变为有序序列。 过程是:先从头往后扫描、然后从后往头 扫描、再重复上述过程
(2)快速排序 快速排序就是一种可以通过一次交换而 消除多个逆序的排序方法,因此相对冒泡排序 法而言,速度要快。
2.插入类排序 插入排序,就是将无序序列中的各个元素依 次插入到已经排好序的线性表中。常用的插入排 序的方法有简单插入排序和希尔排序。
(1)简单插入排序 简单插入排序的方法是:在初始序列中, 将只包含第 1 个元素的子序列看成是一个有序 序列,然后从第 2 个元素起,依次将每个元素插 入到前1 个有序子序列中。
(2)希尔排序 希尔排序的基本思想是:将整个无序序列 分割成若干个子序列,对每个子序列分别进行 简单插入排序,最后再对全体元素进行一次简 单插入排序。与简单插入排序的子序列构成方 式不同,希尔排序是将原序列中相隔某个增量 h 的元素构成一个子序列。在排序过程中逐步 减少这个增量,最后当 h 减到1 时,进行一次 插 入排序,排序就完成了。增量序列一般取hi = n/2k (k=1,2, , [log 2n]) ,其中n 为待排序序列 的长 度。希尔排序的效率与所选取的增量序列有关。 通过希尔排序法对长度为 n 的线性表进行排序, 如果选取了上述增量序列,最坏情况下,需要 比较的次数为 O(n1.5)。
3.选择类排序 常用的选择排序有两种,简单选择排序和 堆排序。
(1)简单选择排序 简单选择排序的基本步骤是: ①在一组 n 个数据中选择出最小值;②若 它不是这组数据中的第 1 个数据,则将它与这组 数据中的第1 个数据互换位置;③对剩下的子表 采用同样的方法,直到子表空为止。
(2)堆排序法 在学习堆排序之前,我们先来看一下堆的 定义,堆的定义如下: 具有 n个元素的序列( h1,h2,⋯,hn),当且仅当满足在这里插入图片描述
(i=1,2,⋯,n/2)时称之为堆。

你可能感兴趣的:(笔记,算法,C语言)