通过csp-j第一轮必会知识点(更新第二天,只写了进制转换)

258 阅读6分钟

1、进制转换

1.1 什么是进制

普通人类都是这么数数字的:0、1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18、19、20、21……99、100、101……规律:用0~9组成数字,逢“十”进“一”,这是十进制

再看看计算机底层是怎么数数字的:0、1、10、11、100、101、110、111、1000……规律:用0~1组成数字,逢“二”进“一”,这是二进制

再计算机中常用的有:二进制、八进制、十进制、十六进制

下面是0~20的二进制八进制十进制十六进制对照表(注意表中十六进制的10如何表示,15如何表示,16如何表示)

十进制01234567891011121314151617181920
二进制011011100101110111100010011010101111001101111011111000010001100101001110100
八进制0123456710111213141516172021222324
十六进制0123456789ABCDEF1011121314

总结:n进制就是用0~n-1之间的数字来表示整数数字,从低位到高位(从右向左)依次表示:有几个n0n^{0}、有几个n1n^{1}、有几个n2n^{2}、有几个n3n^{3}、有几个n4n^{4}、……

举例:

  • 七进制数1203的含义是有3个707^{0},0个717^{1},2个727^{2},1个737^{3}
  • 十二进制数BA01的含义是1个12012^{0},0个12112^{1},10个12212^{2},11个12312^{3}

1.2进制转换常用方法

1.2.1 表格法二进制转十进制(其他进制转十进制也适用)

画出表格:

1286432168421

将二进制数填入第二行,如:10011

1286432168421
10011

同列数字相乘后相加(下方为1的数字相加):1+2+16=19

1.2.2 表格法十进制转二进制

画出表格:

1286432168421

把十进制数字和表格第一行数字依次作比较,小于该数字就在下方写0,否则写1并相减,接着用结果接着比较,如十进制123转转换过程:

123>64,64下方写1,123-64=59

1286432168421
1

59>32,32下方写1,59-32=27

1286432168421
11

27>16,16下方写1,27-16=11

1286432168421
111

11>8,8下方写1,11-8=3

1286432168421
1111

3<4,4下方写0,小于就不做减法

1286432168421
11110

3>2,2下方写1,3-2=1

1286432168421
111101

1=1,1下方写1,后边没了

1286432168421
1111011

所以最终结果是1111011

1.2.3 其他进制 → 十进制 按权展开求和

七进制数1203的含义是有3个707^{0},0个717^{1},2个727^{2},1个737^{3},所以:3*1+2*7*7+1*7*7*7=444 所以转换为十进制是444

1.2.4 十进制 → 其他进制 短除法(除基取余法):

如十进制4053480转换为13进制: 4053480 ÷ 13 = 311806 余 2

311806 ÷ 13 = 23985 余 1

23985 ÷ 13 = 1845 余 0

1845 ÷ 13 = 141 余 12 (C)

141 ÷ 13 = 10 余 11 (B)

10 ÷ 13 = 0 余 10 (A)

余数倒序排列:ABC012就是结果

1.2.4 二进制 <-> 八进制/十六进制

两句话句话:

  • 1位八进制变为3位二进制,3位2进制变为1位8进制
  • 1位十六进制变为4位二进制,4位2进制变为1位16进制 如八进制123转二进制:

1->001

2->010

3->011

所以结果是:001010011也就是1010011

相反的二进制10010101转换为八进制,首先从低位开始3个数字一组:101、010、10

10->2

010->2

101->5

所以该数字对应的十进制是225

2、初识数据结构

常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类。

2.1.1 什么是逻辑结构?

下图中的几个数据结构主要展示了不同数据结构的逻辑结构,重点是数据集合内元素之间的关系,和操作数据集合的方式

按逻辑结构分类主要分为:

线性结构、非线性结构(树状、网状)

2.1.2 什么是物理结构?

所谓物理结构形容的是数据存储在内存中的位置关系(内存地址关系),下图解释了什么是内存地址。 物理结构主要有两类:连续的、分散的(离散的) 物理结构决定了对数据集合的操作的时间开销(学习数组和链表后回过头来看看这句话)。

2.1.3 关于逻辑结构和物理结构的比喻

  • 逻辑结构更像是老板和员工的关系,强调的是逻辑关系,你是员工,逻辑结构关注的是你和老板的上下级关系,你老板站在什么位置对你俩的上下级关系不会产生影响。
  • 物理结构更像是排队,强调的是位置关系(内存地址关系),关注的是前后关系。
  • 一种数据结构同时拥有特定的物理结构和逻辑结构,比如你在排队时你的老板可能正好站在你前面。

2.1节内容重在理解,如果没看明白建议学完数组和链表后再回头看看2.1节的内容。

2.2 数组(arry)

物理结构:元素在内存中连续存储(线性的),且完成声明后,占用内存空间固定。

逻辑结构:每个元素都有一个索引。

主要操作:初始化、根据下标访问元素、插入元素、删除元素、遍历、查找元素、扩充

优点:①通过下标访问元素的时间复杂度是O(1) ②内存空间完全用于存储数据,内存利用率高

缺点:①删除和插入操作时需要移动大量元素,平均时间复杂度是O(n),n是数组长度②长度不可变,当需要扩充数组时会产生较大的时间和空间开销

2.3 链表(linked list)

学习链表必须认识一个东西叫:指针

2.3.1