检查学生掌握数据结构与算法设计的基本知识、原理和实际应用方面的能力。
理解面向对象的基本概念:对象和类;
掌握面向对象的基本特性:封装性、继承性和多态性的含义;
掌握C++比C增强的知识:函数原型与变量说明、输入输出、const说明符和void类型。
掌握类与对象的定义和使用方法。类的声明包括数据(数据成员)和函数(成员函数);私有成员和公有成员;
掌握对象的存储空间及成员函数的存储方式,对象的存储空间只计算数据成员的存储空间;
掌握构造函数,构造函数对对象初始化;构造函数与类同名,可以接受参数,允许重载。构造函数不能显式调用;
掌握析构函数,析构函数执行与构造函数相反的操作,完成某些清理内存的任务,例如释放对象占用的内存空间;
掌握new和delete操作,new申请存储空间,delete释放用new申请的存储空间,配对使用。
掌握友元的概念和使用;友元是一种打破类的数据封装性机制;允许类以外的函数可以访问类对象的私有数据;友元分为友元函数、友元成员和友元类。使用时注意友元的声明和定义;慎用友元。
掌握重载,是C++的多态性,同一标识符在不同的场合具有不同的语义。函数重载有构造函数重载、成员函数和非成员函数重载;运算
符重载有两种形式:重载为类的成员函数和重载为类的友元函数。
掌握引用:引用即对象的别名,在创建引用时初始化,且不能再赋值。对引用的操作就是对目标的操作,用引用传递参数可改变实参的值,用引用传递对象对象可节省内存,引用函数可被赋值。
理解继承与派生的概念,掌握单继承和多继承的定义方式;
掌握继承的几种方式:public继承、private继承和protected继承,以及在不同继承方式下基类成员在派生类中的访问属性的差别;
熟悉派生类构造函数的定义和执行顺序;
掌握多继承的概念和定义,多继承构造函数的定义与执行顺序,注意多继承的二义性;
掌握虚基类的定义和初始化,以及最远派生类的构造函数的定义。
掌握多态性的两种实现方式,即早期联编通过重载实现,滞后联编通过虚函数实现;
掌握对象指针,指向基类类型的指针可以指向其公有派生类对象,但只能访问从基类继承的成员;
掌握虚函数,虚函数用于实现滞后联编,在基类中将成员函数声明为virtual特性,就可以在派生类中对该成员函数重新定义(定义原型与基类中的完全相同),是特殊的函数重载。当基类指针指向派生类时,即可访问派生类重新定义的函数,从而实现多态性;
掌握抽象类,抽象类是指包含纯虚函数的类,纯虚函数提供了抽象类对派生类的接口。纯虚函数仅在基类中声明,可以在派生类中定义不同的实现版本。
掌握模板,模板旨在于完成一些通用算法,如数据结构中的栈操作、排序操作和树操作。这些操作在不同的应用中有不同的数据类型。采用模板功能后,即可在模板内将数据类型抽象为一种广泛类型,在忽略数据类型差异的情况下设计模板,只需要考虑具体算法。反之,用户使用模板时需要用特定的数据类型代替模板中的抽象数据类型,而不必考虑具体的算法;
掌握函数模板,参数类型、返回值类型或函数体中使用的类型是通用类型的函数称为函数模板,它定义了一类函数。函数模板实例化后,得到可以远行的模板函数。模板函数有两种重载方法;
掌握类模板,数据成员类型、成员函数的参数、返回值或函数体中使用的类型为通用数据类型的类称为类模板,它定义了一类类。类模板实例化可以得到模板类。类模板可以派生出另一个类模板。
掌握数据结构的基本概念,了解数据抽象的目的和意义;
掌握线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。用前者表示的线性表简称为顺序表,用后者表示的线性表简称为链表。
熟练掌握这两类存储结构的描述方法,以及线性表的各种基本操作的实现。
能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合。
掌握堆栈的基本概念和特点;
掌握堆栈的存储方式,顺序存储和链式存储;
掌握顺序栈的定义与操作,包括测试栈满和栈空,进栈和出栈要修改栈顶指针top,多栈共享空间的问题;
掌握链栈的定义与操作,不存在栈溢出,进栈和出栈操作都在链表表头进行,出栈时需要判断栈空;
掌握顺序栈与链栈主要成员函数的实现。
掌握队列的基本概念和存储方式,顺序存储和链式存储;
掌握循环队列的定义与操作,包括队列的判满和判空条件,队头、队尾指针(实际上是整型数组的下标)的修改;
掌握链式队列的定义与操作:不存在队满的情况,插入在链表表尾,删除在链表表头,删除时需要判断队空;
掌握循环队列与链式队列主要成员函数的实现。
掌握树的基本概念和术语;
掌握树型结构的特点;
掌握树的存储方式有顺序存储(数组,按完全二叉树的方式分配存储空间)和链式存储(二叉链表表示,左指针指向第一个孩子,右指针指向第一个右兄弟);
掌握树和二叉树、森林和二叉树的转换;
掌握二叉树的概念,二叉树的性质,二叉树的遍历及应用;
掌握树的遍历:深度优先(先根、后根)、广度优先。
掌握图的基本概念;
掌握图的数组表示法,图的邻接表存储表示;
掌握图的深度优先搜索、图的广度优先搜索;
掌握最小生成树的构造算法。
掌握查找的相关概念;
重点掌握静态查找、动态查找、哈希表及其查找。
熟练掌握二叉排序树的构造及查找算法。
掌握哈希表的基本概念;
掌握哈希函数的构造方法(直接定址法、除留余数法、平方取中法 、折叠法、数值分析法)以及处理冲突的方法(开放定址法、再散列法 、链地址法)。
掌握插入排序、快速排序、选择排序三类常见排序方法;
掌握简单排序一般只用于n较小的情况。当序列中的记录“基本有序”时,直接插入排序是最佳的排序方法,常与快速排序、归并排序等其它排序方法结合使用。
掌握快速排序、堆排序的平均时间复杂度均为O(nlogn),但实验结果表明,就平均时间性能而言,快速排序是所有排序方法中最好的。
了解从排序的稳定性上来看,除了简单选择排序,其它各种简单排序法是稳定的。然而,快速排序、堆排序、希尔排序等时间性能较好的排序方法,都是不稳定的。
了解每一种排序方法各有特点,没有绝对最优的方法,应根据具体情况选择合适的排序方法,也可以将多种方法结合起来使用。