《数据结构》导学.docx
- 文档编号:9037574
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:55
- 大小:49.13KB
《数据结构》导学.docx
《《数据结构》导学.docx》由会员分享,可在线阅读,更多相关《《数据结构》导学.docx(55页珍藏版)》请在冰豆网上搜索。
《数据结构》导学
《数据结构》导学
第一部分课程介绍及学习方法
《数据结构》课程是计算机科学与技术专业的一门专业基础课。
它涉及在计算机中如何有效地表示数据,如何合理地组织数据和处理数据。
还涉及初步的算法设计和算法性能分析。
本课程是一门理论性和实践性都很强而且难学习的一门课程,C++语言程序设计和离散数学的基础都将影响到本课程的学习效果,同时《数据结构》也是一门自学起来比较困难的一门课程。
所以学生在以自学为主的学习过程中,应当加强网络教学资源、多媒体课件的利用和上机操作。
学习方法建议如下:
1、 除了主教材以外,学习前还应当掌握如下教学资源:
教学大纲、平时作业要求、课程实施细则、考核说明等。
2、 由于本课程使用多媒体课件讲授,它作为文字教材的强化媒体,配合文字教材讲授课程的重点、难点以及问题的分析方法与思路。
学生学习时两者互相补充,彼此配合。
3、 按照教学大纲和考核说明进行学习,布置的作业一定做并搞懂,可以说,该门课程的成绩好坏与作业完成的情况有密切的联系,习题做的多的学生,特别是程序设计题做的多的学生考试过关率肯定高,不做作业者很难过关。
学习中注意做笔记,将遇到的问题和难点记下来,然后可以与老师联系答疑。
良好的记笔记的习惯,可方便期末复习。
4、 按布置的该门课程的平时作业要求完成相应的作业,最后复习时把五套模拟试卷都做一遍,弄懂每一题,并能举一反三。
5、 本课程按教学大纲要求需要做实验并指定有配套的实验指导书,需要在安装有C++编译器的计算机上做实验。
6、 对考核说明中指定的重点内容和知识点一定要认真消化并搞懂。
第二部分课程重、难点分析
《数据结构》是计算机科学与技术专业统设的一门重要的必修专业基础课,它主要研究数据的各种逻辑结构和在计算机中的存储结构,还研究对数据进行的插入、查找、删除、排序、遍历等基本运算或操作以及这些运算在各种存储结构上具体实现的算法。
虽然本课程的主教材采用C语言描述算法,学习中多数地方都利用了C++,期末卷面考试将采用C/C++语言描述,因而要求在做平时作业和上机实验操作时用C++开发工具(如:
VisualC++或C++Builder或BorlandC++)。
考试的题型有:
单选题,填空题,运算题,简答题,阅读算法,填写算法和编写算法(选做)等。
下面按照主教材中各章次序给出每章的具体复习要求,以便同学们更好地自习和期末复习。
第一章 绪论
1、数据结构是数据及其相互之间的联系。
2、数据结构按逻辑结构分类,可分为:
集合、线性关系、树、图。
按存储结构分类,可分为:
顺序、链接、索引、散列。
3、数据结构的二元组表示由数据元素的集合D和D上二元关系S所组成。
例1.1:
D=(D,S),其中
D={1,2,3,4,5,6}
S={r}
r={(1,2),(2,3),(2,4),(3,4),(3,5),(3,6),(4,5),(4,6)}
请画出对应的数据结构。
(这是图结构)
注:
在考试时可给出数据结构的二元组表示,做各种操作,如树、图的遍历,图的最小生成树或拓朴排序等。
4、时间复杂度和空间复杂度。
例1.2:
请给出下列程序段的时间复杂度(S视为一个原操作)。
(1)for(inti=0;i S;O(n) (2)for(inti=0;i for(intj=i;j S;O(n2) 例1.3: 求(n2+nlog2n+1)/n的数量级是: O(n) 例1.4: 结合具体的算法,求时间复杂度,如: 顺序存储线性表,表元素插入的时间复杂度是: O(n) 链接存储线性表,表结点插入的时间复杂度是: O (1) 快速排序的时间复杂度是: O(n*log2n) 5、课后习题: 所有选择、填空题、计算题。 第二章 线性表 1、线性表的抽象数据类型: (掌握函数的功能) 例2.1: 请写出下列程序段执行完后的结果。 InitList(La); inta[]={32,45,24,64,79,8,16}; For(inti=0;i<7;i++) Insert(La,i,a[i]); Delete(La,a[3]/2); intx=GetElem(La,5); InsertRear(La,x); TraverseList(La); 结果: 452464798168 注: 这种题型注意书写格式,如果题目要求是“请写出下列程序段执行完后的线性表”,则答案为“La=(45,24,64,79,8,16,8)” 2、在顺序存储和链接存储结构下的线性表的插入、删除和单链表求长度函数的实现。 (其它函数一般了解) 顺序存储: 判空: L.length==0 判满: L.length==L.listsize 链接存储: 判空: HL==NULL 3、几种特殊的单链表: 数组存储单链表,附加表头结点单链表,循环链表。 例2.2: 在下列数组a中链接着一个线性表,表头指针为a[0].next,则该线性表为(38,56,25,60,42,74)。 (注: 注意书写格式) a 0 1 2 3 4 5 6 7 8 data 60 56 42 38 74 25 next 4 3 7 6 2 0 1 4、课后习题: 所有选择、填空题和简答题 第三章 栈和队列 1、栈的运算: 例4.1: 请写出下列程序段执行后的结果。 InitStack(a); intb[]={5,17,24,18,32,9}; for(inti=0;i<4;i++) push(a,b[i]); intx=pop(a)+32; push(a,x); while(! StackEmpty(a)) cout< 结果: 5024175 2、顺序存储和链接存储的出栈和入栈算法,及相应的时间复杂度O (1)。 顺序存储: 判空: S.top==-1 判满: S.top==StackMaxSize-1 链接存储: 判空: HS==NULL 3、中缀算术表达式和后缀算术表达式的转化,及后缀算术表达式的求值。 例4.2: 将下列中缀算术表达式转化为后缀算术表达式,并求值。 3+4/(25-(6+15))*8@ 答案: 3425615+-/8*+@ 值为11 注: 若表达式后有“@”符号,则转化后在表达式后也加上“@” 4、队列的运算: 例4.3: 请写出下列程序段执行后的结果。 InitQueue(q1); InitQueue(q2); inta[]={41,67,34,0,69,24,78,58,62,64}; for(inti=0;i<10;i++){ if(a[i]%2==1)QInsert(q1,x); elseQInsert(q2,x); } while(! QueueEmpty(q1)&&! QueueEmpty(q2)) cout< 结果: 41346706924 5、顺序存储和链接存储的出队和入队算法。 顺序存储: 判空: Q.front==Q.rear 判满: Q.front==(Q.rear+1)%QueueMaxSize 队首元素: Q.queue[(Q.front+1)%QueueMaxSize] 链接存储: 判空: HQ.front==NULL或HQ.rear==NULL 队首元素: HQ.front->data 6、课后习题: 所有选择、填空题、简答题 第四章: 串 1、基本概念: 串、子串、空串、串长度、串相等、子串在主串中位置 2、存储结构: 定长顺序存储、堆分配存储、块链存储及各自特点 3、块运算函数: 求子串、串连接、求串长、串比较、子串位置及串赋值 4、串的特殊性(与线性表比较)、串应用中的特点(下标定位) 5、课后习题: 所有选择、填空、简答题 第五章 稀疏矩阵和广义表 1、求数组元素的存储位置(行序、列序),特殊矩阵压缩存储到一维数组中的方法。 2、稀疏矩阵的三元组线性表表示,转置矩阵的三元组线性表表示及转置矩阵算法时间复杂度为O(n*t)。 例3.1: 请写出下列稀疏矩阵的三元组线性表表示及转置矩阵的三元组线性表表示。 答案: M=((1,4,1),(2,1,2),(2,6,3),(3,3,4),(4,2,1),(4,6,3)) M’=((1,2,1),(2,4,1),(3,3,4),(4,1,1),(6,2,3),(6,4,3)) 3、求广义表的表头、表尾,长度和深度,及算法时间复杂度。 都是O(n)。 例3.2: 请写出下列广义表的长度和深度。 长度深度 ()A=((a,b),(c,d))22 ()B=(a,(b,(c,d)),(e))33 ()C=((a,(b,(),c),((d),e)))14 4、课后习题: 所有选择、填空题和计算题 第六章 树和二叉树 1、树的基本概念及广义表表示: 例5.1: 一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))),则树中的结点数为10个,树的深度为4,树的度为3。 2、树和二叉树的性质: 例5.2: 一棵深度为5的满二叉树中的结点数为31个,一棵深度为3的满四叉树中的结点数为21个。 3、二叉树的先序、中序、后序和按层遍历。 例5.3: 假定一棵二叉树广义表表示为A(B(,D(G)),C(E,F)),分别写出对它进行先序、中序、后序和按层遍历的结果。 先序: ABDGCEF 中序: BGDAECF 后序: GDBEFCA 按层: ABCDEFG 例5.4: 根据下述遍历,画出对应二叉树。 、 先序: ABDEGHCFIJ 中序: DBGEHACIFJ 答案: A(B(D,(E(G,H))),C(,E(I,J))) 4、求二叉树深度算法的时间复杂度为: O(log2n) 二叉树的应用部分 1、二叉线索树定义及建立: P133 2、二叉树查找的递归和非递归算法及时间复杂度O(log2n)。 3、二叉树与树、森林的遍历与转换。 3、二叉链表的定义及存储结构及树的孩子——兄弟表示法 5、哈夫曼树: 根据一组数据构造哈夫曼树,并求出带权路径长度WPL。 6、课后习题: 所有选择、填空题,简答题 第七章 图 1、图的存储结构: 邻接矩阵、邻接表。 求出度、入度 2、图的深度优先搜索遍历DFS和广度优先搜索遍历BFS。 例7.1: 已知一个有向图的顶点集V和边集G分别为: V={a,b,c,d,e,f,g,h}; E={,,, 假定该图采用邻接矩阵表示,则分别写出从顶点a出发进行深度优先搜索遍历和广度优先搜索遍历得到的顶点序列。 答案: DFS——abfhcdge BFS——abcfdehg 3、区别图的深度优先搜索遍历和广度优先搜索遍历算法。 注: (1)数据类型为adjmatrix——邻接矩阵 (2)数据类型为adjlist——邻接表 (3)程序较长,有队列——广度优先搜索遍历 例7.2: voidAI(adjmatrixGA,inti,intn) { cout< visited[i]=true; for(intj=0;j if(GA[i][j]! =0&&GA[i][j]! =MaxValue&&! visited[j]) AI(GA,j,n); } 该算法的功能为: 从初始点Vi出发深度优先搜索由邻接矩阵GA所表示的图的递归算法。 4、图的最小生成树: Prim算法和Kruskal算法 例7.3: 已知一个图的顶点集V和边集G分别为: V={0,1,2,3,4,5,6,7} E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,(4,6)4,(5,7)20} 按照Prim算法从V0出发,画出最小生成树,并写出依次得到的各条边及最后的边集数组,并求出最小生成树的权值。 答案: 08165 (1)最小生成树: 2520 327 10 644 (2)依次得到的各条边: (0,3)2(0,2)5(0,1)8(1,5)6(3,6)10(6,4)4(5,7)20 (3)边集数组: 0 1 2 3 4 5 6 起点 0 0 0 1 3 6 5 终点 3 2 1 5 6 4 7 权值 2 5 8 6 10 4 20 (4)权为55 例7.4: 已知一个图的顶点集V和边集G分别为: V={0,1,2,3,4,5,6,7} E={(0,1)8,(0,2)5,(0,3)2,(1,5)6,(2,3)25,(2,4)13,(3,5)9,(3,6)10,(4,6)4,(5,7)20} 按照克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。 (0,3)2,(4,6)4,(0,2)5,(1,5)6,(0,1)8,(3,6)10,(5,7)20 5、DAG图的拓扑排序: 例7.5: 已知一个图的顶点集V和边集G分别为: V={0,1,2,3,4,5,6,7,8}; E={<0,2>,<1,3>,<1,4>,<2,4>,<2,5>,<3,6>,<3,7>,<4,7>,<4,8>,<5,7>, <6,7>,<7,8>}; 若存储它采用邻接表,并且每个顶点邻接表中的边结点都是按照终点序号从小到大的次序链接的,则按教材中介绍的进行拓扑排序的算法,写出得到的拓扑序列。 答案: 1,3,6,0,2,5,4,7,8 6、课后习题: 所有填空题、简答题 第九章 查找 1、各种查找方法的比较: 查找方法 时间复杂度 平均查找长度ASL 顺序查找 O(n) (n+1)/2 二分查找 O(log2n) ((n+1)/n)log2(n+1)-1 索引查找 O(n) 顺序: (n/s+s)/2+1,折半: log2(n/s+1)+s/2 散列查找 掌握“除留余数法”,解决冲突的“线性探查法” 和“链接法” 2、二分查找算法及判定树。 例8.1: 从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度分别为1和3。 注: 其判定树为: 43(18(12,30),78(56,82(,95))) 3、散列查找: 例8.2: 假定对线性表(38,25,74,52,48)进行散列存储,采用H(K)=K%7作为散列函数,若分别采用线性探查法和链接法处理冲突,则对各自散列表进行查找的平均查找长度分别为2和1.4。 解题过程: (1)线性探查法解决冲突: 3825745248 散列地址: 34436 散列表: 0 1 2 3 4 5 6 48 38 25 74 52 ASL=(1+1+2+4+2)/5=2 (2)链接法解决冲突: 3825745248 散列地址: 34436 散列表: 0 1 2 3 4 5 6 382548 5274 4、课后习题: 所有填空题、简答题 第十章 内部排序 1、排序分为内排序和外排序。 内排序分为插入、选择、交换、归并和分配排序。 2、内排序方法比较: 排序方法 时间复杂度 空间复杂度 稳定性 直接插入排序 O(n2) O (1) T 直接选择排序 O(n2) O (1) F 堆排序 O(n*log2n) O (1) F 气泡排序 O(n2) O (1) T 快速排序 O(n*log2n) O(log2n) F 最坏情况 O(n2) O(n) 二路归并排序 O(n*log2n) O(n) T 3、堆排序运算及筛选运算的算法描述: 例9.1: 已知一组数据为(38,56,30,25,35,20,18,59),请调整为一个堆。 答案: (59,56,30,38,35,20,18,25) 例9.2: 假定一组数据的初始堆为(84,79,56,42,40,46,50,38),请写出在堆排序阶段前三次对换和筛选运算后数据的排列情况。 答案: (50,42,46,38,40,56,79,84) 4、快速排序及算法描述: 例9.3: 假定一组记录的排序码为(46,79,56,38,40,80,25,34),则对其进行快速排序的第一次划分的结果为: 答案: [40342538]46[805679] 5、归并排序: 例9.4: 假定一组记录的排序码为(46,79,56,38,40,80,36,40,75,66,84,24),对其进行归并排序的过程中,第三趟归并后的结果为: 答案: [3638404046567980][25667584] 6、课后习题: 所有填空题、简答题 第三部分模拟试卷 模拟试卷一 一、 单选题(每题2分,共20分) 1. 以下数据结构中哪一个是线性结构? () A.有向图 B.队列C.线索二叉树 D.B树 2. 在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点,则执行如下()语句序列。 A.p=q;p->next=q;B.p->next=q;q->next=p; C.p->next=q->next;p=q;D.q->next=p->next;p->next=q; 3. 以下哪一个不是队列的基本运算? () A.在队列第i个元素之后插入一个元素B.从队头删除一个元素 C.判断一个队列是否为空D.读取队头元素的值 4. 字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成()个不同的字符串? A.14B.5 C.6 D.8 5. 由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为()。 A.11B.35C.19D.53 以下6-8题基于图1。 6. 该二叉树结点的前序遍历的序列为()。 A. E、G、F、A、C、D、B B. E、A、G、C、F、B、D C. E、A、C、B、D、G、F D. E、G、A、C、D、F、B 7. 该二叉树结点的中序遍历的序列为()。 A.A、B、C、D、E、G、F B.E、A、G、C、F、B、D C.E、A、C、B、D、G、F E. B、D、C、A、F、G、E 8. 该二叉树的按层遍历的序列为()。 A.E、G、F、A、C、D、B B.E、A、C、B、D、G、F C.E、A、G、C、F、B、D D.E、G、A、C、D、F、B 9. 下面关于图的存储的叙述中正确的是()。 A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C.用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 10. 设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建堆的结果? () A.a,g,h,m,n,p,q,x,z B.a,g,m,h,q,n,p,x,z C.g,m,q,a,n,p,x,h,zD.h,g,m,p,a,n,q,x,z 二、 填空题(每空1分,共26分) 1. 数据的物理结构被分为_________、________、__________和___________四种。 2. 对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________,在表尾插入元素的时间复杂度为____________。 3. 向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________;删除一个结点时,需要执行的操作是______________________________(假设栈不空而且无需回收被删除结点)。 4. 对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有双亲,则双亲结点的编号为________。 5. 当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整到____________位置为止。 6. 以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。 7. 表示图的三种常用的存储结构为_____________、____________和_______________。 8. 对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K%7作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。 9. 在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为____________,空间复杂度为___________。 10. 在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构
![提示](https://static.bdocx.com/images/bang_tan.gif)