数据结构综合练习1
- 格式:doc
- 大小:320.50 KB
- 文档页数:12
综合练习一、单项选择题1.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为(C ).A.存储结构B。
逻辑结构C.链式存储结构D。
顺序存储结构2.设语句x++的时间是单位时间,则以下语句的时间复杂度为( B ).for(i=1; i<=n; i++)for(j=i;j〈=n;j++)x++;A。
O(1) B.O(2n)C。
O(n) D.O(3n)3.链式存储结构的最大优点是( D )。
A。
便于随机存取B。
存储密度高C.无需预分配空间D.便于进行插入和删除操作4.假设在顺序表{a0,a1,……,a n-1}中,每一个数据元素所占的存储单元的数目为4,且第0个数据元素的存储地址为100,则第7个数据元素的存储地址是( D ).A。
106 B. 107 C。
124 D.1285.在线性表中若经常要存取第i个数据元素及其前趋,则宜采用( A )存储方式.A.顺序表B. 带头结点的单链表C。
不带头结点的单链表 D. 循环单链表6.在链表中若经常要删除表中最后一个结点或在最后一个结点之后插入一个新结点,则宜采用( C )存储方式。
A.顺序表B。
用头指针标识的循环单链表C。
用尾指针标识的循环单链表D。
双向链表7.在一个含有n个结点的有序单链表中插入一个新结点,使单链表仍然保持有序的算法的时间复杂度是( C )。
O(1) B。
O(log2n) C。
O(n) D。
O(n2)8.要将一个顺序表{a0,a1,……,a n—1}中第i个数据元素a i(0≤i≤n—1)删除,需要移动( B )个数据元素。
A.i B。
n—i-1 C. n-i D. n—i+19.在栈中存取数据的原则是( B )。
A。
先进先出 B。
先进后出C。
后进后出 D。
没有限制10.若将整数1、2、3、4依次进栈,则不可能得到的出栈序列是( D )。
A.1234 B. 1324 C. 4321 D. 142311.在链栈中,进行出栈操作时(B )。
数据结构练习试卷1(题后含答案及解析)题型有:1. 选择题选择题(每小题1分,共75分)下列各题A、B、C、D四个选项中,只有一个选项是正确的,请将此选项涂写在答题卡相应位置上,答在试卷上不得分。
1.数据结构主要研究数据的______。
A.逻辑结构B.存储结构C.逻辑结构和存储结构D.逻辑结构和存储结构及其运算的实现正确答案:D解析:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
数据结构一般包括三方面的内容:①数据之间的逻辑关系。
从逻辑关系上描述数据,与数据的存储无关。
②数据的存储结构。
存储结构分为顺序结构和链式结构,是逻辑结构在计算机存储器中的表示,它包括数据元素的表示和关系的表示。
③数据的运算。
也就是在数据上所施加的一系列操作。
只考虑操作的功能是怎样的,暂不考虑如何实现。
综上所述,本题的正确答案为选项D。
知识模块:数据结构2.在数据结构中,结点(数据元素)及结点间的相互关系组成数据的逻辑结构。
按逻辑结构的不同,数据结构通常可分为______两类。
A.线性结构和非线性结构B.紧凑结构和稀疏结构C.动态结构和静态结构D.内部结构和外部结构正确答案:A解析:在数据结构中,结点(数据元素)及结点间的相互关系组成数据的逻辑结构。
按逻辑结构的不同,数据结构通常可分为线性结构和非线性结构两类。
本题正确答案为选项A。
知识模块:数据结构3.下面叙述不正确的是______。
A.算法的执行效率与数据的存储结构有关B.算法的空间复杂度是指执行这个算法所需要的内存空间C.算法的有穷性是指算法必须能在执行有限个步骤之后终止D.算法的时间复杂度是指执行这个算法所需要的时间正确答案:D解析:算法的时间复杂度是指执行算法所需要的计算工作量,故D选项不正确。
知识模块:数据结构4.数据的存储结构是指______。
A.数据所占的存储空间量B.数据的逻辑结构在计算机中的表示C.数据在计算机中的顺序存储方式D.存储在外存中的数据正确答案:B解析:数据的存储结构是数据元素在计算机存储器内的表示。
《数据结构》(01111、01211)作业题(一)一、判断题(下列各题,你认为正确的,请在前面的括号内打√,错误的打×。
每题1分,共10分)1、(√)2、(√)3、(√)4、(√)5、(√)6、(╳)7、(√)8、(√)9、(╳)10、(√)(√)1. 数据的存贮结构是数据的逻辑结构的存贮映象。
(√)2. 用顺序表来存储线性表时,不需要另外开辟空间来保存数据元素之间的相互关系。
(√)3. 非线性结构中,至少存在一个元素不止一个直接前趋或不止一个直接后继。
(√)4. 树的最大特点是层次结构。
(√)5. 队列的特点是先进先出。
(╳)6. 图的最小生成树是唯一的。
(√)7. 线性表是广义表的特殊形式。
(√)8. 后序序列和中序序列能唯一确定一棵二叉树。
(╳)9. 散列表是一种链式存贮结构。
(√)10. 快速排序并非在任何情况下都比其它排序方法速度快。
二、填空题(每空2分,共20分)1.数据的存贮结构的四种形式为存贮、存贮、存贮和存贮。
2.所有插入和删除都在表的一端进行的线性表称为。
3.n个结点的完全二叉树,其深度h= 。
4.对于顺序循环队列Q[M],下标从0到M-1,头尾指针分别为F和R,入队时,队尾指针循环加1可表示为R= 。
5.散列法既是一种查找方法,又是一种方法。
6.n个顶点的有向完全图具有条弧。
7.n个元素的顺序查找的平均查找长度为。
三、单选题(本题的每一备选答案中,只有一个是正确的,请把你认为正确的答案的题号填入题干的括号内,多选不给分,每小题3分,共15分)。
1.若进栈序列为1,2,3,4,则不可能得到的出栈序列是()(1)3,2,1,4 (2)3,2,4,1 (3)4,2,3,1 (4) 2,3,4,12.对于下列二叉树,其后序序列为()(1)ABDECFG (2)DBEAFCG (3)DEBFGCA (4)GFCEBDA3.对于下列AOV网,不能出现的拓扑序列为()(1)1 2 3 4 5 (2)1 2 4 3 5 (3)2 4 1 3 5 (4)2 1 4 3 5AB C DEFG题三2图13542题三、3图4.深度为k 的完全二叉树所含叶结点的个数最多为 ( ) (1)2k (2) 2k-1 (3) k (4) 2k 5.衡量查找算法效率的主要标准是 ( ) (1) 元素个数 (2) 所需的存贮量 (3) 平均查找长度 (4) 算法难易程度 四、应用题(25分)1.将下列森林转化为二叉树。
综合练习题一一、简答题1、简述算法及其特性和其复杂性的度量标准。
2、简述数据的逻辑结构的种类。
3、简述排序算法的稳定性并列举三种以上稳定的排序算法。
4、简述在顺序表的第i个元素的位置上插入数据x的算法思想。
5、已知完全二叉树有80个结点,试问其深度及度为2的结点数目。
6、简述算法的基本概念及其分析的主要内容7、简述堆栈和队列的运算特性。
8、堆栈的入栈序列为a,b,c,d,e 问可否得到相应的出栈序列abcde和edcba9、简述在顺序表的第i个元素的位置上删除数据x的算法思想。
二、分析计算题1、计算下列算法中带@记号的语句的频度及算法的时间复杂度。
(1)s=0;for (i=0; i<n; i++)for (j=0; j<n; j++)s+=i+j; @(2)for (i=1; i<n; i++)for(j=n;j>=i;j--)sum+=2; @(3)i=1;while (i<=n)i=i*3; @2、请给出下图所示的二叉树的先序遍历、中序遍历和后序遍历的结果。
3、已知某二叉树的前序遍历结点访问顺序是abdgcefh,中序遍历的结点访问顺序是dgbaechf,试确定该二叉树的具体形态,并写出其后序遍历结果。
4、有七个带权结点,其权值分别为3,7,8,2,6,10,14,试以它们为叶子结点构造一棵霍夫曼树,并计算出带权路径长度WPL和相应结点的霍夫曼编码。
5、试给出下图所示的无向图的深度优先遍历和广度优先遍历的结果。
6、试给出下图所示的有向图的邻接表存储结构。
7、下图所示的矩阵是一个无向网。
请(1)设计该无向网的邻接矩阵(2)求出该网的所有最小生成树。
8、设哈希表的长度m=13,哈希函数为H(K)=K mod11,给定的关键码序列为19,14,01,68,20,84,27,55,11,29,33,35。
试画出用线性探测法解决冲突时所构造的哈希表并计算在等概率下搜索成功的平均搜索长度。
数据结构综合测试(⼀)(长春理⼯⼤学精品课)数据结构测试(长春理⼯⼤学精品课)综合测试⼀⼀、选择1.数据结构中,与所使⽤的计算机⽆关的是数据的()结构。
查看答案A 顺序B 物理C 逻辑D 物理和存储正确答案为C解释:与计算机⽆关的结构是逻辑结构,是⽤户对数据的组织形式,存储时的物理结构才与计算机有关。
收起2.在长度为n的顺序表中插⼊⼀个元素时,等概率情况下的平均移动元素的次数是()查看答案A (n-1)/2B n/2C n*(n-1)/2D (n+1)/2正确答案为B解释:在往长度为n的线性表中插⼊元素时,位置可以是1,2,3.......n+1,因此移动元素个数为[n+(n-1)+......+0]/ (n+1)=n/2收起3.对于⼀个头指针为H的带头结点的单链表,判定该表为空表的条件是()。
查看答案A H==NULLB H!=NULLC H→next ==HD H→next==NULL解释:A答案是不带头结点的单链表H为空的判定条件B答案是不带头结点的单链表H不为空的判定条件C答案是带头结点的循环单链表H为空的判定条件收起4.在⼀个顺序表中,若表的第⼀个元素的存储地址是210,每⼀个元素的长度为3,则第5个元素的存储地址是()。
查看答案A 219B 222C 225D 228正确答案为B解释:第5个元素之前有4个元素,因此地址为210+(4*3)=222收起5.栈S最多能容纳4个元素,现有6个元素按a,b,c,d,e,f的顺序进栈,下⾯序列()是可能的出栈序列。
查看答案A edcbafB bcefadC cbedafD adfebc正确答案为C解释:堆栈的特点是后进先出,⽽且最多⼊栈4个元素收起6.循环队列⽤数组A[M]存放元素,已知其头尾指针分别为front和rear,则当前队列中的元素个数是()。
查看答案A rear-front+1B rear-front-1解释:若rear>=front 则元素个数为rear-front 若rear7.已知⼀棵⼆叉树的有35个叶⼦结点,则该⼆叉树⾄少有()个结点。
数据结构〔本〕期末综合练习综合练习一一、单项选择题1.设有头指针为head的带有头结点的非空单向循环链表,指针p指向其尾结点环链表,那么可利用下述语句head =head->next ;〔〕.A . p =head;B . p=NULL;C . p->next =head;D . head=p;2.在一个单链表中p指向结点a, q指向结点a的直接后继结点b,要删除结点A . p->next=q->next ;B. p=q->next;C p->next=q;Dp->next=q;3.以下说法不正确的选项是A.线性表的链式存储结构不必占用连续的存储空间B .一种逻辑结构只能有唯一的存储结构C.一种逻辑结构可以有不同的存储结构D.线性表的顺序存储结构必须占用连续的存储空间4.在一个单向链表中,在p所指结点之后插入一个s所指的结点时,可执行〔A . p= s;Bp->next=s->next;C. p=s->next; Ds->next=p->next;5.把数据存储到计算机中,并具体表达〔〕称为物理结构.A.数据元素间的逻辑关系B.数据的处理方法C.数据的性质D .数据的运算6.设有一个长度为23的顺序表,要删除第8个元素需移动元素的个数为〔A . 16B . 14C . 15D . 137.链表所具备的特点之一是〔〕.A .可以随机访问任一结点B .需要占用连续的存储空间要删除头结点,并使其仍为单向循b,可执行〔〕);和p->next=s;C .插入元素的操作不需要移动元素D .删除元素的操作需要移动元素8.设一棵有8个叶结点的二叉树,度数为 1的结点有3个,那么该树共有〔〕个结点.A 20B. 18 C . 17 D . 169.图状结构中数据元素的位置之间存在〔〕的关系.A . 一对一B .多对多C . 一对多D .每一个元素都有一个直接前驱和一个直接后继10 . 一棵具有5层的完全二叉树,最后一层有4个结点,那么该树总共有〔〕个结点A . 14B . 15C . 19D . 1811 .元素15, 9, 11, 13按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A .13,11,9,15B, 15, 9, 11 , 13C .13,11,15,9D, 9, 15 ,13,1112 .设主串为“ FABcCDABcdEFaB c ,以下模式串能与主串成功匹配的是〔〕A. EFaBcB. ABCdEC. DABCCD .FAbcC13 .设有一个14阶的对称矩阵 A 〔第一个元素为 a 1,1〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到1开始〕,那么矩阵中元素a 4,3在一维数组B 中的下标是〔1116 .以下说法不正确的选项是〔17 .设「棵哈夫曼树共有14个非叶结点,那么该树总共有〔一维数组B 中〔数组下标从 10 14.元素 111 , 113, 115,117按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A . 117, 115, 113, 111 111 113 115 117C . 113, 111, 117, 115 117 115 11111315.在一棵二叉树中,假设编号为 的结点存在右孩子,那么右孩子的顺序编号为〔161517A .栈和队列都是线性结构.栈的特点是后进先出 C.栈和队列的特点都是先进后出.队列的特点是先进先出〕个结点A . 29C. 30 D . 2818.设有一个15阶的对称矩阵A〔第一个元素为3,1〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到一维数组B中〔数组下标从i开始〕,那么矩阵中元素a4,2在一维数组B中的下标是〔〕.A. 9 B . 8 C , 7 D . 1019.如图1所示的一个图,假设从顶点a出发,按深度优先搜索法进行遍历,那么可能得到的一种顶点序列为〔〕.A . abecdfB . acfebdC . aebcfdD . aedbfca20.如图2所示的一个图,假设从顶点aX^乂深度优先搜索法进行遍历,那么可能得到的一彳 A .acedbf二、填空题1.队列的特点之2.序列13,11,14,12,17,15, 采用冒泡排序算法,经\趟冒泡后,序列的结果是3.结构中,数据元〔二?」对多白4.对16个元素的序列用冒泡遍I片排序,通布血行趟冒泡.图25.对稀疏矩阵进行压缩存储,矩阵中每个非零元素对应的三元组包括该元素的三项信息是O6.对9个元素的一组记录〔58, 35, 93, 20, 12, 78, 56, 41, 79〕进行直接插入排序〔由小到大排序〕,当把第7个记录56插入有序表,为寻找插入位置需比较次.7.在对11个记录的序列〔12 , 35, 9, 7 ,2, 11 ,56,95 ,37,58 ,60〕进行直接插入排序时,当把第6个记录11插入到有序表时,为寻找插入位置,元素间需比较次.〔由小到大排列〕8.结构中的数据元素存在一对多的关系称为结构.9.哈希函数是记录关键字的值与该记录之间所构造的对应关系.10.设有一棵深度为5的完全二叉树,第5层上有3个结点,该树共有个结点.(根所在结点为第1层)11. 20个元素进行冒泡法排序,通常需要进行19趟冒泡,其中第10趟冒泡共需要进行==次元素间的比较.12. 一棵二叉树中每一个非叶结点的度数都为2,共有10个非叶结点,那么该树共有个结点.13.一棵有19个结点的二叉树,采用链式2构存储,该树结构中有个指针域为空.14. 序列3,1,7,18,6,9,13,12经一趟归并排序的结果为_ ―.15.中序遍历一棵树可得到一个有序序列.16. 一棵有16个叶结点的哈夫曼树,那么该树共有个非叶结点.17.二叉排序树插入操作中,新插入的结点总是以树的结点被插入的18. 遍历二叉排序树可得到一个有序序列.19.广义表的(a , (d,a ,b) , h , (e ,( (i ,j ) ,k )))深度是.20.广义表(f , h , (a ,b, d, c) , d , e ,( (i ,j ) ,k ))的长度是 .21.序列4,2,5,3,8,6,7, 9,采用归并排序算法(升序),经一趟归并后,序列的结果22.广义表的(h ,c , g, a , (a ,b) , d , e ,( (i ,j ) ,k ))深度是-23.字符串a1= '' teijing " , a2 =''tef " , a3='' teifang " , a4="tefi "最小的24.设有串p1 = " ABADF ,P2=" ABAFU , P3=" ABADFA P4=" ABAF , 四个串中最小的是 .三、综合题1 .设查找表为(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用下标表示)(2)说明成功查找到元素86需要经过多少次比较?(3)求在等概率条件下,成功查找的平均比较次数?2. (1)设有数据集合{50, 39, 17, 83, 111, 14, 65, 13, 91, 102, 49},依次取集合中各数据构造一棵二叉排序树.(2)一组记录的关键字序列为(6, 9, 7, 4, 5 ,8),利用堆排序(堆顶元素是最小元素)的方法建立初始堆.(要求用完全二叉树表示 )3.(1) 一组记录的关键字序列为(26, 59, 36, 18, 20, 25),给出利用堆排序(堆顶元素是最小元素)的方法建立的初始堆(要求以完全二叉树描述).(2)对关键字序列(26,59,36,18,20,64)采用快速排序,给出以第一个关键字为分割 元素,经过一次划分后的结果.4. (1)如下表为一个长度为10的有序表,给出按折半查找对该表进行查找的判定树(2)按折半查找对该表进行查找,求在等概率情况下查找成功的平均比较次数. 为了成功查找72 ,给出元素的比较次数.四、程序填空题中,用折半查找算法查找关键字等于k 的记录,查找成功返回该记录的下标,失败时返回typedef struct { int key;}NODE;int Binary_Search(NODE a[ ], int n, int k) {int low, mid, high; low=0; high=n-1;1 .以下函数在a[0]到a[n-1] -1 ,完成程序中的空格5. (1)棵哈夫曼树(2)while((1))(mid=(__(2))if(a[mid].key==k)return __(3);else if (__(4))low=mid+1;else —⑸;}return -1}1.(1) low<=high(2)( low+high)/2(3)mid;(4)a[mid].key<k(5)high=mid-1;2.设线性表以不带头结点的单向链表存储,链表头指针为head,以下程序的功能是输出链表中各结点中的数据域data o完成程序中空格局部.#define NULL 0void main(){ NODE *head ,*p ;p=head; /*p 为工作指针*/do{printf("%dn〞,⑴);(2) :}while( (3) );)2.(1) p->data(2) p=p->next(3) p!=NULL3.以下程序是前序遍历二叉树的递归算法的程序,完成程序中空格局部〔树结构中左、右指针域分别为left和right ,数据域data为字符型,BT指向根结点〕.void Inorder (struct BTreeNode *BT){if(BT!=NULL){(1);(2)—;Inorder(BT-- >right);}利用上述程序对右图进行前序遍历,结果是_〔3〕3.(3) a b d f e c4.以下程序是后序遍历二叉树的递归算法的程序,完成程序中空格局部〔树结构中左、右指针域分别为left和right ,数据域data为字符型,BT指向根结点〕.完成程序中空格局部.void Inorder (struct BTreeNode *BT)if( BT!=NULL){Inorder(BT->left);—(1)—(2)}4.(1) Inorder(BT->right) (2) printf( "%d ,BT->data)5.顺序查找算法如下,完成程序中空格局部.int search (NODE a[ ] ,int n , int k)/* 在a[0],a[1]…a[n-1],中查找关键字等于k的记录,查找成功返回记录的下标,失败时返回-1*/{ int i=0;while( i< n && a[i].key ⑴)—⑵ .if (___(3))return i;else return -1;)5.(1)!=k(2) i++;(3) a[i].key= =k综合练习一答案一、单项选择题1. C 2 , A 3 . B4.D5 . A6 . C 7. C 8. B9 . B 10 . C 11 . C 12 . A 13 . A14. D 15 . D 16 .C 17 .A 18. B 19. D 20 . B二、填空题1.先出2 . 11,13,12,14,15,17 3.树型4 . 15 5 .行下标列下标数组元素6. 4次7.38.树形9,存储位置10 .18 11 . 1012. 2113.2014. 1 , 3, 7, 18, 6, 9, 12, 1315.二叉排序树16 . 1517.叶18. 中序20. 6,4, 3, 5 , 6, 8 , 7, 922. 324.P1三、综合题1.493. (1)18 , 20, 25, 59, 26, 36一、单项选择题1.设头指针为head的非空的单向循环链表,指针p指向尾结点,那么满足表达式〔〕为真.A . p->next = =NULLB . p= =NULLC . p->next= =headD . p= =head2.数据的存储结构包括数据元素的表示和〔A .数据处理的方法相关算法D. 数据元素的类型 D. 数据元素间的关系的表示3. 一种逻辑结构〔〕A ,可以有不同的存储结构,只能有唯一的存储结构C.是指某一种数据元素之间的存储关系 D .是指某一种数据元素的性质4.在一个头指针为head的单向链表中, p指向尾结点,要使该链表成为单向循环链表可执行〔A . p= head->next; head->next=p;C head->next=p->next; p->next=head;5.链表所具备的特点之一是A .可以随机访问任一结点,占用连续的存储空间C .插入删除元素的操作不需要移动元素结点D .可以通过下标对链表进行直接访问6.元素111, 113, 115, 117按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A . 117, 115, 113, 111B 111, 113, 115, 117C . 117, 115, 111, 113D , 113, 111, 117, 1157.线性结构中数据元素的位置之间存在〔〕的关系.A. 一对一B. 一对多C .多对多D.每一个元素都有一个直接前驱和一个直接后继8.以下说法正确的选项是〔〕A .栈的特点是先进后出B.栈的特点是先进先出C .队列的特点是先进后出D.栈和队列的特点都是先进后出9.在一个单向链表中p所指结点之后插入一个s所指的结点时,可执行〔〕A . p->next= s; s->next= p->next B. p->next=s->next;C p=s->nextD.s->next=p->next; p->next=s;IO .设有一个20阶的对称矩阵A〔第一个元素为a1,1〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到一维数组B中〔数组下标从1开始〕,那么矩阵中元素a6,2在一维数组B中的下标是〔A. 24 B . 17 C . 16 D . 2311.元素11, 13, 15, 17按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A . 17,15,13, 11B,11,13,15, 17C . 17,15,11 , 13D,13,11,17, 1512.设一棵有2n+1个结点的二叉树,除叶结点外每个结点度数都为2,那么该树共有〔〕个叶结点.A. nB. n+1 C , n+2 D . n-113.设有一个20阶的对称矩阵A〔第一个元素为au〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到一维数组B中〔数组下标从1开始〕,那么矩阵中元素A .11B. 12C.14.如图1所示的一个图,假设从顶点a出发,得到的一种顶点序列为〔〕.A . abecdfB. aecbdfC0-f图115.设一棵哈夫曼树共有11个非叶结点,那么该树有〔A . 22B. 10C. 116.线性表以〔〕方式存储,能进行折半查找.A .关键字有序的顺序B.顺序C17. 一棵具有38个结点的完全二叉树,最后-层有〔A . 7B. 5 C. 6a5,2在一维数组B中的下标是〔〕13D. 10按广度优先搜索法进行遍历,那么可能.aebcfd D. aedfcb〕个叶结点.1D, 12.链接D .二叉树〕个结点.D. 8二、填空题〔根所在结点为第 1层〕18 . 一棵具有38个结点的完全二叉树,最后一层有〔 〕个结点. 19 .如图2所示的一个图, 假设从顶点a 出发,按深度优先搜索法进行遍历,那么可能得到的一种顶点序列为A . abecdf.acfebd C .aebcfd D . aedfcb 20 .对一个栈顶指针为 top 的链栈进行出栈操作,用变量 e 保存栈顶元素的值,那么执行 A. e= top->next; top->data=e; C. e=top->data; top=top->next;1 .字符串 a1= BEIJING ' , a2 = '、BEF" , a3= '' BEFANG , a4= “BEI〞最小的 2 .数组a 经初始化char a[]= English " ; a[7]中存放的是 字符串的结束符3 .把数据存储到计算机中,并具体表达数据元素间的逻辑结构称为 物理结构〔存储结构〕.4 .设有串 p1=" ABADF ,P2=" ABAFD , P3=" ABADFA P4=" ABAF ,四个串中最大的是 5 .设有一个长度为 22的顺序表,要删除第 8个元素需移动元素的个数为6 .在一棵二叉树中,假设编号为i 的结点存在右孩子,那么右孩子的顺序编号为7 .在一棵二叉树中,假设编号为i 的结点存在左孩子,那么左孩子的顺序编号为 8.设有一个长度为 20的顺序表,要插入一个元素,并作为第 8个元素, 需移动元素的个数为9.设一棵有n 个叶结点的二叉树,除叶结点外每个结点度数都为 2,那么该树共有 个结点.10 .结构中的数据元素存在多对多的关系称为 结构11 .在对一组序列 (45,29,87,12,6,63,55,37,78) 进行直接插入排序时,当把第8个记录37插入到有序表时, 为寻找插入位置需比较 次.〔由小到大排序〕12 .设有一棵深度为4的完全二叉树,第四层上有 5个结点,该树共有个结点. aB. top=top->next;E=top->data;D. top=top->next; e=data;13.n个元素进行冒泡法排序,通常需要进行趟冒泡.14.一棵二叉树中有n个非叶结点,每一个非叶结点的度数都为2,那么该树共有个叶结点.15.一棵有21个结点的哈夫曼树,该树中有个叶结点.16.在对一组记录(55,39,97,22,16,73,65,47,88)进行直接插入排序时,当把第7个记录65插入到有序表时,为寻找插入位置需比较次.(由小到大排序17.遍历二叉排序树可得到一个有序序列.18.n 个元素进行冒泡法排序,第j趟冒泡要进行_次元素间的比较.19.广义表(a , (a ,b) , d , e ,( (i ,j ) ,k ))的长度是 .20.一棵有n个叶结点的哈夫曼树,那么该树共有个结点.21.广义表的(a , (a ,b) , d , e ,( (i ,j ) ,k ))深度是.22.中序遍历可得到一个有序序列.23. 序列14,12,15,13,18,16,采用冒泡排序算法(升序),经一趟冒泡后,序列的结果24.广义表((a ,b) , d , e ,( (i ,j ) ,k ))的长度是 .三、综合题1 .设查找表为(7,15,21,22,40,58,68,80,88,89,120),元素的下标依次为1,2,3, (11)(1)画出对上述查找表进行折半查找所对应的判定树(树中结点用下标表示)(2)说明成功查找到元素40需要经过多少次比较(3)求在等概率条件下,成功查找的平均比较次数2.(1)设有数据集合{40, 29 , 7, 73, 101, 4, 55, 2 , 81, 92, 39},依次取集合中各数据构造一棵二叉排序树.(2)一组记录的关键字序列为(5, 8, 6, 3, 4 ,7),利用堆排序(堆顶元素是最小元素)的方法建立初始堆.(要求用完全二叉树表示)3.(1)一组记录的关键字序列为(47, 80, 57, 39, 41, 46),给出利用堆排序(堆顶元素是最小元素)的方法建立的初始堆(要求以完全二叉树描述).(2)对关键字序列(47,80,57,39,41,85)采用快速排序,给出以第一个关键字为分割元素,经过一次划分后的结果.(3) 如图3所示的二叉树,给出其前序遍历序列四、程序填空题1.Inorder(BT->right)⑶ dbeafc2.设线性表为(6, 10, 16, 4),以下程序用说明结构变量的方法建立单向链表,并输出链表中各结点中的数据. #define NULL 0void main(){NODE a,b,c,d,*head,*p;=6;=10;=16; 4. (1) 以2, 3, 4, 7, 8, 9作为叶结点的权,构造个关键字为分割元素,给出经过一次划分后结四、程序填空题1 .以下程序是中序遍历二叉树的递归算法的程存, 数据域data 为字符型,BT 指向根结点). 完成程序中空格局部 (树结构中左、 右指针域分别为left 和right , void Inorder (struct BTreeNode *BT)if(BT!=NULL){ Inorder(BT->left);} (2)利用上述程序对右图进行中序遍历,结果是 (3)(1) printf( "%C ,BT->data)树 给出上述哈夫曼树叶结点的哈夫曼编福.一组记录的关键字序列为(,利用快速排序,以第47, 29, 31 排序) d e图4=4; /*d 是尾结点*/head= (1);=&b;=&c;=&d;⑵;/*以上结束建表过程*/p=head; /*p 为工作指针,准备输出链表*/do{printf("%dn〞 ,(3));(4);}while((5));}2 .(1)&a⑵ d->next=NULL(3)p->data(4)p=p->next(5)p!=NULL3.以下冒泡法程序对存放在a[1] , a[2],……,a[n]中的序列进行排序,完成程序中的空格局部,其中n是元素个数,要求按升序排列.void bsort (NODE a[ ], int n){ NODE temp;int i,j,flag;for(j=1; (1);j++);{flag=0;for(i=1;(2);i++) if(a[i].key>a[i+1].key){flag=1;temp=a[i];(3)(4))if(flag= =0)break;)程序中flag的功能是33.(1) j<=n-1⑵ i<=n-j(3)a[i]=a[i+1](4)a[i+1]=temp(5)当某趟冒泡中没有出现交换那么已排好序,结束循环4.以下程序是中序遍历二叉树的递归算法的程序,完成程序中空格局部(树结构中左、右指针域分别为left和right ,数据域data为字符型,BT指向根结点)void Inorder (struct BTreeNode *BT){if(BT!=NULL){(1);⑵:Inorder(BT->right);})利用上述程序对右图进行遍历,结果是(3)4.(1)Inorder(BT->left)(2)printf( "%d ,BT->data)(3)bedafc综合练习二答案一、单项选择题I. C 2 , D 3 . A 4 . D 5 . C 6 . C 7 . A 8. A 9 . D 10 . BII. C 12 . B 13 . B 14 . B 15. D 16. A 17. A 18. A二、填空题1. a22.字符串的结束符3.物理结构(存储结构)4. p25. 146. 2i+17. 2i8. 139. 2n-110.图状11. 512. 1213n-114n+1151116 317.中序18. n-j19. 522.二叉排序树23, 12,14,13,15,16,1824. 43(1) 39 , 41 , 46, 80, 47, 57综合练习三一、单项选择题1.数据的存储结构包括数据元素的表示和〔〕.A .数据处理的方法B.数据元素的类型C . 相关算法D.数据元素间的关系的表示2.设有头指针为head的不带头结点的非空的单向循环链表,指针p指向其尾结点,要删除第一个结点,那么可利用下述语句head=head->next;和〔〕.A . p =head;B . p=NULL;C . p->next =head;D . head=p;3.树状结构中数据元素的位置之间存在〔〕的关系.A .每一个元素都有一个直接前驱和一个直接后继B . 一对一C .多对多D. 一对多4.以下说法正确的选项是〔〕.A.线性表的链式存储结构必须占用连续的存储空间B.一种逻辑结构可以有不同的存储结构C . 一种逻辑结构只能有唯一的存储结构D .线性表的顺序存储结构不必占用连续的存储空间5.设有一个长度为26的顺序表,要插入一个元素,并使它成为新表的第6个元素,需移动元素的个数为〔〕.A . 21B . 22C . 20D . 196.把数据存储到计算机中,并具体表达〔〕称为物理结构.A .数据的处理方法B.数据的性质C .数据的运算D.数据元素间的逻辑关系7.头指针为head的带头结点的单向循环链表,p所指向尾结点,要使该链表成为不带头结点的单向循环链表,可执行head=head->nex;和〔〕.A . p= head->nextBhead->next=pC head->next=p->next D.p->next=head;8.顺序表所具备的特点之一是〔〕.A .可以随机访问任一结点,不需要占用连续的存储空间C .插入元素的操作不需要移动元素D .删除元素的操作不需要移动元素9.元素111, 113, 115, 117按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A . 117, 115, 113, 111B, 111, 113, 115, 117C . 117, 115, 111, 113D, 113, 111, 117, 11510.图状结构中数据元素的位置之间存在〔〕的关系.A. 一对一B. 一对多C.多对多D.每一个元素都有一个直接前驱和一个直接后继11.以下说法正确的选项是〔〕.A .栈的特点是先进先出B .栈的特点是先进后出C .队列的特点是先进后出12.元素20, 14, 16, 18按顺序依次进栈,那么该栈的不可能输出序列是〔〕〔进栈出栈可以交替进行〕.A . 18, 16, 14, 20B . 20, 14, 16, 18C . 18, 16, 20, 14D . 14, 20, 18, 16D.栈和队列的特点都是后进后出13. 设有一个20阶的对称矩阵A〔第一个元素为a〞〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到一维数组B中〔数组下标从1开始〕,那么矩阵元素a6,2在一维数组B中的下标是〔〕.A. 21 B . 17 C . 28 D . 2314.设有一个12阶的对称矩阵A〔左上角第一个元素为a1,1〕,采用压缩存储的方式,将其下三角局部以行序为主序存储到一维数组B中〔数组下标从1开始〕,那么矩阵中元素a5,4在一维数组B中的下标是〔〕.A . 14B . 12C . 13D . 1115.设有串p1=" ABADF ,P2=" ABAFD , P3=" ABADFA ,P4=" ABAF,以下四个串中最大的是〔〕.A . p3B . p2C . plD . p416.设有一个长度为22的顺序表,要删除第8个元素需移动元素的个数为〔〕A . 25B . 14C . 15D . 2317.数组a经初始化char a[ ]= a English 〞 ; a[7]中存放的是〔〕.A.字符串的结束符B.字符hC. 、'h"D.变量h18.在一棵二叉树中,假设编号为5的结点存在右孩子,那么右孩子的顺序编号为〔〕A . 12B .9C .11D . 1019.设主串为“ ABcCDABcdEFaBC,以下模式串能与主串成功匹配的是〔〕.A. BcdB. BCdC. ABCD. Abc20. 一棵具有5层的完全二叉树,最后一层有4个结点,那么该树总共有〔〕个结点A . 14B. 15 C . 19 D . 1821.在一棵二叉树中,假设编号为i的结点存在左孩子,那么左孩子的顺序编号为〔〕A . 2i+1B. 2i-1 C . 2i D . 2i+222.如图1所示,假设从顶点a出发,按图的广度优先搜索法进行遍历,那么可能得到的一种顶点序列为〔〕.A . abcdfgeB . abcedfgC . acbfedgD . abcfgde24.字符串'' abcd321ABCD"的子串是〔图2〕A. 21ABC'B. abcABCDC. abcDD.、321a"25.线性表以〔〕方式存储,能进行折半查找.A .链接B .顺序C .关键字有序的顺序D .二叉树26.数组a经初始化char a[ ]= a English 〞 ;a[1]中存放的是〔〕A.字符nB.字符EC. 、'n"D.、、E"27 . 一棵具有38个结点的完全二叉树,最后一层有〔〕个结点.A . 7B. 5 C . 6 D .8 28 .如图3所示,假设从顶点a出发,按图的深度优先搜索法进行遍历,那么可能得到的一种顶点序列为〔A . abecdf Bacfebd C aebcfd D . aedfcb29.以下图的拓扑序列是()A . 5 2 3 4 6BC . 5 6 2 3 4D. 230.以下图的拓扑序列是)A. 5 2 3 4 6C. 5 6 4 2 33. n个元素进行冒泡法排序,第j趟冒泡要进行次元素间的比较.4.对稀疏矩阵进行压缩存储,矩阵中每个非零元素对应的三元组包括该元素的三项信息O5.中序遍历树可得到一个有序序列9 .广义表((a ,b) , d , e ,( (i ,j ) ,k ))(a ,b) , d , e ,( (i ,j ) ,k ))组表共有8,3,4,1,2,5,9,采用直接选择排序算法,当进行了两趟选择后,结果序列为40的顺序表,要删除第 8个元素需移动元素的个数为23 .有以下程序段char *p=a; int n=0;''0 ' ){ n++; p++;} 结果中,n 的值是24 .顺序表,,6 , 5, 1, 2, 4, 3, 8, 7经过一趟〔1,1〕归并后的结果序列为三、综合题1 .有一个长度为11的有序表(1, 2, 11, 15, 24, 28, 30, 56, 69, 70, 80),元素的下标依次为 6.在对 10 个记录的序列(9, 35,19, 77 ,2, 10 ,53, 45,27,68) 进行直接插入排序时,当把第6个记录10插入到有序表时,为寻找插入位置,元素间需比较 次.〔按升序排序〕7.待排序的序列为8,3,4,1,2,5,9, 采用直接选择排序算法,当进行了两趟选择后,结果序列为〔8. 字符串 a1= '、beijing ,a2 = bef ,a3='' beifang ,a4="befi "最小的10 . 10个元素进行冒下&法排序,,其中第5趟冒泡共需要进行 次元素间的比较.11. 广义表的〔c , a , 12. 遍历一棵二叉排序树可得到一个有序序列O13. 对稀疏矩阵进彳f 压缩存储 ,可采用三元组表,一个有 10行10列的稀疏矩阵 A 共有95个零元素,其相应的三元 14. 广义表(c , (a ,b,c) , ( d , e ,f ) , ( (i ,j ) ,k ))的长度是15. 在对一组记录 (50, 49, 97, 22, 16, 73, 65, 47, 88) 进行直接插入排序时,当把第7个记录65插入到有序 表时,为寻找插入位置需比较 次.16. 广义表的(c , (b,a ,b) , f , e ,( (i ,j ) ,k ))深度是17. 一棵有5个叶结点的哈夫曼树,该树中总共有 个结点.18. 序列 4,2,5 , 3 ,8, 6, 采用冒泡排序算法〔升序〕,经一趟冒泡后,结果序列是19. 设有一棵深度为 4的完全二叉树,第四层上有 5个结点,该树共有 个结点.〔根所在结点为第 1层〕.22.线性表用 方式存储可以随机访问.char a[]= English ";的长度是深度是个元素.20.待排序的序列为 21 .设有一个长度为 while( *p!=1,2,3,……,11 ,按折半查找对该表进行查找.(1)画出对上述查找表进行折半查找所对应的判定树.(2)说出成功查找到元素56,,需要依次经过与哪些元素的比较(3)说出不成功查找元素72,需要进行元素比较的次数2.设查找表为(1)画出对上述查找表进行折半查找所对应的判定树.(2)说明成功查找到元素90需要经过多少次比较(3)说明不成功查找元素82,依次与哪些元素进行了比较,需要经过多少次比较3.(1) 一组记录的关键字序列为(57, 90, 67, 50, 51, 56),利用堆排序(堆顶元素是最小元素)的方法建立初始堆(要求以完全二叉树描述).(2)对关键字序列(56,51,71,54,46,106)利用快速排序,以第一个关键字为分割元素,给出经过一次划分后结果.(3)一组记录的关键字序列为(60,47 , 80, 57, 39, 41 , 46,30 ),利用归并排序的方法,分别给出(1,1)归并、(2,2)归并、(4,4)归并的结果序列.4.(1)一组记录的关键字序列为(36, 69, 46, 28, 30, 35),给出利用堆排序(堆顶元素是最小元素)的方法建立的初始堆(要求以完全二叉树描述).⑵对关键字序列(36,69,46,28,30,74)采用快速排序,给出以第一个关键字为分割元素,经过一次划分后的结果.(3)设有数据集合(30,73,101,4,8,9,2,81),依次取集合中各数据构造一棵二叉排序树.四、程序填空题1.设线性表为(16, 20, 26, 24),以不带头结点的单向链表存储,链表头指针为head,以下程序的功能是输出链表中各结点中的数据域data.Struct node{int data;struct node *next;);typedef struct node NODE;#define NULL 0void main(){ NODE *head ,*p ;p=head; /*p 为工作指针*/do{printf("%dn",—⑴);(2)___ :}while(0);)四、程序填空题1.(1)p->data(2)p=p->next(3)p!=NULL2.以下函数在a[0]到a[n-1]中,用折半查找算法查找关键字等于k的记录,查找成功返回该记录的下标,失败时返回-1 ,完成程序中的空格typedef struct{ int key;}NODE;int Binary_Search(NODE a[ ], int n, int k){int low, mid, high;low=0;high=n-1;while( __(1)){ mid=(low+high)/2;if(a[mid].key==k)return __(2);else if (__(3))low=mid+1;else (4);}return -1;}设数组元素:a[0]=2 ; a[1]=5 a[2]=3; a[3]=4; a[4]=9; a[5]=6; a[6]=1; a[ 7]=10;按上述程序查找元素5,能否成功查到,说明理由=(5)2.⑴ low<=high(2)mid;(3)a[mid].key<k(4)high=mid-1;(5)不能,由于不是有序序列,不能用折半查找3.以下函数为直接选择排序算法,对a[1],a[2],…a[n]中的记录进行直接选择排序,完成程序中的空格typedef struct{ int key;}NODE;void selsort(NODE a[],int n){int i,j,k;NODE temp;for( i=1; i<=(1); i++) (k=i;for( j=i+1;j<=⑵ ; j++) _ if(a[j].key<a[k].key) (3);if( i!=k)(temp=a[i];(4) ______(5)L}}}3.(1)n-1(2)n(3)k=j(4)a[i]=a[k](5)a[k]=temp4.以下程序是后序遍历二叉树的递归算法的程序,完成程序中空格局部(树结构中左、右指针域分别为left和right ,数据域data为字符型,BT指向根结点)void Inorder (struct BTreeNode *BT)(if(BT!=NULL){一⑴.Inorder(BT->right);__(2) ; }利用上述程序对右图进行遍历,结果是=(3) ;图44.(1)Inorder(BT->left)(2)printf("%3 ,BT->data)(3)f,d,e,b,c,a综合练习三答案一、单项选择题1.D2.C3.D4. B5. A6.D7.D8. A 9 . C 10. C 11 . B 12 . C 13 . B 14 . A 15 . B 16. B 17 . A 18 . C 19 . A 20. C 21 . C 22. B 23.B 24. A 25 .C 26. A 27 . A 28 .D 29 . C 30. B二、填空题1.图状2.后出 3 . n-j4.行下标行下标数组元素5.二叉排序树6. 47. 1, 2, 4, 8, 3, 5, 98. a29. 410. 511.312.中序13. 514. 415. 316. 317.9三、综合题(30,39,41,46,47,57,60,80)4. (1) 28, 30, 35, 69, 36, 46⑵ 30 , 28, 36, 46, 69, 74,2,4,8,3,5,9 21 . 32 22.顺序 23. 7 24.(5, 6), 1,2), (3, 4) 8) 3. 281.11 69⑴ (2)28,69,30,563070(3)4 2.2456 80 ⑴ 5922 898 23 6981 1016 41 121 次⑵3 1189, 69,图5〔£〕。
数据结构试题及答案(10套)数据结构试题及答案(10套)根据您的需求,我为您准备了10套数据结构试题及答案。
每套试题包含以下几个部分:选择题、填空题、编程题及答案解析。
下面是试题的具体内容:第一套试题:选择题:1. 在数据结构中,什么是栈?A. 先进先出(FIFO)的数据结构B. 后进先出(LIFO)的数据结构C. 随机访问的数据结构D. 无序排列的数据结构2. 以下哪种操作与队列的特性不相符?A. 入队操作B. 出队操作C. 查找操作D. 获取队首元素填空题:1. ______ 是一种动态集合,支持插入、删除和查找等操作。
2. 在二叉搜索树中,中序遍历的结果是________。
编程题:实现一个栈的数据结构,并包含以下操作:- push(x):将元素 x 压入栈中- pop():删除栈顶的元素并返回该元素- top():获取栈顶元素的值- empty():检查栈是否为空答案解析:选择题:B、C填空题:1. 集合 2. 升序序列编程题:略第二套试题:选择题:1. 以下哪个数据结构是一种广度优先搜索的应用?A. 栈B. 队列C. 堆D. 链表2. 在链表中,如果要删除一个节点,只给出该节点的指针,那么需要通过什么方式完成删除操作?A. 直接删除该节点B. 指向该节点的前一个节点的指针C. 指向该节点的后一个节点的指针D. 无法完成删除操作填空题:1. 树是一种________的数据结构。
2. 二叉树每个节点最多有______个子节点。
编程题:实现一个队列的数据结构,并包含以下操作:- enqueue(x):将元素 x 入队- dequeue():删除队首的元素并返回该元素- peek():获取队首元素的值- is_empty():检查队列是否为空答案解析:选择题:B、B填空题:1. 分层组织 2. 2编程题:略(以下部分省略)通过以上的题目,您可以对数据结构的知识点进行综合练习和复习。
每套试题包含了不同难度和类型的题目,能够帮助您全面了解和掌握数据结构的概念和操作。
数据结构综合练习题一、简答题:1、简述堆栈和队列两种数据类型的异同点。
栈和队列都是线性结构,可以在向量的任何位置插入和删除元素;对于栈只能在栈顶插入和删除元素;对于队列只能在队尾插入和队首删除元素。
2、什么静态查找表和动态查找表。
静态查找表——仅作查询和检索操作的查找表。
动态查找表——在查询之后,还需要将“查询”结果为“不在查找表中”的数据元素插入到查找表中;或者,从查找表中删除其“查询”结果为“在查找表中”的数据元素。
3、试比较顺序存储结构和链式存储结构的优缺点。
在什么情况下用顺序表比链表好?答:① 顺序存储时,相邻数据元素的存放地址也相邻(逻辑与物理统一);要求内存中可用存储单元的地址必须是连续的。
优点:存储密度大(=1),存储空间利用率高。
缺点:插入或删除元素时不方便。
②链式存储时,相邻数据元素可随意存放,但所占存储空间分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针优点:插入或删除元素时很方便,使用灵活。
缺点:存储密度小(<1),存储空间利用率低。
顺序表适宜于做查找这样的静态操作;链表宜于做插入、删除这样的动态操作。
若线性表的长度变化不大,且其主要操作是查找,则采用顺序表;若线性表的长度变化较大,且其主要操作是插入、删除操作,则采用链表。
4、分析稳定的排序和不稳定的排序方法。
假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。
5、图的存储结构有哪些?十字链表,邻接矩阵,邻接表,邻接多重表,二维数组。
6、简述度为2的树与二叉树的区别。
二叉树的度最大为2,而树的度无此限制。
在二叉树中,一个节点的子树有左、右之分,不能互换位置。
而度为2的树则无此限制。
三、程序分析写结果:1、写出下列程序段的输出结果(栈的元素类型为char;字符型)。
数据结构练习题1⼀、单项选择题1.若⽤⼀个⼤⼩为6的数组来实现循环队列,且当前rear和front的值分别为0和3,当从队列中删除⼀个元素,再加⼊两个元素后,rear和front的值分别为多少?( )A. 1和 5B. 2和4C. 4和2D. 5和1⼤⼩为6的数组:下标从0-5;从前⾯出队,从后⾯⼊队front(前⾯)=3rear(后⾯)=0当出队列中删除⼀个元素,也就是出队,即front+1:=4再插⼊两个元素,即rear+2= 2【注】循环队列中,由于⼊队时尾指针向前追赶头指针;出队时头指针向前追赶尾指针,造成队空和队满时头尾指针均相等。
因此,⽆法通过条件front==rear来判别队列是"空"还是"满"。
2.循环队列A[0..m-1]存放其元素值,⽤front和rear分别表⽰队头和队尾,则当前队列中的元素数是( )。
A. (rear-front+m)%mB. rear-front+1C. rear-front-1D. rear-front3.for(i=0;ifor(j=0;jA[i][j]=i*j;上⾯算法的时间复杂度为( )A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)4.设h是指向⾮空带表头结点的循环链表的头指针,p是辅助指针。
执⾏程序段p=h;while (p->next->next!=h)p=p->next;p->next=h;后(其中,p->next为p指向结点的指针域),则( )A. p->next指针指向链尾结点B. h指向链尾结点C. 删除链尾前⾯的结点D. 删除链尾结点5.假设带头结点的单向循环链表的头指针为head,则该链表为空的判定条件是()A.head= =NULLB.head–>next= =NULLC.head!=NULLD.head–>next= =head6. 设顺序表有19个元素,第⼀个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为( )A.236B.239C.242D.2457. 若⼀棵⼆叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A .9B .11C .15D .不确定8. n 个结点的线索⼆叉树上含有的线索数为()A .2nB .n -lC .n +lD .n9. 设有⼀个栈,按A 、B 、C 、D 的顺序进栈,则可能为出栈序列的是( )A.DCBAB.CDABC.DBACD.DCAB10. 归并排序中,归并的趟数是( )。
数据结构综合练习1一、单项选择题:在每小题列出的四个选项中只有一个选项是符合题目要求的,请将正确选项前的字母填在题后的括号内。
1 .算法指的是( )A .计算机程序B .解决问题的计算方法C .排序算法D .解决问题的有限运算序列2 .线性表采用链式存储时,结点的存储地址( )A .必须是不连续的B .连续与否均可C .必须是连续的D .和头结点的存储地址相连续3 .将长度为n 的单链表链接在长度为m 的单链表之后的算法的时间复杂度为( )A. O (1)B. O (n)C. O (m)D. O (m+n)4 .由两个栈共享一个向量空间的好处是:( )A .减少存取时间,降低下溢发生的机率B .节省存储空间,降低上溢发生的机率C .减少存取时间,降低上溢发生的机率D .节省存储空间,降低下溢发生的机率5 .设数组data[m] 作为循环队列SQ 的存储空间,front 为队头指针,rear 为队尾指针,则执行出队操作后其头指针front 值为( )A. front=front+1B. front= (front+1) %( m-1)C. front= (front-1) %mD. front= (front+1) %m6 .如下陈述中正确的是( )A .串是一种特殊的线性表B .串的长度必须大于零C .串中元素只能是字母D .空串就是空白串7 .若目标串的长度为n ,模式串的长度为[n/3] ,则执行模式匹配算法时,在最坏情况下的时间复杂度是( )A. O ()B. O (n)C. O (n 2)D. O (n 3)8 .一个非空广义表的表头( )A .不可能是子表B .只能是子表C .只能是原子D .可以是子表或原子9 .假设以带行表的三元组表表示稀疏矩阵,则和下列行表0 2 3 3 5对应的稀疏矩阵是( )10 .在一棵度为3 的树中, 度为 3 的结点个数为2, 度为 2 的结点个数为1, 则度为0 的结点个数为( )A. 4B. 5C. 6D. 711 .在含n 个顶点和e 条边的无向图的邻接矩阵中, 零元素的个数为( )A. eB. 2eC. n 2 - eD. n 2 - 2e12 .假设一个有n 个顶点和e 条弧的有向图用邻接表表示, 则删除与某个顶点v i 相关的所有弧的时间复杂度是( )A. O (n)B. O (e)C. O (n+e)D. O (n*e)13 .用某种排序方法对关键字序列( 25 ,84 ,21 ,47 ,15 ,27 ,68 ,35 ,20 )进行排序时,序列的变化情况如下:20 ,15 ,21 ,25 ,47 ,27 ,68 ,35 ,8415 ,20 ,21 ,25 ,35 ,27 ,47 ,68 ,8415 ,20 ,21 ,25 ,27 ,35 ,47 ,68 ,84则所采用的排序方法是( )A .选择排序B .希尔排序C .归并排序D .快速排序14 .适于对动态查找表进行高效率查找的组织结构是( )A .有序表B .分块有序表C .三叉排序树D .线性链表15 .不定长文件是指( )A .文件的长度不固定B .记录的长度不固定C .字段的长度不固定D .关键字项的长度不固定第二部分非选择题(共70 分)二、填空题。
16 .数据的逻辑结构是从逻辑关系上描述数据,它与数据的无关,是独立于计算机的。
17 .在一个带头结点的单循环链表中,p 指向尾结点的直接前驱,则指向头结点的指针head 可用p 表示为head= 。
18 .栈顶的位置是随着操作而变化的。
19 .在串S= “ structure ”中,以t 为首字符的子串有个。
20 .假设一个9 阶的上三角矩阵A 按列优先顺序压缩存储在一维数组B 中,其中B[0] 存储矩阵中第 1 个元素 a 1,1 , 则B[31] 中存放的元素是。
21 .已知一棵完全二叉树中共有768 结点,则该树中共有个叶子结点。
22 .已知一个图的广度优先生成树如右图所示,则与此相应的广度优先遍历序列为。
23 .在单链表上难以实现的排序方法有和。
24 .在有序表( 12 ,24 ,36 ,48 ,60 ,72 ,84 )中二分查找关键字72 时所需进行的关键字比较次数为。
25 .多重表文件和倒排文件都归属于文件。
三、解答题26 .画出下列广义表的共享结构图形表示P= ((( z ) ,(x,y) ) ,((x,y),x),(z) )27 .请画出与下列二叉树对应的森林。
28 .已知一个无向图的顶点集为 {a, b, c, d, e} , 其邻接矩阵如下所示(1) 画出该图的图形;( 2 )根据邻接矩阵从顶点 a 出发进行深度优先遍历和广度优先遍历,写出相应的遍历序列。
29 .已知一个散列表如下图所示:35 20 33 48 590 1 2 3 4 5 6 7 8 9 10 11 12其散列函数为 h(key)=key%13, 处理冲突的方法为双重散列法,探查序列为:h i =(h(key)+ *h1(key))%m =0,1, …, m - 1其中h1(key)=key%11+1回答下列问题:( 1 )对表中关键字 35 , 20 , 33 和 48 进行查找时,所需进行的比较次数各为多少?( 2 )该散列表在等概率查找时查找成功的平均查找长度为多少?四 、 算法阅读题30 .下列算法的功能是比较两个链串的大小,其返回值为:a b c decomstr(s 1 ,s 2 )=请在空白处填入适当的内容。
int comstr(LinkString s1,LinkString s2) {//s1 和s2 为两个链串的头指针while(s1&&s2){if(s1 - >datedate)return - 1 ;if(s1 - >date>s2 - >date)return1 ;①;②;}if( ③)return - 1 ;if( ④)return1 ;⑤;}①②③④⑤31 .阅读下面的算法LinkList mynote(LinkList L){//L 是不带头结点的单链表的头指针if(L&&L->next){q=L ; L=L - >next ; p=L ;S1 :while(p - >next) p=p - >next ;S2 :p - >next=q ; q - >next=NULL ;}return L ;}请回答下列问题:( 1 )说明语句S1 的功能;( 2 )说明语句组S2 的功能;( 3 )设链表表示的线性表为( a 1 ,a 2 , … ,a n ) ,写出算法执行后的返回值所表示的线性表。
32 .假设两个队列共享一个循环向量空间(参见右下图),其类型Queue2 定义如下:typedef struct{DateType data[MaxSize] ;int front[2],rear[2] ;}Queue2 ;对于i=0 或 1 ,front[i] 和rear[i] 分别为第i 个队列的头指针和尾指针。
请对以下算法填空,实现第i 个队列的入队操作。
int EnQueue (Queue2*Q,int i,DateType x){// 若第i个队列不满,则元素x 入队列,并返回1 ;否则返回0if(i<0||i>1)return 0 ;if(Q - >rear[i]==Q - >front[ ①]return0 ;Q - >data[ ②]=x ;Q - >rear[i]=[ ③];return1 ;}①②③33 .已知二叉树的存储结构为二叉链表,阅读下面算法。
typedef struct node {DateType data ;Struct node * next ;}ListNode ;typedef ListNode * LinkList ;LinkList Leafhead=NULL ;Void Inorder (BinTree T){LinkList s ;If(T){Inorder(T - >lchild) ;If ((!T - >lchild)&&(!T - >rchild)){s=(ListNode*)malloc(sizeof(ListNode)) ;s - >data=T - >data ;s - >next=Leafhead ;Leafhead=s ;}Inorder(T - >rchild) ;}}对于如下所示的二叉树( 1 )画出执行上述算法后所建立的结构; ( 2 )说明该算法的功能。
五、算法设计题34 .阅读下列函数arrange()int arrange(int a[],int 1,int h,int x){//1 和h 分别为数据区的下界和上界int i,j,t ;i=1 ; j=h ;while(i<J){< p>while(i=x)j-- ;while(i=x)i++ ;if(i<J)< p>{ t=a[j] ; a[j]=a[i] ; a[i]=t ; }}if(a[i]< return>else return i - 1 ;}( 1 )写出该函数的功能;( 2 )写一个调用上述函数实现下列功能的算法:对一整型数组b[n] 中的元素进行重新排列,将所有负数均调整到数组的低下标端,将所有正数均调整到数组的高下标端,若有零值,则置于两者之间,并返回数组中零元素的个数。