数据结构期末复习提纲(2012级)A、总体要求:1、掌握数据结构的基本概念、基本原理和基本方法。
2、掌握数据的逻辑结构、存储结构及基本操作的实现,能够对算法进行基本的时间复杂度和空间复杂度的分析。
3、能够运用数据结构的基本原理和方法进行问题的分析与求解,具备采用C语言和C++语言设计与实现算法的能力。
一、基本概念1、数据结构、数据元素、数据项、数据类型、抽象数据类型、算法、算法的时间复杂度、算法的空间复杂度、算法的评价标准。
2、数据结构的逻辑结构和存储结构及分类。
3、线性表的定义及特点。
4、顺序表、单链表、双向链表、循环链表、静态链表的存储结构。
5、栈和队列的定义及特点。
6、顺序栈、链栈、顺序队列、链队列的存储结构。
7、字符串的定义及特点。
8、顺序串和链串的存储结构。
9、数组的定义及特点。
10、数组的按行存储与按列存储。
11、对称矩阵、三角矩阵、稀疏矩阵的压缩存储。
12、二叉树的定义、一般术语及特点。
13、二叉树的五个基本性质。
14、完全二叉树与满二叉树的概念。
15、二叉树的顺序存储结构。
16、二叉树的二叉链表与三叉链表存储结构。
17、二叉树的四种遍历方式及特点。
18、线索二叉树的存储结构及特点。
19、树和森林的概念。
20、树的双亲链表和孩子兄弟链表存储结构。
21、树和森林的二种遍历方式。
22、图的定义、一般术语及特点。
23、图的邻接矩阵、邻接表、逆邻接表存储结构。
24、图的二种遍历方式及特点、优先遍历生成树的概念。
25、图的连通性、连通图、连通分量的概念。
26、有向无环图的概念及特点。
27、查找、查找表、关键字的概念。
28、顺序查找、折半查找、分块索引查找的概念。
29、二叉排序树和平衡二叉树的定义及特点,平衡因子的概念。
30、B_树的定义及存储结构特点。
31、哈希函数、哈希表、哈希冲突、哈希查找的概念。
32、哈希表装填因子的定义及作用。
33、内部排序、外部排序、排序方法、传统排序和优化排序的概念。
34、希尔排序、快速排序、堆排序、归并排序、基数排序的概念。
35、排序方法的稳定性概念。
二、数据结构的基本操作算法1、顺序表与单链表的创建、查找、插入、删除、遍历操作算法。
2、顺序栈的创建、初始化、取栈顶元素、出栈、入栈操作算法。
3、顺序队列和循环队列的创建、初始化、取队头元素、出队、入队操作算法。
4、二叉树的先序、中序、后序遍历的递归算法。
5、中序线索二叉树的创建和遍历操作算法。
6、树和森林的孩子兄弟链表结构的先序和后序遍历操作算法。
7、图的邻接矩阵和邻接表结构的创建操作算法。
8、图的深度优先和广度优先遍历算法。
9、有序顺序表的折半查找算法。
10、二叉排序树的创建、查找、插入、删除算法。
11、传统的插入、选择、交换排序算法。
12、一趟快速排序、归并排序的算法。
三、基本方法1、简单程序的算法时间复杂度和空间复杂度的分析。
2、比较顺序表与链表、单链表、双向链表、循环链表的应用特点。
3、顺序栈的简单应用。
4、循环队列和双端队列的特点及简单应用。
5、二维、三维数组的按行、按列展开的地址计算及转换。
6、二叉树基本性质的应用及简单计算。
7、已知二叉树的遍历,求二叉树的形态。
8、已知二叉树,画出线索二叉树。
9、森林与二叉树的转换方法。
10、哈夫曼树的构造和编码方法。
11、图的邻接矩阵和邻接表结构及逆邻接表结构的转换方法。
12、连通分量、强连通分量的求解方法。
13、深度优先和广度优先遍历最小生成树的求解方法。
14、最小生成树的求解方法。
15、应用栈或队列的拓扑排序的求解方法。
16、关键路径的求解方法。
17、迪杰斯特拉求解单源最短路径的方法。
18、判定树的构造方法及平均查找长度的计算。
19、平衡二叉树的构造方法、平衡因子的计算。
20、线性探测再散列和链地址法解决冲突的哈希表构造方法,并计算平均查找长度。
21、B_树的构造和查找方法。
22、希尔排序、快速排序、堆排序、归并排序、基数排序的方法。
23、排序方法的时间性能、空间性能及稳定性的比较。
四、算法应用设计1、有序顺序表应用,如:合并、查找、排序、消除重复元素等。
2、链表应用,如:链表的合并、排序、查找、删除等。
3、二叉链表二叉树的遍历应用,如:查找、求高度和宽度等。
4、三叉链表的二叉树的非递归遍历算法。
5、图的邻接矩阵和邻接表结构及逆邻接表结构的转换算法。
6、图的深度优先和广度优先遍历的应用算法,如:查找、求解通路和最短路径等。
7、有向无环图的拓扑排序的应用算法。
8、习题集算法例题举例:2.15、2.20、2.29、2.37、6.39、6.41、6.44、6.48、6.52、7.22、7.27、7.34、7.35B、试题举例:数据结构试题(2011级)一、单选题(每小题2分)1.抽象数据类型ADT的三个组成部分是A.数据对象、数据关系和基本操作B.数据元素、逻辑结构和存储结构C.数据项、数据元素和数据类型D.数据元素、数据结构和数据类型2. 在下列对顺序表进行的操作中,算法时间复杂度为O(1)的是A. 对顺序表中元素进行排序B. 插入第i个元素C. 删除第i个元素D. 访问第i个元素的前驱3.设p指向单链表中的一个结点,s指向单链表表外待操作的结点,则下述程序段的功能是:s->next=p->next; p->next=s; t=p->data; p->data=s ->data; s->data=t; A.删除结点pB.插入结点sC.在结点p之后插入结点sD.结点p与插入结点s的数据域互换4.如果入栈序列是1,3,5,…,97,99,且出栈序列的第1个元素为99,则出栈序列中第30个元素是A.39 B.41C.43 D.455.用一个大小为1000的数组来实现循环队列,当前的队头和队尾指针分别为4和996,若要达到队列满的条件,可以继续入队的元素个数是A.5 B.6C.7 D.86.多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为A.数组的元素处在行和列两个关系中B.数组的元素必须从左到右顺序排列C.数组的元素之间存在次序关系D.数组是多维结构,内存是一维结构7. 已知一棵含50个结点的二叉树中只有一个叶子结点,则该二叉树与所对应的孩子兄弟链表表示的二叉树的高度相比A. 前者比后者低B. 前者比后者高C. 前者与后者相同D. 不易确定8. 假设一棵完全二叉树中的第6层上有24个叶子结点,则该二叉树的结点个数最多为A. 55B.79C. 81D.1279.设某棵二叉树的中序遍历序列为ABCDE,后序遍历序列为BADEC,则该二叉树的层次遍历序列为A.BADCE B.BCDAEC.CAEBD D.CBDAE10.如果某图的邻接矩阵是非对称矩阵,则此图一定不.是A. 有环图B. 有向无环图C. 强连通图D. 上述答案有错11. 若一个具有N个顶点和K条边的无向图(N>K)是一个森林,则该森林的数目一定是A.K B.NC.N-K D.112. 已知哈希表的存储空间为T[0..18],哈希函数H(key)= key%17,并用线性探测再散列法处理冲突。
哈希表中已插入下列关键字:T[5]=39,T[6]=57和T[7]=7,则下一个关键字23插入的位置是A. T[2]B. T[4]C. T[8]D. T[10]13.若有序表的关键字序列为(b,c,d,e,f,g,q,r,s,t),则在二分查找关键字为w的过程中,先后进行比较的关键字依次为A.f,r,s,t B.f,s,g,qC.g,q,s,t D.g,d,q,s14.对关键字序列(5,1,4,3,7)进行堆排序时,输出第2个元素后的系列结果为A.(1,3,4,5,7) B.(7,3,5,4,1)C.(1,4,3,5,7) D.(7,4,5,3,1)15.下列排序算法中,时间复杂度不受数据初始状态影响,恒为0(nlogn)的是A. 归并排序B. 冒泡排序C. 直接选择排序D. 快速排序二、应用题(每小题6分)16. 双端队列是一种插入和删除仅在线性表的两端都可进行的线性表。
若允许一端进行插入和删除,另一端只允许删除的双端队列为输入受限的双端队列。
假设输入序列为1,2,3,4。
双端队列的左端为单输入端。
试求:(1)画出输入受限的双端队列的示意图。
(2)给出单输入端的输出端口不可能得到的输出序列。
(至少5种)17.试求:(1(2)说明在非递归且不使用栈的中序遍历中,Parent域的作用。
18.已知一个无向带权图的边结点结构为(顶点1,顶点2,权值),顶点集V和边集E分别为:V={1,2,3,4,5};E={<1,2,2>,<1,4,6>,<2,3,8>,<2,4,3>,<3,5,5>,<3,4,2>,<4,5,9>}。
试求:(1)画出该图的邻接矩阵存储结构示意图。
(2)采用普利姆算法,求最小生成树,画出求解过程,给出最小代价的结果。
19.已知一组初始记录关键字序列为(3,9,51,8,4,7,2,52)。
试求:(1)给出该序列的快速排序的前三趟结果。
(2)举例说明快速排序的不稳定性。
20. 已知一组初始记录关键字序列为(35,20,33,48,59,47,62,50,48)。
其哈希函数为H(key)=key%13,处理冲突的方法为链地址法。
试求:(1)设计哈希表。
(2)在等概率查找时查找成功的平均查找长度。
三、算法阅读与分析题(本题10分)已知SqList为顺序表类型,阅读下列算法,回答问题。
void Sq_F(SqList &L {1. for(i=j=0;i<L.length;i++){2. if(L.elem[i]>=0){3. if(i!=j) //注释(1)4. L. elem [j]= L.elem[i];5. j++; //注释(2)6. }//if7. }//for8. L.length=j;9. }// Sq_F试求:(1)说明算法的功能。
(2)在语句3和语句5后面加上注释。
(3)若初始顺序表L=(19,-8,49,-56,-10,10,0,20,-50),给出算法执行后L 的结果。
四、算法设计题(本题10分)已知LinkList为单链表类型,L为带头结点的单链表的头指针。
指针p为当前访问的结点指针,pre为p的前驱结点指针。
结点Lnode的结构为(data,next)。
设计算法,从任意给定位置开始,将指针p右边的k个结点置逆。
函数原型定义如下:void shift_right_k(LinkList &L, LinkList p,LinkList pre,int k)试求:(1)算法描述。