数据结构.docx
- 文档编号:20125140
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:21
- 大小:120.92KB
数据结构.docx
《数据结构.docx》由会员分享,可在线阅读,更多相关《数据结构.docx(21页珍藏版)》请在冰豆网上搜索。
数据结构
《数据结构》综合复习资料
一、填空题
1.数据结构是()。
2.堆栈的特点是(),队列的特点是(),字符串中的数据元素为()。
3.列举三种树的存储方式()、()和()。
4.哈希表查找技术的性能取决于三个因素,它们是()、()和()。
5.ADT称为抽象数据类型,它是指()。
6.求下列程序的时间复杂度,并用大O表示方法表示()。
for(i=1;i<=n;++i)
for(j=1;j<=i;++j)
{++x;
a[i][j]=x;
}
7.用堆栈求中缀表达式a+b*c/d+e*f的后缀表达式,求出的后缀表达式为()。
8.含零个字符的串称为()串,用表示。
其他串称为()串。
任何串中所含字符的个数称为该串的()。
9.设有字母序列{Q,D,F,X,A,P,N,B,,Y,M,C,W},请写出按2路归并排序方法对该序列进行一趟排序后的结果()。
10.数据的逻辑结构被分为()、()、()和()四种。
11.算法设计的评价标准为()、()、()、()。
12.在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址为 (),若假定p为一个数组a中的下标,则其后继结点的下标为()。
13.()通常称作串的模式匹配。
在一个主串中查找子串是否存在,存在返回();不存在返回()。
14.在一棵二叉树中,第5层上的结点数最多为();在一棵二叉树中,假定双分支结点数为5个,单分支结点数为6个,则叶子结点数为()个。
15.对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵、邻接表表示时,求任一顶点度数的时间复杂度依次为()、()。
16.给出一组关键字序列{29,18,25,47,58,12,15,10},增量为4的希尔(SHELL)排序结果为()。
17.数据结构的四种基本形式为集合、()、()和()。
18.线性表的常见链式存储结构有()、()和()。
19.设T是一个m*n阶矩阵,T按列序存储在一组连续的存储单元中,每个元素占用w个存储单元,若T[1,1]的存储地址为base,则T[i,j]的存储地址为()。
20.在邻接表上,无向图中顶点vi的度恰为()。
对有向图,顶点vi的出度是()。
为了求入度,必须遍历整个邻接表,在所有单链表中,其邻接点域的值为()的结点的个数是顶点vi的入度。
21.一般情况下,当待排序序列关键字是随机情况时,快速分类是所有数量级()的排序方法中最好的。
对快速排序来讲,其最好情况下的时间复杂度是(),其最坏情况下的时间复杂度是()。
22.以下为冒泡排序的算法。
请分析算法,并在____上填充适当的语句。
voidbulbblesort(intn,listr)
{inti,j,flag;/*flag为特征位*/
for(i=1;i<=n;i++)
{_______;
for(j=1;_;j++)
if(r[j+1].key {; p=r[j];r[j]=r[j+1];r[j+1]=p;} if(flag)return; } } 二、选择题 1、关于算法,下面描述正确的是()。 A、时间复杂度就是算法的执行时间 B、算法必须有输入量和输出量 C、算法就是程序 D、时间复杂度仅反映算法运行时间关于问题规模的增长率 2、若某线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用()存储方式最节省时间。 A、顺序表B、单链表C、双链表D、单循环链表 3、以下说法错误的是()。 A、对循环链表来说,从表中任一结点出发都能通过前后操作而扫描整个循环链表。 B、对单链表来说,只有从头结点开始才能扫描表中全部结点。 C、双链表的特点是找结点的前趋和后继都很容易。 D、对双链表来说,某个结点的存储位置既存放在其前趋结点的后继指针域中,也存放在它的后继结点的前趋指针域中。 4、一个堆栈的入栈序列为abcde,若出栈和入栈操作可间隔进行,则出栈序列不可能的为()。 A、edcbaB、decbaC、decabD、abcde 5、设定树根的层次为1,则有64个结点的完全二叉树的深度为()。 A、8B、7C、6D、5 6、在二叉树的先序遍历,中序遍历和后序遍历算法中,所有叶子结点的先后顺序()。 A、都不相同 B、前序遍历和中序遍历相同,而与后序遍历不同 C、完全相同 D、前序遍历和后序遍历相同,而与中序遍历不同 7、关于逻辑结构和存储结构,正确的描述是()。 A、线性数据结构必须采用链式存储结构 B、一种逻辑结构,可以用不同的存储结构来存储,反之亦然 C、一种逻辑结构,可以用不同的存储结构来存储,反之不然 D、一种存储结构只能表示一种逻辑结构 8、关于链表的特点描述不正确的是()。 A、存储空间不一定连续; B、元素之间的后继关系是由指针来体现的; C、逻辑上相邻,物理上不一定相邻; D、随机存取(顺序存取),即访问任何一个元素的时间相同。 9、树最适合用来表示()。 A、元素之间具有分支层次关系的数据B、无序数据元素 C、有序数据元素D、元素之间无联系的数据 10、下列说法不正确的是()。 A、图的遍历是从给定的源点出发每一个顶点仅被访问一次 B、图的深度遍历不适用于有向图 C、遍历的基本算法有两种: 深度遍历和广度遍历 D、图的深度遍历是一个递归过程 11、在最好和最坏情况下的时间复杂度均为O(nlogn)且稳定的排序方法是()。 A、快速排序B、堆排序C、归并排序D、基数排序 12、下程序段的时间复杂度为()。 for(i=2;i<=n;++i) for(j=2;j<=i-1;++j) {++x;a[i,j]=x;} A、O (1)B、O(n)C、O( )D、O( ) 13、设矩阵A是一对称矩阵(aij=aji,1<=i,j<=8),若每个矩阵元素占3个单元,将其上三角部分(包括对角线)按行序为主序存放在数组B中,B的首地址为1000,则矩阵元素a67的地址为()。 A、1031B、1093C、1096D、1032 14、已知含10个结点的二叉排序树是一棵完全二叉树,则该二叉排序树在等概率情况下查找成功的平均查找长度等于()。 A、1.0B、2.9C、3.4D、5.5 15、已给下图,哪一项是该图的拓扑排序? ()。 A、1,2,3,4,5B、1,3,2,4,5 C、1,2,4,3,5D、1,2,3,5,4 16、以下说法错误的是()。 A、散列法存储的基本思想是由关键码的值决定数据的存储地址。 B、散列表的结点中只包含数据元素自身的信息,不包含任何指针。 C、装填因子是散列法的一个重要参数,它反映散列表的装填程度。 D、散列表的查找效率主要取决于散列表造表时选取的散列函数和处理冲突的方法。 17、以下说法正确的是()。 A、平衡二叉树一定是满二叉树。 B、虽然关键字序列的顺序不一样,但依次生成的二叉排序树是一样的。 C、在二叉排序树上插入新的结点时,不必移动其他结点,只需改动某个结点的指针,由空变为非空即可。 D、在二叉排序树上删除一个结点时,不必移动其他结点,只要将该结点的父结点的相应的指针域置空即可。 18、以下判断不正确的是()。 A、顺序存储的线性表可随机存取。 B、同一线性表中的数据元素应具有相同的特性。 C、顺序存储方式的优点是存储密度大,插入、删除操效率高。 D、在线性表的链式存储结构中,逻辑上相邻的数据元素在物理位置上不一定相邻。 19、下列判断正确的是()。 A、如果两个串含有相同的字符,则这两个串相等。 B、数组可以看成线性结构的一种推广,因此可以对它进行插入、删除等运算。 C、在索引顺序表上实现分块查找,在等概率查找情况下,其平均查找长度不仅与表中元素个数有关,而且与每一块中元素个数有关。 D、对任意图,从它的某个顶点出发,进行一次深度优先或广度优先搜索,即可访问图的每个顶点。 20、对广义表L=((a,b),c,d)进行操作tail(head(L))的结果是()。 A、(c,d)B、(d)C、bD、(b) 21、下列说法正确的是()。 A、树的先根遍历序列与其对应的二叉树的先根遍历序列相同 B、树的先根遍历序列与其对应的二叉树的后根遍历序列相同 C、树的后根遍历序列与其对应的二叉树的先根遍历序列相同 D、树的后根遍历序列与其对应的二叉树的后根遍历序列相同 22、以下说法错误的是()。 A、用邻接矩阵法存储一个图时,在不考虑压缩存储的情况下,所占用的存储空间大小只与图中顶点个数有关,而与图的边数无关。 B、邻接表法只能用于有向图的存储,而邻接矩阵法对于有向图和无向图的存储都适用。 C、存储无向图的邻接矩阵是对称的,因此只要存储相邻矩阵的下(或上)三角部分即可。 D、用邻接矩阵A表示图,判定任意两个结点Vi和Vj之间是否有长度为m的路径相连,则只要检查A的第i行第j列的元素是否为0即可。 23、希尔排序属于()。 A、插入排序B、选择排序C、归并排序D、交换排序 三、基本技能测试题 1、已知一任意关键字序列{19,14,22,01,66,21,83,27,56,13},按元素在序列中的次序构造一棵平衡二叉树,给出构造过程(当有调整时给出调整后的平衡二叉树)并求查找成功的平均查找长度。 2、有待排序的元素序列{72,13,70,23,95,16,5,68,26,45},请用快速排序的方法对上述序列排序,给出每一趟排序后的结果。 3、画出下图的邻接表存储结构示意图,并根据邻接表存储结构示意图求出图的深度优先遍历序列和广度优先遍历序列。 4、学习数据结构的目的是什么? 5、已知二叉树的先序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC,画出这个二叉树。 6、已知字符A、B、C、D、E、F的使用频率分别为9、15、32、22、18、4,构造哈夫曼树(HuffmanTree),求出各个字符的哈夫曼编码。 7、已知加权图如下,用普里姆(PRIM)方法求出最小生成树,标出构造过程中选定边的顺序。 8、有待排序的元素序列{68,82,72,10,70,23,95,16,26,45},请用快速排序的方法对上述序列排序,给出每一趟排序后的结果。 9、已知无向图如下,请完成 (1)给出图的邻接链表存储结构图; (2)依据你的存储结构图,写出从A开始的广度和深度优先遍历序列。 10、对于数据序列{49,38,65,97,76,13,27,50},构造平衡二叉树,给出构造过程。 四、算法设计与编程题 1、以顺序表作为存储结构,编写一个实现线性表就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表数据元素顺序有(a1,a2,...,an)逆置为(an,...,a2,a1)。 2、二叉树采用二叉链表作为存储结构,结点数据元素类型为字符型,用C语言完成: (1)给出二叉链表的结点。 (2)给出输出中序序列的遍历算法。 3、用顺序表存储空间的动态分配的方法实现线性表的插入算法。 即在顺序存储的线性表中的第i个数据元素之前插入一个数据元素。 4、使用递归编写算法计算二叉树的高度。 5、已知Q是一个非空队列,S是一个空栈。 仅用队列和栈的ADT函数和少量工作变量,编写一个算法,将队列Q中的所有元素逆置。 栈的ADT函数有: makeEmpty(s: stack);置空栈 push(s: stack;value: datatype);新元素value进栈 pop(s: stack): datatype;出栈,返回栈顶值 isEmpty(s: stack): boolean;判栈空否 队列的ADT函数有: enqueue(q: queue;value: datatype);元素value进队 deQueue(q: queue): datatype;出队列,返回队头值 isEmpty(q: queue): boolean;判队列空否 6、串的堆分配存储结构如下: typedefstruct {char*ch; intlen; }HSTRING; 编写串复制的算法StringCopy(HSTRING*ss,HSTRING*dd),将串ss中的各个字符复制到串dd中。 7、图的邻接矩阵和邻接表存储结构定义如下: 邻接矩阵: typedefstruct {intvexnum,arcnum; charvexs[100]; intarcs[100,100] }MGraph; 邻接表: typedefstructarcptr {intadjvex;//邻接点的存储位置 structarcptr*nextarc;}ArcNode;//下邻接点 typedefstructvexnode {chardata;//数据元素 ArcNode*firstarc; }Vnode;//第一个邻接点 typedefstruct {intvexnum,arcnum;//图的顶点个数 Vnodevertices[100]; }ALGraph; 给出将无向图的邻接矩阵转换成邻接表的算法。 《数据结构》综合复习资料答案 一、填空题 1、相互之间存在一种或多种特定关系的数据元素的集合,即带结构的数据元素的集合。 2、先进后出,先进先出,字符. 3、双亲存储、孩子存储和左儿子右兄弟存储。 4、哈希函数、处理冲突的方法和装填因子。 5、一个数学模型及定义在这个模型上的一组操作或运算的总称。 6、O(n2)。 7、abc*d/+ef*+。 8、空,非空。 长度。 9、D,Q,F,X,A,P,B,N,M,Y,C,W。 10、集合结构、线性结构、树形结构和图形结构。 11、正确性、易读性、健壮性、效率。 12、p->next,p+1。 13、子串的定位操作。 子串在主串中的位置;0。 14、16;6。 15、O(n)、O(e/n)。 16、29,12,15,10,58,18,25,47。 17、线性结构、树型结构和图状结构或网状结构。 18、单链表、双链表和循环链表。 19、base+[(j-1)*m+(i-1)]*w。 20、vi顶点对应的链表长度。 vi顶点对应的链表长度。 顶点vi的存储位置。 21、O(nlogn)O(nlogn),O(n2)。 {___flag=1____; for(j=1;j<=_i-1_;j++) if(r[j+1].key {flag=0; 二、选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 D A A C B C B D A B 题号 11 12 13 14 15 16 17 18 19 20 答案 C C B B A B C C C D 题号 21 22 23 答案 A B A 三、基本技能测试题 1、已知一任意关键字序列{19,14,22,01,66,21,83,27,56,13},按元素在序列中的次序构造一棵平衡二叉树,给出构造过程(当有调整时给出调整后的平衡二叉树)并求查找成功的平均查找长度。 解: 参见教材227-232页。 2、有待排序的元素序列{72,13,70,23,95,16,5,68,26,45},请用快速排序的方法对上述序列排序,给出每一趟排序后的结果。 解: 参见教材273-276页。 3、画出下图的邻接表存储结构示意图,并根据邻接表存储结构示意图求出图的深度优先遍历序列和广度优先遍历序列。 解: 参见教材163页和167-170页。 4、学习数据结构的目的是什么? 答: (1)学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择合适的逻辑结构、存储结构及其相应的算法; (2)初步掌握算法的时间分析和空间分析技术;(3)能够设计符合软件工程规范的、较复杂的程序;程序结构清晰,正确易懂,较好的时间和空间复杂度。 5、已知二叉树的先序序列为ABDEGCFHIJ,中序序列为DBGEAHFIJC,画出这个二叉树。 答: 6、已知字符A、B、C、D、E、F的使用频率分别为9、15、32、22、18、4,构造哈夫曼树(HuffmanTree),求出各个字符的哈夫曼编码。 7、已知加权图如下,用普里姆(PRIM)方法求出最小生成树,标出构造过程中选定边的顺序。 解: 8、有待排序的元素序列{68,82,72,10,70,23,95,16,26,45},请用快速排序的方法对上述序列排序,给出每一趟排序后的结果。 解: 第一趟: 45,26,16,10,23,68,95,70,72,82 第二趟: 23,26,16,10,48,68,82,70,72,95 第三趟: 10,16,23,26,48,68,72,70,82,95 第四趟: 10,16,23,26,48,68,70,72,82,95 9、已知无向图如下,请完成 (1)给出图的邻接链表存储结构图; (2)依据你的存储结构图,写出从A开始的广度和深度优先遍历序列。 (2)(3)广度优先遍历序列: ABCGFDE 深度优先遍历序列: ABDCEFG 10、对于数据序列{49,38,65,97,76,13,27,50},构造平衡二叉树,给出构造过程。 四、算法设计与编程题 1、以顺序表作为存储结构,编写一个实现线性表就地(即使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表数据元素顺序有(a1,a2,...,an)逆置为(an,...,a2,a1)。 解: 要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。 算法如下: //表结构定义同上 voidReverseList(Seqlist*L) {Datatypet;//设置临时空间用于存放data inti; for(i=0;i {t=L->data[i];//交换数据 L->data[i] =L->data[L->length-1-i] ; L->data[L->length-1-i]=t ; } } 2、二叉树采用二叉链表作为存储结构,结点数据元素类型为字符型,用C语言完成: (1)给出二叉链表的结点。 (2)给出输出中序序列的遍历算法。 解: (1)typedef用户数据类型elemtype;//定义数据元素类型 typedefstructBiTNode {chardata;//结点数据类型 structBiTNode*lchild,*rchild;//定义左、右孩子为指针型 }BiTNode,*BiTree; (2)voidInOrderTraverse(BiTreet) {BiTNode*p; p=t; if(p! =NULL) {InOrderTraverse(p->lchild); printf(“%c”,p->data); InOrderTraverse(p->rchild);} } 3、用顺序表存储空间的动态分配的方法实现线性表的插入算法。 即在顺序存储的线性表中的第i个数据元素之前插入一个数据元素。 解: StatusListInsert_sq(sequenlist&L,inti,entrytypee) {if(i<1||i>L.len+1)returnERROR;//i值不合法 if(L.len>=L.listsize)//检查空间是否已满 {newbase=(elemtype*)realloc(L.a,(listsize+LISTINCREMENT)*sizeof(elemtype));//增加空间 if(! newbase)exit(Overflow);//空间增加失败 L.a=newbase;//空间增加成功 L.listsize+=LISTINCREMENT;} q=&(L.a[i-1]);//q指向插入位置 for(p=&(L.a[L.len-1]);p>=q;--p)*(p+1)=*p;//将线性表第i个元素之后的所有元素向后移动 *q=e;//插入e ++L.len;//表长+1 ReturnOK; } 4、使用递归编写算法计算二叉树的高度。 解: intHeight(BinTreeT) {inti,j; if(! T)return0; else{i=Height(T->lchild); j=Height(T->rchild); return1+i>j? i: j; } } 5、已知Q是一个非空队列,S是一个空栈。 仅用队列和栈的ADT函数和少量工作变量,编写一个算法,将队列Q中的所有元素逆置。 栈的ADT函数有: makeEmpty(s: stack);置空栈 push(s: stack;value: datatype);新元素value进栈 pop(s: stack): datatype;出栈,返回栈顶值 isEmpty(s: stack): boolean;判栈空否 队列的ADT函数有: enqueue(q: queue;value: datatype);元素value进队 deQueue(q: queue): datatype;出队列,返回队头值 isEmpty(q: queue): boolean;判队列空否 解: voidchange(queueq,stacks) {datatypetemp; makeEmpty(s); while(! isEmpty(q)) {temp=deQueue(q); push(s,temp); } while(! isEmpty(s)) {temp=pop(s); endueue(q,temp); } } 6、串的堆分配存储结构如下: typedefstruct {char*ch; intlen; }HSTRING; 编写串复制的算法StringCopy(HSTRING*ss,HSTRING*dd),将串ss中的各个字符复制到串dd中。 解: intStringCo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构