全国计算机二级c语言公共基础知识点总结Word文档格式.docx
《全国计算机二级c语言公共基础知识点总结Word文档格式.docx》由会员分享,可在线阅读,更多相关《全国计算机二级c语言公共基础知识点总结Word文档格式.docx(59页珍藏版)》请在冰豆网上搜索。
2.算法的空间复杂度
算法的空间复杂度是指执行这个算法所需要的内存空间
一个算法所占用的存储空间包括算法程序所占的空间、输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间
其中额外空间包括算法程序执行过程中的工作单元以及某种数据结构所需要的附加存储空间
如果额外空间量相对于问题规模来说是常数
则称该算法是原地工作的
在许多实际问题中
为了减少算法所占的存储空间
通常采用压缩存储技术
以便尽量减少不必要的额外空间
疑难解答:
算法的工作量用什么来计算?
算法的工作量用算法所执行的基本运算次数来计算
而算法所执行的基本运算次数是问题规模的函数
即算法的工作量=f(n)
其中n是问题的规模
1.2数据结构的基本概念
考点3数据结构的定义
考点3在笔试考试中
读者还应该识记数据的逻辑结构和存储结构的概念
数据结构作为计算机的一门学科
主要研究和讨论以下三个方面:
(1)数据集合中个数据元素之间所固有的逻辑关系
即数据的逻辑结构;
(2)在对数据元素进行处理时
各数据元素在计算机中的存储关系
即数据的存储结构;
(3)对各种数据结构进行的运算
数据:
是对客观事物的符号表示
在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称
数据元素:
是数据的基本单位
在计算机程序中通常作为一个整体进行考虑和处理
数据对象:
是性质相同的数据元素的集合
是数据的一个子集
数据的逻辑结构是对数据元素之间的逻辑关系的描述
它可以用一个数据元素的集合和定义在此集合中的若干关系来表示
数据的逻辑结构有两个要素:
一是数据元素的集合
通常记为D;
二是D上的关系
它反映了数据元素之间的前后件关系
通常记为R
一个数据结构可以表示成
B=(D
R)
其中B表示数据结构
为了反映D中各数据元素之间的前后件关系
一般用二元组来表示
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构(也称数据的物理结构)
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同
因此
为了表示存放在计算机存储空间中的各数据元素之间的逻辑关系(即前后件关系)
在数据的存储结构中
不仅要存放各数据元素的信息
还需要存放各数据元素之间的前后件关系的信息
一种数据的逻辑结构根据需要可以表示成多种存储结构
常用的存储结构有顺序、链接、索引等存储结构
而采用不同的存储结构
其数据处理的效率是不同的
在进行数据处理时
选择合适的存储结构是很重要的
考点4线性结构与非线性结构
考点4在笔试考试中
虽然说不是考试经常考查的内容
但读者还是对此考点有所了解
在笔试考试中出现的几率为30%
主要是以填空题出现的形式出现
根据数据结构中各数据元素之间前后件关系的复杂程度
一般将数据结构分为两大类型:
线性结构与非线性结构
如果一个非空的数据结构满足下列两个条件:
(1)有且只有一个根结点;
(2)每一个结点最多有一个前件
也最多有一个后件
则称该数据结构为线性结构
线性结构又称线性表
在一个线性结构中插入或删除任何一个结点后还应是线性结构
如果一个数据结构不是线性结构
则称之为非线性结构
空的数据结构是线性结构还是非线性结构?
一个空的数据结构究竟是属于线性结构还是属于非线性结构
这要根据具体情况来确定
如果对该数据结构的算法是按线性结构的规则来处理的
则属于线性结构;
否则属于非线性结构
1.3栈及线性链表
考点5栈及其基本运算
考点5在笔试考试中
是一个必考的内容
在笔试考试中出现的几率为100%
此考点为重点掌握内容
读者应该掌握栈的运算
1.栈的基本概念
栈是限定只在一端进行插入与删除的线性表
通常称插入、删除的这一端为栈顶
另一端为栈底
当表中没有元素时称为空栈
栈顶元素总是后被插入的元素
从而也是最先被删除的元素;
栈底元素总是最先被插入的元素
从而也是最后才能被删除的元素
栈是按照"
先进后出"
或"
后进先出"
的原则组织数据的
2.栈的顺序存储及其运算
用一维数组S(1∶m)作为栈的顺序存储空间
其中m为最大容量
在栈的顺序存储空间S(1∶m)中
S(bottom)为栈底元素
S(top)为栈顶元素
top=0表示栈空;
top=m表示栈满
栈的基本运算有三种:
入栈、退栈与读栈顶元素
(1)入栈运算:
入栈运算是指在栈顶位置插入一个新元素
首先将栈顶指针加一(即top加1)
然后将新元素插入到栈顶指针指向的位置
当栈顶指针已经指向存储空间的最后一个位置时
说明栈空间已满
不可能再进行入栈操作
这种情况称为栈"
上溢"
错误
(2)退栈运算:
退栈是指取出栈顶元素并赋给一个指定的变量
首先将栈顶元素(栈顶指针指向的元素)赋给一个指定的变量
然后将栈顶指针减一(即top减1)
当栈顶指针为0时
说明栈空
不可进行退栈操作
这种情况称为栈的"
下溢"
(3)读栈顶元素:
读栈顶元素是指将栈顶元素赋给一个指定的变量
这个运算不删除栈顶元素
只是将它赋给一个变量
因此栈顶指针不会改变
读不到栈顶元素
小技巧:
的原则组织数据
但是出栈方式有多种选择
在考题中经常考查各种不同的出栈方式
考点6线性链表的基本概念
考点6在笔试考试中出现的几率为30%
重点识记结点的组成
在链式存储方式中
要求每个结点由两部分组成:
一部分用于存放数据元素值
称为数据域
另一部分用于存放指针
称为指针域
其中指针用于指向该结点的前一个或后一个结点(即前件或后件)
链式存储方式既可用于表示线性结构
也可用于表示非线性结构
(1)线性链表
线性表的链式存储结构称为线性链表
在某些应用中
对线性链表中的每个结点设置两个指针
一个称为左指针
用以指向其前件结点;
另一个称为右指针
用以指向其后件结点
这样的表称为双向链表
(2)带链的栈
栈也是线性表
也可以采用链式存储结构
带链的栈可以用来收集计算机存储空间中所有空闲的存储结点
这种带链的栈称为可利用栈
在链式结构中
存储空间位置关系与逻辑关系是什么?
在链式存储结构中
存储数据结构的存储空间可以不连续
各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致
而数据元素之间的逻辑关系是由指针域来确定的
1.4树与二叉树
考点7树与二叉树及其基本性质
考点7在笔试考试中
有时也有出现在填空题中
重点识记树及二叉树的性质
误区警示:
满二叉树也是完全二叉树
而完全二叉树一般不是满二叉树
应该注意二者的区别
1、树的基本概念
树(tree)是一种简单的非线性结构
在树结构中
每一个结点只有一个前件
称为父结点
没有前件的结点只有一个
称为树的根结点
每一个结点可以有多个后件
它们称为该结点的子结点
没有后件的结点称为叶子结点
在树结构中
一个结点所拥有的后件个数称为该结点的度
叶子结点的度为0
在树中
所有结点中的最大的度称为树的度
2、二叉树及其基本性质
(1)二叉树的定义
二叉树是一种很有用的非线性结构
具有以下两个特点:
①非空二叉树只有一个根结点;
②每一个结点最多有两棵子树
且分别称为该结点的左子树和右子树
由以上特点可以看出
在二叉树中
每一个结点的度最大为2
即所有子树(左子树或右子树)也均为二叉树
而树结构中的每一个结点的度可以是任意的
另外
二叉树中的每个结点的子树被明显地分为左子树和右子树
一个结点可以只有左子树而没有右子树
也可以只有右子树而没有左子树
当一个结点既没有左子树也没有右子树时
该结点即为叶子结点
(2)二叉树的基本性质
二叉树具有以下几个性质:
性质1:
在二叉树的第k层上
最多有2k-1(k≥1)个结点;
性质2:
深度为m的二叉树最多有2m-1个结点;
性质3:
在任意一棵二叉树中
度为0的结点(即叶子结点)总是比度为2的结点多一个
性质4:
具有n个结点的二叉树
其深度至少为[log2n]+1
其中[log2n]表示取log2n的整数部分
在二叉树的遍历中
无论是前序遍历
中序遍历还是后序遍历
二叉树的叶子结点的先后顺序都是不变的
3、满二叉树与完全二叉树
满二叉树是指这样的一种二叉树:
除最后一层外
每一层上的所有结点都有两个子结点
在满二叉树中
每一层上的结点数都达到最大值
即在满二叉树的第k层上有2k-1个结点
且深度为m的满二叉树有2m-1个结点
完全二叉树是指这样的二叉树:
每一层上的结点数均达到最大值;
在最后一层上只缺少右边的若干结点
对于完全二叉树来说
叶子结点只可能在层次最大的两层上出现:
对于任何一个结点
若其右分支下的子孙结点的最大层次为p
则其左分支下的子孙结点的最大层次或为p
或为p+1
完全二叉树具有以下两个性质:
性质5:
具有n个结点的完全二叉树的深度为[log2n]+1
性质6:
设完全二叉树共有n个结点
如果从根结点开始
按层次(每一层从左到右)用自然数1
2
......
n给结点进行编号
则对于编号为k(k=1
n)的结点有以下结论:
①若k=1
则该结点为根结点
它没有父结点;
若k>
1
则该结点的父结点编号为INT(k/2)
②若2k≤n
则编号为k的结点的左子结点编号为2k;
否则该结点无左子结点(显然也没有右子结点)
③若2k+1≤n
则编号为k的结点的右子结点编号为2k+1;
否则该结点无右子结点
考点8二叉树的遍历
考试链接:
考点8在笔试考试中考核几率为30%
读者应该熟练掌握各种遍历的具体算法
能由两种遍历的结果推导另一种遍历的结果
在遍历二叉树的过程中
一般先遍历左子树
再遍历右子树
在先左后右的原则下
根据访问根结点的次序
二叉树的遍历分为三类:
前序遍历、中序遍历和后序遍历
(1)前序遍历:
先访问根结点、然后遍历左子树
最后遍历右子树;
并且
在遍历左、右子树时
仍然先访问根结点
然后遍历左子树
最后遍历右子树
(2)中序遍历:
先遍历左子树、然后访问根结点
仍然先遍历左子树
然后访问根结点
(3)后序遍历:
先遍历左子树、然后遍历右子树
最后访问根结点;
然后遍历右子树
最后访问根结点
树与二叉树的不同之处是什么?
在二叉树中
1.5查找技术
考点9顺序查找
考点9在笔试考试中考核几率在30%
一般出现选择题中
读者应该具体掌握顺序查找的算法
查找是指在一个给定的数据结构中查找某个指定的元素
从线性表的第一个元素开始
依次将线性表中的元素与被查找的元素相比较
若相等则表示查找成功;
若线性表中所有的元素都与被查找元素进行了比较但都不相等
则表示查找失败
在下列两种情况下也只能采用顺序查找:
(1)如果线性表为无序表
则不管是顺序存储结构还是链式存储结构
只能用顺序查找
(2)即使是有序线性表
如果采用链式存储结构
也只能用顺序查找
考点10二分法查找
考点10在笔试考试中考核几率为30%
一般出现填空题中
考核比较多查找的比较次数
读者应该具体掌握二分查找法的算法
二分法只适用于顺序存储的
按非递减排列的有序表
其方法如下:
设有序线性表的长度为n
被查找的元素为i
(1)将i与线性表的中间项进行比较;
(2)若i与中间项的值相等
则查找成功;
(3)若i小于中间项
则在线性表的前半部分以相同的方法查找;
(4)若i大于中间项
则在线性表的后半部分以相同的方法查找
二分查找法适用于哪种情况?
二分查找法只适用于顺序存储的有序表
在此所说的有序表是指线性表中的元素按值非递减排列(即从小到大
但允许相邻元素值相等)
这个过程一直进行到查找成功或子表长度为0为止
对于长度为n的有序线性表
在最坏情况下
二分查找只需要比较log2n次
1.6排序技术
考点11交换类排序法
考试链接:
考点11属于比较难的内容
一般以选择题的形式考查
考核几率为30%
分值约为2分
读者应该熟练掌握几种排序算法的基本过程
冒泡排序法和快速排序法都属于交换类排序法
(1)冒泡排序法
首先
从表头开始往后扫描线性表
逐次比较相邻两个元素的大小
若前面的元素大于后面的元素
则将它们互换
不断地将两个相邻元素中的大者往后移动
最后最大者到了线性表的最后
然后
从后到前扫描剩下的线性表
若后面的元素小于前面的元素
不断地将两个相邻元素中的小者往前移动
最后最小者到了线性表的最前面
对剩下的线性表重复上述过程
直到剩下的线性表变空为止
此时已经排好序
在最坏的情况下
冒泡排序需要比较次数为n(n-1)/2
(2)快速排序法
它的基本思想是:
任取待排序序列中的某个元素作为基准(一般取第一个元素)
通过一趟排序
将待排元素分为左右两个子序列
左子序列元素的排序码均小于或等于基准元素的排序码
右子序列的排序码则大于基准元素的排序码
然后分别对两个子序列继续进行排序
直至整个序列有序
冒泡排序和快速排序的平均执行时间分别是多少?
冒泡排序法的平均执行时间是O(n2)
而快速排序法的平均执行时间是O(nlog2n)
1.7例题详解
一、选择题
【例1】算法的时间复杂度取决于_______
(考点2)
A)问题的规模B)待处理的数据的初态
C)问题的难度D)A)和B)
解析:
算法的时间复杂度不仅与问题的规模有关
在同一个问题规模下
而且与输入数据有关
即与输入数据所有的可能取值范围、输入各种数据或数据集的概率有关
答案:
D)
【例2】在数据结构中
从逻辑上可以把数据结构分成_______
(考点3)
A)内部结构和外部结构B)线性结构和非线性结构
C)紧凑结构和非紧凑结构D)动态结构和静态结构
逻辑结构反映数据元素之间的逻辑关系
线性结构表示数据元素之间为一对一的关系
非线性结构表示数据元素之间为一对多或者多对一的关系
所以答案为B)
B)
【例3】以下_______不是栈的基本运算
(考点5)
A)判断栈是否为素空B)将栈置为空栈
C)删除栈顶元素D)删除栈底元素
栈的基本运算有:
入栈
出栈(删除栈顶元素)
初始化、置空、判断栈是否为空或满、提取栈顶元素等
对栈的操作都是在栈顶进行的
【例4】链表不具备的特点是_______
(考点6)
A)可随机访问任意一个结点B)插入和删除不需要移动任何元素
C)不必事先估计存储空间D)所需空间与其长度成正比
顺序表可以随机访问任意一个结点
而链表必须从第一个数据结点出发
逐一查找每个结点
所以答案为A)
A)
【例5】已知某二叉树的后序遍历序列是DACBE
中序遍历序列是DEBAC
则它的前序遍历序列是_______
(考点8)
A)ACBEDB)DEABC
C)DECABD)EDBAC
后序遍历的顺序是"
左子树-右子树-根结点"
;
中序遍历顺序是"
左子树-根结点-右子树"
前序遍历顺序是"
根结点-左子树-右子树"
根据各种遍历算法
不难得出前序遍历序列是EDBAC
所以答案为D)
【例6】设有一个已按各元素的值排好序的线性表(长度大于2)
对给定的值k
分别用顺序查找法和二分查找法查找一个与k相等的元素
比较的次数分别是s和b
在查找不成功的情况下
s和b的关系是_______
(考点9)
A)s=bB)s>
bC)s<
bD)s≥b
对于顺序查找
查找不成功时和给定关键字比较的次数为n+1
二分查找查找不成功的关键字比较次数为[log2n]+1
当n≥2时
显然n+1>
[log2n]+1
【例7】在快速排序过程中
每次划分
将被划分的表(或子表)分成左、右两个子表
考虑这两个子表
下列结论一定正确的是_______
(考点11)
A)左、右两个子表都已各自排好序
B)左边子表中的元素都不大于右边子表中的元素
C)左边子表的长度小于右边子表的长度
D)左、右两个子表中元素的平均值相等
快速排序基本思想是:
任取待排序表中的某个元素作为基准(一般取第一个元素)
将待排元素分为左右两个子表
左子表元素的排序码均小于或等于基准元素的排序码
右子表的排序码则大于基准元素的排序码
然后分别对两个子表继续进行排序
直至整个表有序
二、填空题
【例1】问题处理方案的正确而完整的描述称为_______
(考点1)
计算机解题的过程实际上是在实施某种算法
算法
【例2】一个空的数据结构是按线性结构处理的
则属于_______
(考点4)
一个空的数据结构是线性结构或是非线性结构
要根据具体情况而定
如果对数据结构的运算是按线性结构来处理的
则属于线性结构
线性结构
【例3】设树T的度为4
其中度为1、2、3和4的结点的个数分别为4、2、1、1
则T中叶子结点的个数为_______
(考点7)
根据树的性质:
树的结点数等于所有结点的度与对应的结点个数乘积之和加1
因此树的结点数为1×
4+2×
2+3×
1+4×
1+1=16
叶子结点数目等于树结点总数减去度不为0的结点数之和
即16-(4+2+1+1)=8
8
【例4】二分法查找的存储结构仅限于_______且是有序的
(考点10)
二分查找
也称折半查找
它是一种高效率的查找方法
但二分查找有条件限制:
要求表必须用顺序存储结构
且表中元素必须按关键字有序(升序或降序均可)
答案:
顺序存储结构
第2章程序设计基础
笔试部分经常考查的是结构化程序设计的原则、面向对象方法的基本概念
1.结构化程序设计方法的四个原则
2.对象、类、消息、继承的概念、类与实例的区别
2.1结构化程序设计
考点1结构化程序设计的原则
考点1在笔试考试中出现的几率为30%
主要是以选择题的形式出现
读者应该识记结构化程序设计方法的四个主要原则
20世纪70年代提出了"
结构化程序设计"
的思想和方法
结构化程序设计方法引入了工程化思想和结构化思想
使大型软件的开发和编程得到了极大的改善
结构化程序设计方法的主要原则为:
自顶向下、逐步求精、模块化和限制使用goto语句
如何进行自顶向下设计方法?
程序设计时
应先考虑总体
后考虑细节;
先考虑全局目标
后考虑局部目标;
不要一开始就过多追求众多的细节
先从最上层总目标开始设计
逐步使问题具体化
2.2面向对象的程序设计
考点2面向对象方法的基本概念
读者应该识记几个基本要素的定义、对象的特征以及消息、继承、类的定义
当使用"
对象"
这个术语时
既可以指一个具体的对象
也可以泛指一般的对象
但是当使用"
实例"
必须是指一个具体的对象