2022年徐师大数据结构复习资料 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年徐师大数据结构复习资料 .pdf》由会员分享,可在线阅读,更多相关《2022年徐师大数据结构复习资料 .pdf(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、注:算法题:程序填空;添加注释;写运行结果;画图;描述算法思想。综合题:画图;根据图表回答问题。数据结构考试重点(答案仅供参考)绪论1谈谈你对“数据结构”概念的理解。数据结构是相互之间存在一种或多种特定关系的数据元素的集合,在任何问题中,数据元素都不是孤立存在的。而是他们之间存在着某种关系,这种数据元素相互之间的关系称为结构,这也是我们要讨论的数据结构的主要内容。一般来说,数据结构包括以下三方面的内容:(1)数据元素之间的逻辑关系,也称数据的逻辑结构。数据的逻辑结构是抽象的,它不依赖计算机的实现,只依赖人们对事物的理解和描述。(2)数据元素及其关系,在计算机内部(内存)中的表示,称其为数据的物
2、理结构或数据的存储结构。2谈谈你对“抽象数据类型(ADT) ”的理解。抽象数据类型 (Abstract Data Type 简称 ADT)是指一个数学模型以及定义在此数学模型上的一组操作。 抽象数据类型需要通过固有数据类型( 高级编程语言中已实现的数据类型) 来实现。抽象数据类型是与表示无关的数据类型,是一个数据模型及定义在该模型上的一组运算。对一个抽象数据类型进行定义时,必须给出它的名字及各运算的运算符名,即函数名,并且规定这些函数的参数性质。一旦定义了一个抽象数据类型及具体实现,程序设计中就可以像使用基本数据类型那样,十分方便地使用抽象数据类型。线性表3 顺序表的动态内存分配的好处是什么?
3、(1)长度能动态增长;根据实际需要分配所需内存大小,合理利用资源(2)不需要预先分配存储空间;算法题( 26) 简答题( 40) 综合题( 24) 论述题( 10)结论( 10)*线性表( 10)*栈队列( 18)* *串(4)*数组( 4)*树与二叉树( 17)*图(6)*查找( 16)*排序( 15)*精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 19 页4 单链表中引入“头结点”的好处是什么?什么情况下单链表需要使用“尾指针”?(1)由于开始结点的位置存放在头结点的指针域中,所以对链表第一个位置的操作同其他位置一样,无须特殊处理
4、。(2) 只有“头指针”时,访问“头”方便,而访问“尾”不方便。有时候,根据需要,一个单向循环链表只设置尾指针,而不设置头指针。此时访问“头”和“尾”都很方便。5 在主调函数中构建了一个“不带头结点”的单链表L1(即该链表已完成初始化,甚至链表已不空),在子函数中对该单链表进行插入 /删除操作。说明在参数传递时, 使用“引用”与不使用“引用”的区别。6 在主调函数中声明了一个单链表L1,在子函数InitLink( )中对该单链表初始化为一个“带头结点”的单链表。在“不使用引用型参数”的情况下,1) 写出初始化函数。typedef int data; typedef struct LNode d
5、ata d; Struct LNode *next; LNode ,*LinkList; LinkList initialize (void) LinkList L; L=(LinkList)malloc (sizeof(LNode);L-next=NULL;return L; 2)写出调用该函数的语句。Void main () LinkList L1; L1=initialize(); . . . return 0; 栈队列7 对“链栈”, 哪一端是“栈顶”?为什么?链头作为栈顶原因:链栈是运算受限的单链表,其插入和删除操作仅限制在表头位置上操作,因此将链头作为栈顶方便操作。精选学习资料 -
6、 - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 19 页8 链栈中还要不要“头结点”?为什么?不要。原因:链栈是运算受限的单链表,其插入和删除的操作仅在链表头位置上进行。如果加了头结点,等于要对头结点之后的结点进行操作,反而使算法更复杂。9 顺序栈采用动态内存分配,数据结构定义如下:typedef struct sStack DataType *base; DataType *top; int stacksize; /最大容量 SqStack; 1)如何求栈高?Int stackHeight (SqStack sq) return sq.top-sq.
7、base; 2)能否将top 定义成int 类型?可以10链队列的“队头”与其它链式结构(如链栈或者单链表)有什么不同?11为什么引入“循环队列”?写出循环队列判队满,判队空以及求队长的表达式。原因:为充分利用向量空间,克服假溢出 现象方法:1)设置一个队长变量2)牺牲一个元素空间队空: Q.front= Q.rear; 队满: (Q.rear+1)%maxsize= Q.front 队长 (Q.rear-Q.front+MAXSIZE)%MAXSIZE 知识:12.对于一般的顺序存储结构,若采用“动态内存分配” ,当插入元素而空间不足时,可以动态增加内存分配。而对于循环队列,能否这样做?为什
8、么?不能循环队列是将顺序队列臆造成一个环状空间,当插入元素而空间不足时,动态增长内存分配会破坏循环队列的结构。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 19 页能力:13.定义一个长度为k 的循环队列,有一个字符串S(长度 k ) ,编写程序完成进队出队。调试完毕后,将完整代码写在实验报告册上。特别强调:将关键代码加注释,注释行数不少于总代码行的2/3 。#include stdio.h #include stdlib.h #define MAXSIZE 10; /最大队列长度typedef char DataType; type
9、def struct DataType *base; /初始化的动态分配存储空间int front ,rear; /头,尾指针,若队列不空,指队头元素、队列尾元素的下一个位置 SqQueue; /-实现 - void InitQueue (SqQueue &Q) /初始化队列 Q.base=(DataType *)malloc( MAXSIZE* sizeof( DataType) ); Q.front=Q.rear=0; bool isQEmpty( SqQueue Q) /判队空 if (Q.front=Q.rear) return true; else return false; boo
10、l isQFull( SqQueue Q) /判队满 if (Q.rear+1) % MAXSIZE =Q.front) return true; else return false; void EnQueue(SqQueue &Q, DataType &e) /向队列中添加元素 Q.baseQ.rear=e; Q.rear=(Q.rear+1)% MAXSIZE; void OutQueue(SqQueue &Q, DataType &e) /出队 e=Q.baseQ.front; Q.front=(Q.front+1)% MAXSIZE; 精选学习资料 - - - - - - - - -
11、名师归纳总结 - - - - - - -第 4 页,共 19 页 /-实现完毕 - void main() /调用函数 SqQueue Q1; InitQueue (Q1); char c1, c2; cout 请读入符号串,以# 号结束 :c1; while( c1!=#) if( ! isQFull(Q1) ) EnQueue(Q1, c1); cinc1; else OutQueue(Q1,c2); coutc2; while( ! isQEmpty(Q1) ) OutQueue(Q1,c2); coutc2; coutendl; */ 串14.能力:在第 1 章 绪论中,曾经写了一个描
12、述“串”的ADT ,并给出了其表示与实现,以及一个完整的程序。要求:给该程序关键代码加注释,注释行数不少于总代码行的2/3 。#include iostream.h #include malloc.h typedef struct str 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 19 页char *ch; int length; HString; /- 基本操作算法描述- bool StrAssign(HString &T, char *chars) /将 chars串赋给 T int i; char *c; if( T.ch)
13、 free( T.ch); /这行代码有问题,思考?for( i=0, c=chars; *c ; i+, c+) /求 chars串的长度; if( !i) T.ch=NULL; T.length=0; /建立一个空串else T.ch=( char *) malloc( i* sizeof( char) );/注意:这里没有检测是否内存分配成功,其实是应该做的for( int j=0; ji; j+) T.chj=charsj; /注意: T 串的末尾没有添加0 T.length=i; return true; /赋值成功 int StrLength( HString S) /求串长 re
14、turn S.length; int StrCompare( HString S, HString T) /串大小的比较 int i; for( i=0; iS.length & iT.length; i+) if( S.chi != T.chi ) return S.chi - T.chi; return S.length - T.length; /请理解这一行的意思 bool SubString(HString &Sub, HString S, int pos, int len) /求子串 if( posS.length | lenS.length-pos+1) return false;
15、 if( Sub.ch) free(Sub.ch); /这行代码有问题,思考?if( !len) Sub.ch=NULL; Sub.length=0; else 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 19 页Sub.ch=( char*) malloc( len * sizeof( char) );/注意:这里没有检测是否内存分配成功,其实是应该做的for( int j=0, k=pos-1; j0) n=StrLength(S); m=StrLength(T); i=pos; while( ipos; coutIndex(
16、S, T, pos)endl; 数组知识:15.二维数组A89 按行优先顺序存储,若数组元素A23 的存储地址为1087,A47 的存储地址为1153,则数组元素A67 的存储地址是多少?A47 和 A23 相差 22 个元素(4 9+7)-(2 9+3)=22 1153-1087=66 即一个数组元素占3 个字节A67 和 A47 相差 18 个元素(6 9+7)-(4 9+7)=18 则 A67 存储地址为 1153+183=1207 16、三角矩阵和对称矩阵在进行压缩存储时有什么不同?三角矩阵是指上(下)三角矩阵的下(上)三角(不包括对角线)中的元素均为常数C 或 0,所以在压缩存储时只
17、存储上(下)三角中的元素,并加一个存储常数C 的存储空间。树和二叉树:知识:17、对于二叉树,什么情况下选用“顺序存储”较好?稠密的树18、先序序列为:ABCDEFG ,中序序列为:CBAEFGD ,画出该二叉树,及二叉链表。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 19 页19、实现二叉链表的层序遍历,需要借助于什么数据结构?为什么?层序遍历需要借助于“队列”完成,对二叉树遍历,除了按先序、中序、后序遍历外,还可以按“层序”遍历。先一层的遍历完须保存下来。20、结点权值分别是:0.05,0.29,0.07,0.08,0.14,0
18、.23,0.03, 0.11 ,构造最优二叉树。21、能力:1)按右图所示的二叉树建立二叉链表,然后:2)按 “ 中序 ” 遍历二叉链表;3)求树高度;调试完毕后,将完整代码写在实验报告册上。要求:将关键代码加注释,注释行数不少于总代码行的2/3 。#include #include typedef char elemtype; typedef struct BiNTree /* 定义二叉树结点类型*/ elemtype data; struct BiNTree *lchild; struct BiNTree *rchild; BiNTree,*BiTree; /创建一棵二叉树void Cre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年徐师大数据结构复习资料 2022 师大 数据结构 复习资料
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内