NOIP初赛复习要点Word下载.docx
《NOIP初赛复习要点Word下载.docx》由会员分享,可在线阅读,更多相关《NOIP初赛复习要点Word下载.docx(28页珍藏版)》请在冰豆网上搜索。
(2)排序算法(冒泡法、插入排序、合并排序、快速排序)
(3)查找(顺序查找、二分法)
(4)回溯算法
数制及数制转换
1.数制
常用的进制:
十进制(D)二进制(B)八进制(O)十六进制(H)
基数:
102816
位权:
10的幂数2的幂数8的幂数16的幂数
数字符号:
0~90~20~70~9、A~F
2.数制转换
Ø
2、8、16或其他进制~10进制的转换:
∑(该位上的数×
该位上的位权值)
如:
(101.101)B=1×
22+0×
21+1×
20+1×
2-1+0×
2-2+1×
2-3=(5.625)D
10进制~2、8、16或其他进制的转换:
对于整数,采用除进制倒取余法;
对于小数,采用乘进制正取整法
(13.6875)D=(1101.1011)B
▲注意:
一个二进制的小数能完全准确地转换成十进制小数,但一个十进制的小数不一定能完全准确地转换成二进制小数,如0.1,可根据精度要求转换到某一位为止。
2进制与8进制之间的转换:
每三个二进制位对应一个八进制位,以小数点分隔
(111010.110)2=(72.6)8
2进制与16进制之间的转换:
每四个二进制位对应一个十六进制位
(111010.110)2=(3A.C)16
8进制与16进制之间的转换可借助二进制
初赛题
2005年3.以下二进制数的值与十进制数23.456的值最接近的是()。
A.10111.0101B.11011.1111C.11011.0111D.10111.0111E.10111.1111
2005年12.(3725)8+(B)16的运算结果是()。
A.(3736)8B.(2016)10C.(11111100000)2D.(3006)10E.(7E0)16
3.计算机中数的表示
正负数的表示:
用最高位表示符号位,规定用0表示正,用1表示负。
其表示范围由硬件决定,当使用8位寄存器时,字长为8位,则无符号数的范围是0~255;
有符号数的范围是-128~127。
当使用16位寄存器时,字长为16位,则无符号数的范围是0~65535;
有符号数的范围是-32768~32767
定点数和浮点数:
根据小数点位置的不同约定两种表示方法,一种是小数点位置固定不变,称为定点数。
一种是小数点位置可以浮动,称为浮点数。
定点数只能表示定点整数和定点纯小数,对于定点整数,约定小数点的位置在最低位;
对于定点纯小数,约定小数点的位置在符号位之后。
浮点数能表示既有整数又有小数的数,通常由阶码和尾数组成,类似指数形式
4.原码、反码、补码
原码:
普通二进制形式,比较自然的表示法,最高位表示符号,0为正,1为负。
优点:
简单易懂;
缺点:
异号数加减法运算复杂。
+50的原码为00110010-50的原码为10110010
反码:
为计算补码方便而引入。
一个正数的反码是原码本身;
一个负数的反码是除符号位之外各位取反,即0变1,1变0。
一个数的反码的反码是原码本身。
-50的反码为00110010-50的反码为11001101
补码:
加减法运算方便,减法可以转换为加法。
一个正数的补码是原码本身,一个负数的补码是其反码的低位加1。
一个数的补码的补码是原码本身。
+50的补码为00110010-50的补码为11001110
两个数的补码之和等于两个数和的补码,符号位参与运算。
5.BCD码(二—十进制编码)
一个十进制数在计算机中以二进制形式存放,需要一个转换过程。
但在将所有位的数字输入完之前又不可能转换成完整的二进制数,所以可将每一位数字用二进制进行编码,称为二进制编码的十进制数。
常用的二—十进制数的编码是8421码,用四位二进制数表示一位十进制数,自左至右对应的位权是8、4、2、1。
应该指出的是,四位二进制数有0000~1111十六种状态,而十进制数0~9只取0000~1001十种状态,其余六种不用。
如:
(498.12)D的BCD码是0100,1001,1000.0001,0010
二数据结构的基本知识
先进后出(FILO)
(2)队列:
某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。
已知某时刻该车站状态为空,从这一时刻开始的出入记录为:
“进,出,进,进,出,进,进,进,出,出,进,出”。
假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为()。
A.1,2,3,4,5B.1,2,4,5,7C.1,3,5,4,6D.1,3,5,6,7E.1,3,6,5,7
200319已知元素(8,25,14,87,51,90,6,19,20),问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:
8在51前面;
90在87的后面;
20在14的后面;
25在6的前面;
19在90的后面。
(
)。
A)20,6,8,51,90,25,14,19,87
B)51,6,19,20,14,8,87,90,25
C)19,20,90,8,6,25,51,14,87
D)6,25,51,8,20,19,90,87,14
E)25,6,8,51,87,90,19,14,20
设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若出队的顺序为e2,e4,e3,e6,e5,e1,则栈S的容量至少应该为()。
A)2B)3C)4D)5
(3)树
树的概念
图1
树是一种重要的非线性数据结构,如图1所示,它比较形象地反映各结点之间一对多的层次关系。
如家族族谱、各种社会组织机构等。
树是由一个或多个结点组成的有限集合T,其中:
1.必须有一个特定的结点,称为是整棵树的根,这个结点没有前驱。
2.其余结点分为m个互不相交的有限子集:
T1,T2,T3,……,Tm,每一个子集是一棵子树。
树的定义是一个递归定义,即用树来定义树。
树结构没有封闭的回路。
一、树的术语
1.结点的度——某个结点的子树的个数称为该结点的度。
如图1中A结点的度为3,C结点的度为1,G结点的度为0。
2.树的度——即树的宽度,是所有结点的度中的最大值,如图1的树,其度为3;
3.树的深度——组成该树各结点的最大层次,如图1的树,其深度为4;
4.森林——指若干棵互不相交的树的集合,如图1,去掉根结点A,其原来的三棵子树T1、T2、T3的集合{T1,T2,T3}就为森林;
5.有序树——指树中同层结点从左到右有次序排列,它们之间的次序不能互换,这样的树称为有序树,否则称为无序树。
6.端结点——也叫叶子结点,如K、L、F、G、M、I、J。
7.分枝结点——度不为0的结点,如B、C、D、E、H。
8.某结点的子树的根称为该结点的儿子(或孩子),反之,该结点称为是儿子结点的父亲(或双亲),同一个父亲结点的儿子结点称为兄弟,父亲结点与儿子结点之间用枝相连。
根结点到每一个分枝结点或叶子结点的路径是唯一的。
二、树的表示
1.自然界的树形表示法:
如图1,用结点和边表示树,一班用于分析问题。
2.括号表示法——也称广义表表示法:
先将根结点放入一对圆括号中,然后把它的子树由左至右的顺序放入括号中,对子树也采用同样的方法处理,同层子树放入它们根结点后面的圆括号中,同层子树之间用逗号隔开。
如图1可写成如下形式:
(A(B(E(K,L),F),C(G),D(H(M),I,J)))
三、树的存储
树的存储一般有两种:
1.静态的二维数组或一维记录数组(将儿子的下标序列作为一个记录域):
如图1的树中各结点关系可用下表表示,故可用数组存储
下标
结点
儿子的下标序列
1
A
2
3
4
B
5
6
C
7
D
8
9
10
E
11
12
F
G
H
13
I
J
K
L
M
二维数组存储结构:
Constn=树的度;
Max=结点数的上限;
Typetreetype=array[1..max,1..n+1]ofinteger;
Vartree:
treetype;
一维记录数组存储结构:
Typenode=record
Data:
datatype;
{如字符型,存储结点数据}
Children:
array[1..n]ofinteger;
End;
treetype=array[1..max]ofinteger;
2.动态的多重链表:
由于树中可以有多个元素,所以用多重链表来描述比较方便。
每个结点由数据域和n(n为树的度)个指针域共n+1个域组成。
其表示方法如下:
Typetreetype=^node;
node=record
next:
array[1..n]oftreetype;
Varroot:
显然,取树的度作为每个结点的链域数(即指向儿子结点的指针数),虽使得各种算法简化,但由于各结点的指针域个数不同,存在很多空链域,这就造成了空间的大量浪费。
能不能在减少浪费空链域的前提下,寻找一种既使得每个结点的结构相同,又方便运算的树形式呢?
设想,每个结点的度都为2,则空指针域比重会变小,就能达到这个目的。
下面我们看另一种数据结构——二叉树。
第二节二叉树
一、二叉树的概念
二叉树(BinaryTree)是由n个结点组成的有限集合(n>
=0)。
此集合或是一个空集,或是由一个根结点加上两根分别称为左子树和右子树的互不相交的二叉树组成。
二叉树也是递归定义的,但二叉树与树是两个不同的概念。
1.二叉树可以是一个空集,而树至少要有一个结点;
2.树的子树无顺序之分,而二叉树的左子树、右子树顺序不能颠倒。
所以,二叉树不是树的特殊情况,但前面的树的树语对二叉树仍然适用。
1.二叉树的基本形态:
二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:
(1)空二叉树——(a);
(2)只有一个根结点的二叉树