logo资料库

C++及数据结构复习笔记.pdf

第1页 / 共90页
第2页 / 共90页
第3页 / 共90页
第4页 / 共90页
第5页 / 共90页
第6页 / 共90页
第7页 / 共90页
第8页 / 共90页
资料共90页,剩余部分请下载后查看
C++及数据结构复习笔记 Laotan 重庆邮电大学 2018 年 6 月 作者: 学校: 时间:
摘要 该复习文档是本人根据谭浩强老师的《C++程序设计》、邓俊辉的《数据结构(C++语 言版)》和 CSDN 博客上的众多文章总结而成的。感谢博客上各位大佬的总结,使我在复习 课本的同时补充了很多其他方面的关键知识,如 C++内存管理,STL 库等内容,这些补充的 内容可以参考笔者的另一篇文档。本文章适合 C++初学者的快速复习和应届生的笔试面试 准备,书中给出了大量的面试题,以帮助读者快速的掌握 C++的基本概念。对于初学者来 说,也可以加强对 C++的认识。 文档主要分为 C++基本知识,C++数据结构 2 个部分。C++基本知识部分介绍了 C++ 的基本知识,如面向过程中的选择、循环和指针等,还有面向过程的内容,包括类,继承与 派生,多态性与虚函数。数据结构部分包括向量、列表、二叉树、图和排序的部分内容。其 他的部分主要来自于博主的总结。 笔者的话 笔者作为一个普通一本的屌丝研究生,和在看这篇文档的各位比起来没有一丝丝不同。 回顾本科和研究生已经度过的 2 年,感慨颇多。笔者的专业不是计算机相关专业的,但是彷 徨了 6 年发现其实毕业生可以选择的出路并不多,想有高收入,又没啥技术,唉,现实总是 很骨感。网申简历各种被拒,当初很难受,现在其实也就看淡了。经过前一段时间找实习各 种悲剧,笔者决定痛定思痛,好好补一下技术。想想自己曾经学过什么,好像也只有 C++和 数据结构可以拿得出手,其实对于通信专业的同学来说,找 IT 类的工作难度还是很大的, 毕竟只掌握一门语言并没有什么优势,可以说现在毕业的大学生几乎都会 C++。和计算机 专业的同学比起来,我们没学过算法导论,没学过 Linux 操作系统,甚至连数据库都不太会 用。所以仅看本文档的话是明显不够的,各位读者还是需要加强基础知识的学习。 天行健君子以自强不息,师父领进门修行在个人,想要有个好出路还是要看个人的修行, 除非你后台坚挺,否则没有什么人可以帮助你。好在从现在开始还不算太晚,抓紧时间学习 吧,达瓦里氏! 注意 本文所总结的内容均来自于笔者所写的 CSDN 博客,https://blog.csdn.net/Lao_tan 为 笔者的博客链接,转载请声明来源和作者。此外,未经本人授权,本文档总结不得用于任 何商业活动,笔者拥有对文档的绝对解释权。违反者将被依法追究法律责任。
目 录 第一章 C++基本知识....................................................................................................................................... 1 1.1 C++的初步认识 .................................................................................................................................. 1 1.2 数据类型与表达式 ............................................................................................................................ 1 1.3 程序设计初步 ..................................................................................................................................... 3 1.4 函数与预处理 ..................................................................................................................................... 5 1.5 数组 ..................................................................................................................................................... 13 1.6 指针 ..................................................................................................................................................... 17 1.7 自定义数据类型 .............................................................................................................................. 21 1.8 类和对象 ............................................................................................................................................ 22 1.9 关于类和对象的进一步讨论 ....................................................................................................... 26 1.10 继承与派生 ..................................................................................................................................... 36 1.11 多态性与虚函数 ............................................................................................................................ 45 1.12 C++程序设计中的其它要点 ...................................................................................................... 49 1.13 C++面试笔试概念性问题考点 .................................................................................................. 50 1.14 C++面试笔试编程问题考点 ...................................................................................................... 56 第二章 C++数据结构..................................................................................................................................... 58 2.1 向量 ..................................................................................................................................................... 58 2.2 列表 ..................................................................................................................................................... 65 2.3 栈与队列 ............................................................................................................................................ 71 2.4 二叉树 ................................................................................................................................................. 75 2.5 图 .......................................................................................................................................................... 83 2.6 C++数据结构面试笔试概念性问题考点 .................................................................................. 86 2.7 C++数据结构代码附录 .................................................................................................................. 87 第三章 参考文献.............................................................................................................................................. 87
第一章 C++基本知识 本章主要介绍了 C++基本的数据类型与表达式,面向过程的基本设计,函数与预处理 命令,数组,指针,结构体,类和对象,继承与派生和多态性与虚函数。主要的总结均来自 于谭浩强老师的《C++程序设计》,在每一小节的背后,给出了一些在网上总结的面试题, 以加强我们对 C++的理解。并且每一小节均给出了典型的 C++程序代码,理解这些代码是 读懂文章的关键。 1.1 C++的初步认识 C++的特点:类与对象、封装、继承和多态。 一个 C++程序通常由以下部分组成:预处理命令,全局声明部分,函数。函数由函数首 部和包含局部声明和执行的函数体构成。C++的语句分为声明语句和执行语句,执行语句用 于实现用户指定的操作。一个 C++程序总是从 main 函数开始执行的,不论 main 函数在整 个程序中的位置如何。 1.2 数据类型与表达式 1.2.1 C++的数据类型 整形(int):可以分为长整型(long int)和短整型(short int),长整型和整形的复制范 围是一样的,但是整形和短整型只占 2 字节,长整型占 4 字节。整形数据的存储方式为 2 进 制。Signed 和 unsigned 表示有符号和无符号,若为有符号,则数据以补码形式存放,无符 号的存储范围比有符号大一倍。 浮点型(float):分为单精度,双精度和长双精度。字母 e 表示其后数字都是以 10 为 底,即 e12 表示 1012。浮点型在内存中均已指数形式存储,存储单元分为存放数字的存储单 元和存放指数的存储单元。 字符常量:用单撇号括起来的一个字符就是字符型常量,如’a’,但只能包含一个字符, 且区分大小写。转义字符中有几个关键的需要掌握,如下表: \n 换行 \t 跳到下一个 tab 位置 表 1.1 比较重要的的转义字符 \b 退格 \\ 输出反斜杠字符”\” \’ 输出单撇号字符 \0 空字符 字符数据是以 ASCII 码存储的,A 的 ASCII 码是 65,a 的是 97,中间差了 32。 字符串常量会在最后自动加一个’\0’作为字符串结束标志,但它并不是字符串的一部分, 不会被输出,但是在内存中会多占用一个字节。字符串常量通过字符数组进行存放。 用来标识变量、符号常量、函数、数组和类等实体名字的有效字符序列称为标识符。标 识符只能由数字、字母和下划线 3 种字符组成。 1
1.2.2 常变量 Eg: const int a=3; const int a; a=3; (×)//常变量不能被赋值 在定义变量时,如果加上关键字 const,则变量的值在程序运行期间不能改变,这种变 量称为常变量。且常变量必须在声明时进行初始化,此后其值不会再改变。 1.2.3 C++运算符 &&与,||或,!非。sizeof 求字节运算符(后面要重点讲一下)。%取余运算符。运算符的 结合方向为自左向右。且在进行运算时,不同类型的数据需要先转化为同一类型,然后再进 行运算,转化规则如下图所示: 图 1.1 运算时的数据转换 ++i:使用 i 之前,先给 i 加 1。(--i 同理) i++:在使用 i 之后,使 i 的值加 1.(i--同理) 自增自减运算符只能用于变量,结合是自右向左的。如-i++相当于-(i++)。 例 1.1.1 下列语句输出结果是什么。 int i=3; cout<
cout/cin 语句的一般格式为: cout<<表达式 1<<表达式 2<<……<<表达式 n; cin>>变量 1>>变量 2>>……>>变量 n; 关于输入输出流,有几个关键的控制符需要知道,见表 1.2。调用他们需要包含头文件: #include 表 1.2 输入输出流的控制符 setprecision(n) setw(n) setiosflags(ios::fixed) 设置浮点数以固定的小数位数显示 setiosflags(ios::left) 输出数据左对齐 设置浮点数的精度为 n 位 设置字段宽度为 n 位 1.3 程序设计初步 1.3.1 putchar 和 getchar putchar()函数的作用是向终端输出一个字符,当然也可以输出 ASCII 码。 getchar()函数是从终端输入一个字符。 1.3.2 关系运算和逻辑运算 优先级高的关系运算符(它们之间优先级相同):<.<=,>,>=。优先级低的关系运算符 (它们之间优先级相同):==,!=。 三种运算符之间的优先级关系:算术运算符>关系运算符>与和或>赋值运算符。 优先级:非>与>或 关系表达式的值是一个逻辑值,即“真”或“假”。1 表示真,0 表示假。 逻辑型变量要用标识符 bool 来定义,故又称布尔变量。 同或:相同为 1,不同为 0。a⊙b=ab+a’b’(a’为非 a,b’为非 b)。 异或:不同为 1,相同为 0。a⊕b=ab’+a’b。 1.3.3 选择结构 if 语句 if(表达式 1) 语句 1 else if (表达式 2) {语句 2} …… else 语句 n 一、if 语句 switch 语句 switch(表达式) { case 常量表达式 1:语句 1; case 常量表达式 2:语句 2; …… default: 语句 n+; } 3
if 语句中,else 总是与它上面最近的、且未配对的 if 配对。 条件运算符,又称三目运算符(?:),形式如下: 表达式 1? 表达式 2:表达式 3; Eg:max(a>b)? a:b; //若括号内条件为真,则取 a,否则取“:”后面的值,即 b。 二、switch 语句 switch 后面括号内的“表达式”允许为任何类型。case 表达式的值不能相同,且 case 和 default 出现的顺序不影响执行结果。每执行完一个 case 子语句,流程就转移到下一个 case 子语句继续执行,会连续输出,若想跳出 switch 结构,需要在每个 case 子语句后加“break;” 1.3.4 循环结构 一、几种循环类型 ① while(表达式) {语句} 当满足括号内表达式条件时,执行循环体,上式称为当型循环。 ② do 语句 while (表达式) 先执行循环体,然后判断表达式。 ③ for (循环变量赋初值;循环条件;循环变量增值) {语句} Eg: for (i=1;i<=100;i++) sum=sum+i; For 语句的第一个表达式可以省略,但需在 for 语句之前给循环变量赋初值、省略第 2 个表达式表示死循环。若想省略第三个表达式,需在循环体中做修改。 for(;;)相当于 while(1)。for 语句功能更强,凡能用 while 循环的均可用 for 实现。 二、break 和 continute break 语句不仅可以跳出 switch 结构,在循环体内,还可以跳出循环体。continue 语句 作用为结束本次循环,接着进行下一次循环的判定。即 continue 语句只结束本次循环,break 语句结束整个循环过程。 例 1.3.1 找出 100~200 间的全部素数 判别 m 是否为素数的算法是这样的:让 m 被 除,若 m 不能被其中的任一个整 数整除,就可以确定 m 是素数。 #include #include #include using namespace std; int main() { 4 2~m
int m,k,i,n=0; bool prime; //定义 bool 变量 prime,以判定 m 是否为素数 for (m=101;m<=200;m=m+2) { prime=true;//prime 为真,即先默认 m 为素数 k=int(sqrt(m));//k 表示 的整数部分 for (i=2;i<=k;i++)//让 m 被 除,检查是否能整除 { if (m%i==0)//若能整除,表示 m 不是素数 { prime=false; break; } if (prime)//若 m 为素数,则打印 { cout<
分享到:
收藏