最新数据结构期中试卷及答案
- 格式:doc
- 大小:28.00 KB
- 文档页数:3
数据结构期中考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,线性结构的特点是什么?A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系2. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序3. 在二叉树中,度为2的节点最多有多少个子节点?A. 1B. 2C. 3D. 44. 哈希表解决冲突的方法不包括以下哪一项?A. 分离链接法B. 开放寻址法C. 链地址法D. 树形结构法5. 以下哪个不是图的遍历算法?A. 深度优先搜索B. 广度优先搜索C. 动态规划D. 克鲁斯卡尔算法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. 避免使用循环结构二、填空题(每题2分,共20分)1. 在数据结构中,______是一种特殊的线性表,只允许在一端进行插入和删除操作。
2. 排序算法中,______排序的时间复杂度为O(n^2),适用于小规模数据的排序。
3. 在图的表示中,______矩阵可以有效地表示稠密图。
4. 哈希表中,______是指两个关键字通过哈希函数得到同一个哈希地址。
5. 栈和队列的主要区别在于,栈是______,而队列是先进先出。
6. 二叉树的遍历方式包括前序遍历、中序遍历和______遍历。
数据结构期中考试题一、选择题1. 数据结构是()的研究。
A. 算法B. 数据C. 硬件D. 软件2. 下列哪种数据结构在插入和删除操作时效率较高?A. 数组B. 链表C. 栈D. 队列3. 以下哪种数据结构使用了先进先出(FIFO)的策略?A. 栈B. 队列C. 链表D. 数组4. 在二叉树中,每个节点最多可以有几个子节点?A. 0B. 1C. 2D. 35. 以下哪种数据结构在查找操作时效率较高?A. 数组B. 链表C. 栈D. 二叉树二、简答题1. 请简要介绍栈(Stack)和队列(Queue)的特点及应用场景。
2. 请解释树(Tree)和图(Graph)的区别,并给出它们各自的应用场景。
3. 请描述二叉树(Binary Tree)的特点并给出一个示例图。
4. 请简要介绍哈希表(Hash Table)的原理及其在实际应用中的优势。
三、编程题1. 设计一个栈,使得它具有以下功能:- push(val):将元素val压入栈中。
- pop():弹出栈顶元素,并返回弹出的元素。
- getMin():返回栈中最小的元素。
2. 设计一个队列,使得它具有以下功能:- push(val):将元素val插入队列中。
- pop():移除并返回队列头部的元素。
- peek():返回队列头部的元素。
- empty():检查队列是否为空。
四、综合题某公司需要设计一个学生信息管理系统,主要功能包括添加学生信息、查询学生信息、删除学生信息以及修改学生信息。
请使用合适的数据结构和算法来实现该系统,并说明你的选择理由。
总结:通过本次期中考试题,我们从选择题、简答题到编程题,对数据结构的基本知识和应用有了更深入的了解。
数据结构在计算机科学中扮演着重要的角色,合理的选择和运用数据结构可以提高程序的效率和性能。
希望大家能够加强对数据结构的学习和应用,为解决实际问题提供更有效的解决方案。
一、单项选择题(本题总分 20分,每题 2分)在每小题列出的四个选项中只有 一个选项是符合题目要求的,请将正确选项前的字母。
1.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( D ) 。
A.顺序表 B.链表 C.索引表 D.散列表采用排除法,顺序表存储位置表示数据元素的顺序关系,跟关键字无法;链表的地址是动态分配的;索引表是 按数据元素的关键字排序所得,它的数据元素是没有规律的2.在长度为 n 的顺序表的第 i(1≤i ≤n+1)个位置上插入一个元素,元素的移动次数为( A ) 。
A.n -i+1B.n -iC.iD.i -1代入计算法,我们知道在 i=n+1 时不需要移动元素3.若一棵二叉树的先序遍历序列为 a,b,c ,则由 abc 三个结点构成的二叉树个数为( B ) 。
A.4B.5C.6D.74.三维数组 A[4][5][6]按行优先存储方法存储在内存中,若每个元素占 2 个存储单元,且数组中第一个元素的存 储地址为 130,则元素 A[3][4][5]的存储地址为(B A.370B .368C .366) 。
D.372Loc(3,4,5)=loc(0,0,0)+(3*5*6+4*6+5)*2=130+119*2=368;5.高度为 h 的二叉树(仅含根结点的二叉树高度为 1)的结点最少是多少( D) 。
A. h+1B. 2hC. 2h -1D. h二叉树性质 26. 将两个各有 n 个元素的有序表归并成一个有序表,其最多的比较次数是( A. nB.n+1 C. 2n-1D. n-17. 已知一算术表达式的中缀形式为 A +B *C -D/E ,后缀形式为 ABC *+DE/-,其前缀形式为( C) 。
A )。
A. -+A*BC/DE C. -+*ABC/DEB. –A+B*CD/E D. –A+B*C/DE根据中缀和后缀表达式可画出表达树如下:- + /A* D EBC故前缀表达式为:-+A*BC/DE数据结构期中考试8.下面图示的顺序存储结构表示的二叉树是( A )。
北京航空航天大学北海学院课程考试试卷答案要点及评分细则课程名称:《数据结构》考试班级:软件与信息工程学院卷别:_A 命题教师签名: 年 月 日1、 单项选择题(本题共15小题,每小题2分,共30分)123456789101112131415C AD B C B D D C A D C A C B2、 判断正误题(本题共10小题,每小题1分,共10分)1.X,2.X,3.√,4.√,5.X,6.X,7.X,8.√,9.X, 10.√3、 填空题(本题共6小题10个空,每空2分,共20分)(1) O(n)(2) O(n)(3) O(1)(4) 求模式串在主串中首次出现的位置的运算,即求主串中左起第一个与模 式串相等的子串的首字符在主串中的位置。
(5) (Q.rear-Q.front+Max)% Max(6) 4(7) n2log n,n3, 2n(8) n→∞时n3/(n2log n)→∞, 2n/(n3)→∞(9) 为空(10) 出队四、简答题:(本题共4小题,1,2小题各4分,3,4小题各6分,共20分)1.1) 确定性指描述无二义性,相同条件下执行的路线和结果都是唯一的。
2) 输入可以有0至多个从算法外部接受的输入。
2. 该缓冲区应该采用队列结构。
其主要特点是先进先出。
3. 顺序表:O(n),单循环链表:O(n),顺序栈:O(1),循环队列:O(1),链栈:O(1),链队列:O(1)。
4. 优点:①随机访问,简捷;②只存数据,局部空间利用率高;缺点:①逻辑关系靠地址表达,插入删除造成大量元素移动;②要求连续存储空间,固定长度,不便扩充;③须预先按最大可能分配,但闲置多,按整体看空间利用率低。
五、设计题(本题共3小题,第1小题2分,第2小题8分,第3小题10分,共20 分)1. typedef struct node{datatype data;struct node *next;}node;2.(1). s->next = head->next; head->next = s;(2). s->next = head; head = s;3. 答案1:采用尾指针表示、带头结点的单循环链表。
《数据结构》期中测试班级:姓名:学号:一、填空题:1、在数据结构中,从逻辑上可以把数据结构分为集合、线性结构、树形结构和图状结构,其中树形结构和图状结构合称为非线性结构。
数据结构被形式地定义为二元组(D,S),其中D是数据元素的有限集合,S是D上关系的有限集合。
2、算法的五个重要特性是有穷性、确定性、可行性、输入和输出。
3、一个顺序表第一个元素的存储地址是100,每个元素的长度为3,则第6个元素的地址是115。
在顺序表中插入或删除一个元素,需要平均移动(n+1)/2个元素,具体移动的元素个数与插入或删除元素的位置有关。
顺序表中逻辑上相邻的元素的物理位置相邻。
单链表中逻辑上相邻的元素的物理位置不一定相邻。
单链表中,除了首元结点外,任一结点的存储位置由其前驱结点的指针域指示。
在单链表中设置头结点的作用是使第一个结点与其他结点的操作统一。
4、从一个具有n个结点的单链表中查找其值等于x的结点时,在查找成功的情况下,需平均比较(n+1)/2个结点。
在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是O(n)。
给定有n个元素的线性表,建立一个有序单链表的时间复杂度是O(n2)。
5、已知L是无表头结点的非空单链表,且指针p所指结点既不是首元结点,也不是尾元结点,试从下列提供的答案中选择合适的语句序列。
在p所指结点后插入s所指结点:4、1。
在p所指结点前插入s所指结点:7、11、8、4、1。
在表首插入s所指结点:5、12。
在表尾插入s所指结点:11、9、1、6。
1)p->next=s;2)p->next=p->next->next;3)p->next=s->next;4)s->next=p->next;5)s->next=L;6)s->next=NULL;7)q=p;8)while(p->next!=q) p=p->next;9)while(p->next!=NULL) p=p->next;10)p=q;11)p=L;12)L=s;13)L=p;6、已知指针p所指结点是某双向链表的中间结点,试从下列提供的答案中选择合适的语句序列。
《数据结构》一.选择题(从下列答案选项中选出一个正确答案,每小题2分)1.在计算机中存储器内表示时,物理地址和逻辑地址相同并且是连续的,称之为()。
A.逻辑结构B.顺序存储结构C.链式存储结构 D. 以上都对2.线性表就是顺序表,这种说法()。
A.正确B.错误3.若已知一个栈的入栈序列是1, 2, 3, 4, 5,不可能得到的输出序列是()。
A.2,3,4,1,5 B.5,4,1,3,2C.2,3,1,4,5 D.1,5,4,3,24.串的逻辑结构与()的逻辑结构不同。
A.栈B.队列C.树D.线性表5.如果一个串中的所有字符均在另一串中出现,则说前者是后者的子串。
()A.正确B.错误6.设有两个串P和Q,求Q在P中首次出现的位置的操作称为()。
A.连接B.模式匹配C.求子串D.求串长7.已知模式串t=“abcaabbcabcaabdab”,该模式串的next数组值为()。
A.-1,0,0,0,1,1,2,0,0,1,2,3,4,5,6,0,1B.0,1,0,0,1,1,2,0,0,1,2,3,4,5,6,0,1C.-1,0,0,0,1,1,2,0,0,1,2,3,4,5,6,7,1,D.-1,0,0,0,1,1,2,3,0,1,2,3,4,5,6,0,18.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一个元素,其存储地址为1,每个元素占1个地址空间,则a85的地址为()。
A.13B.33C.18D.409.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种说法()。
A.正确B.错误10.树形结构的特点是:一个结点可以有()。
A、多个直接前趋B、多个直接后继C、多个前趋D、一个后继11.在一棵高度为h的满三叉树中,结点总数为()A、3h-1B、(3h-1)/2C、(3h-1)/3D、3h12.设森林T中有4棵树,结点个数依次为n1, n2, n3, n4,当把森林T转换成一棵二叉树后,二叉树根结点的右子树上有()个结点。
数据结构期中试卷及答案解析考试说明考试说明:考察前五章小题,难度接近真题。
满分100分,共20道选择题,每题5分。
请在60分钟内完成。
C T(n)=n3+5000nD T(n)=2nlogn-1000n参考答案:C本题考察时间复杂度,多个项相加时,只保留最高阶项由于巴啦啦能量——“常<对<幂<指<阶”,因此T(n)=logn+5000n=O(n)T(n)=n2-8000n=O(n2)T(n)=n3+5000n=O(n3)T(n)=2nlogn-1000n=O(nlogn)所以O(n3)复杂度最大,选C。
3.下列叙述中正确的是()①线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比②线性表在链式存储时,查找第 i 个元素的时间同 i 的值无关③线性表在顺序存储时,查找第 i 个元素的时间同 i 的值成正比A. 仅①B. 仅②C. 仅③D. ①②③参考答案:A线性表在链式存储时,查找第 i 个元素的时间同 i 的值成正比。
线性表在顺序存储时,查找第 i 个元素的时间同 i 的值无关4.若线性表最常用的操作是存取第i个元素及其前驱和后继元素的值,为节省时间应采用的存储方式()。
A. 单链表B. 双向链表C. 单循环链表D. 顺序表参考答案:D注意到,题目要求存取第i个元素及其前驱和后继,ABC三个选项找到第i个元素的时间复杂度均为O(n),而D选项对于这3个位置的存取的时间复杂度均为O(1),故选D。
5.静态链表中next域表示的是()A 下一个元素的地址B 下一个元素的值C 当前元素的值D 下一个元素在数组中的位置参考答案:D静态链表一般保存在数组中,它和链表最大的区别是静态链表占用一段固定的区间,所以next域只需要表示下一个元素在数组中的下标即可而不是表示下一个元素的地址,选D。
6.对于不带头结点的链栈L(next域表示该结点下一个元素),top指针指向栈顶元素(栈顶在链头方向),则x结点进栈操作为A top->next=x;top=x;B top=x;top-next=x;C top=x;x->next=top;D x->next=top;top=x;参考答案:D本题考察链栈的操作x入栈之后x下一个元素为原来的top,所以先把x->next=top,然后更新top,栈顶元素指向x。
一、选择题(每小题 1分,共10分)1、队列是插入和删除受限的线性表,其删除操作是在线性表的(1)进行。
A.表头 B.表尾 C.任意位置 D.指定位置2、下述哪一条是顺序存储结构的优点(2)。
A.存储密度大 B.插入运算方便C.删除运算方便 D.可方便地用于各种逻辑结构的存储表示3、设有一个栈,元素的进栈次序为A, B, C, D, E,下列哪个是不可能的出栈序列(3)。
A.A, B, C, D, E B.B, C, D, E, AC.E, A, B, C, D D.E, D, C, B, A4、若二叉树的根结点所在的层次为第1层,则该二叉树的第k层上至多有(4)个结点。
2k B.2k C.2k-1 D.2k+1A. 15、设单链表中指针p指向结点m,若要删除m的后继结点(假设该后继结点存在),则需修改指针的操作为(5)。
A.p->next=p->next->next; B.p=p->next;C.p=p->next->next; D.p->next=p;6、下面程序段的时间复杂度为(6)。
for(int i=0; i<m; i++)for(int j=0; j<n; j++) a[i][j] = i*j;A.O(m2) B.O(n2) C.O(m+n) D. O(m*n)7、非空的循环单链表head的尾结点指针p满足(7)。
A.p==NULL B.p== head C.p->next==head D.p->next==NULL8、已知二维数组A[0..9,0..9]中,元素a[2][0]的地址为560,每个元素占4个字节,则元素a[1][0]的地址为(8)。
A. 518B. 520C. 522D. 5249、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为(9)。
A.rear%n= = front B.(front+l)%n= = rearC.rear%n -1= = front D.(rear+l)%n= = front10、假设在一棵二叉树中,度为2的结点数为15,度为1的结点数为10个,则该二叉树的分支总数为(10)个。
一、选择题(每小题 1分,共10分)1、队列是插入和删除受限的线性表,其删除操作是在线性表的(1)进行。
A.表头B.表尾C.任意位置D.指定位置2、下述哪一条是顺序存储结构的优点?(2)。
A.存储密度大B.插入运算方便C.删除运算方便D.可方便地用于各种逻辑结构的存储表示3、设有一个栈,元素的进栈次序为A, B, C, D, E,下列哪个是不可能的出栈序列(3)。
A.A, B, C, D, E B.B, C, D, E, AC.E, A, B, C, D D.E, D, C, B, A4、若二叉树的根结点所在的层次为第1层,则该二叉树的第k层上至多有(4)个结点。
2k B.2k C.2k-1 D.2k+1A. 15、设单链表中指针p指向结点m,若要删除m的后继结点(假设该后继结点存在),则需修改指针的操作为(5)。
A.p->next=p->next->next; B.p=p->next;C.p=p->next->next; D.p->next=p;6、下面程序段的时间复杂度为(6)。
for(int i=0; i<m; i++)for(int j=0; j<n; j++) a[i][j] = i*j;A.O(m2) B.O(n2) C.O(m+n) D.O(m*n)7、非空的循环单链表head的尾结点指针p满足(7)。
A.p==NULL B.p== head C.p->next==head D.p->next==NULL8、已知二维数组A[0..9,0..9]中,元素a[2][0]的地址为560,每个元素占4个字节,则元素a[1][0]的地址为(8)。
A. 518B. 520C. 522D. 5249、在具有n个单元的顺序存储的循环队列中,假定front和rear分别为队头指针和队尾指针,则判断队满的条件为(9)。
A.rear%n= = front B.(front+l)%n= = rearC.rear%n -1= = front D.(rear+l)%n= = front10、假设在一棵二叉树中,度为2的结点数为15,度为1的结点数为10个,则该二叉树的分支总数为(10)个。
一、判断题:1、线性表的逻辑顺序与物理顺序总是一致的。
( )2、线性表的顺序存储表示优于链式存储表示。
( )3、线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。
( )4、二维数组是其数组元素为线性表的线性表。
( )5、每种数据结构都应具备三种基本运算:插入、删除和搜索。
( )6、数据结构概念包括数据之间的逻辑结构,数据在计算机中的存储方式和数据的运算三个方面。
( )7、线性表中的每个结点最多只有一个前驱和一个后继。
()8、线性的数据结构可以顺序存储,也可以链接存储。
非线性的数据结构只能链接存储。
()9、栈和队列逻辑上都是线性表。
()10、单链表从任何一个结点出发,都能访问到所有结点()11、删除二叉排序树中一个结点,再重新插入上去,一定能得到原来的二叉排序树。
()12、快速排序是排序算法中最快的一种。
()13、多维数组是向量的推广。
()14、一般树和二叉树的结点数目都可以为0。
()15、直接选择排序是一种不稳定的排序方法。
()16、98、对一个堆按层次遍历,不一定能得到一个有序序列。
()17、在只有度为0和度为k的结点的k叉树中,设度为0的结点有n0个,度为k的结点有nk个,则有n0=nk+1。
()18、折半搜索只适用与有序表,包括有序的顺序表和有序的链表。
()19、堆栈在数据中的存储原则是先进先出。
()20、队列在数据中的存储原则是后进先出。
()21、用相邻矩阵表示图所用的存储空间大小与图的边数成正比。
()22、哈夫曼树一定是满二叉树。
()23、程序是用计算机语言表述的算法。
()24、线性表的顺序存储结构是通过数据元素的存储地址直接反映数据元素的逻辑关系。
()25、用一组地址连续的存储单元存放的元素一定构成线性表。
()26、堆栈、队列和数组的逻辑结构都是线性表结构。
()27、给定一组权值,可以唯一构造出一棵哈夫曼树。
()28、只有在初始数据为逆序时,冒泡排序所执行的比较次数最多。
1.评价算法优劣的基本标准有哪些?请就每一项给出简短说明。
答:(1)正确性:对输入的合法数据(包括边界情况),都能有正确的输出结果。
(2)健壮性:对输入的非法数据,算法能适当地做出反应或进行处理,而不是产生莫名其妙的输出结果。
(3)可读性:有助于人对算法的理解,易于发现错误,便于调试和修改。
(4)效率与低存储量需求:效率和存储量需求分别指算法执行所需要的时间和最大存储空间。
2.已知一棵二叉树的中序和后序序列分别为GLDHBEIACJFK和LGHDIEBJKFCA,(1)画出这棵二叉树,对这棵二叉树的构造过程给出一个简短说明;(2)将这棵二叉树理解为“孩子-兄弟法”表示的森林,画出这个森林。
答:(1)构造出的二叉树如图1所示:图1构造过程说明:①后序序列的最后一个元素为A, 得知二叉树的根为A;②在中序序列中找到树根A, A左侧的部分GLDHBEI为左子树的中序序列,A右侧的部分CJFK为右子树的中序序列。
并得知左子树7个节点,右子树4个节点;③后序序列的前7个节点LGHDIEB是左子树的后序序列,后续序列的后4个节点JKFC是右子树的后序序列;④根据中序GLDHBEI后序LGHDIEB求左子树,根据中序CJFK后序JKFC 求右子树。
依此类推,便可唯一构造出此二叉树。
(2)“孩子-兄弟表示法”,又称二叉链表表示法,链表中结点的两个链域分别指向该结点的第一个孩子和下一个兄弟结点,一棵二叉树与森林一一对应,该森林如图2所示:图23.字符A,B,C,D,E,F,G的使用频度分别是15,8,10,21,6,19,3,写出A,B,C,D,E,F,G的Huffman编码,列出编码过程,解释Huffman 有什么优点。
解:编码过程如下:各字符编码为字符 A B C D E F G编码011 110 010 00 1111 10 1110优点:Huffman编码为前缀码,它根据结点出现的频度由低到高编码,则可以使频度较高的结点有尽可能短的编码,从而使整个发送文件的总编码长度尽可能短。
数据结构期中考试试卷一、选择题(每题2分,共20分)1. 在数据结构中,线性表是按照什么顺序排列的元素集合?A. 任意顺序B. 无序C. 有序D. 线性2. 链表与数组相比,其主要优点是什么?A. 节省空间B. 访问速度快C. 插入和删除操作灵活D. 内存分配简单3. 栈(Stack)是一种遵循什么原则的数据结构?A. 先进先出B. 先进后出C. 后进先出D. 后进后出4. 哈希表解决冲突最常用的方法是?A. 链接法B. 替换法C. 线性探测法D. 二次探测法5. 树和二叉树的主要区别是什么?A. 树的节点数可以比二叉树多B. 树的节点可以有多个子节点C. 树的节点可以没有子节点D. 树的节点可以有左子节点和右子节点6. 什么是二叉搜索树(BST)?A. 所有左子节点的值小于根节点的值B. 所有右子节点的值大于根节点的值C. 所有左子节点的值大于根节点的值D. A和B都正确7. 图的邻接矩阵表示法适用于哪种类型的图?A. 稠密图B. 稀疏图C. 有向图D. 无向图8. 排序算法的时间复杂度为O(n^2)的算法有哪些?A. 选择排序B. 冒泡排序C. 插入排序D. 所有以上9. 什么是递归?A. 函数调用自身B. 函数调用其他函数C. 循环结构D. 条件语句10. 动态规划主要用于解决什么问题?A. 排序问题B. 查找问题C. 优化问题D. 数据存储问题二、简答题(每题5分,共20分)1. 请简述链表和数组的区别。
2. 解释什么是图的深度优先搜索(DFS)。
3. 什么是二叉堆?请简述其性质。
4. 描述快速排序算法的基本思想。
三、编程题(每题15分,共30分)1. 编写一个函数,实现单链表的反转。
2. 编写一个函数,实现二叉树的前序遍历。
四、算法设计题(每题15分,共30分)1. 设计一个算法,用于在无序数组中找到第k小的元素。
2. 设计一个算法,实现最小生成树的克鲁斯卡尔算法。
五、综合应用题(10分)假设你正在开发一个在线图书管理系统,请设计一个数据结构来存储书籍信息,并实现以下功能:- 添加新书- 删除书籍- 查找特定书籍- 列出所有书籍请提供数据结构的设计思路和相应的伪代码。
一、选择题(每小题2分,共30分)1. 数据结构是( D )。
A.一种数据类型 B.数据的存储结构C.一组性质相同的数据元素的集合D.相互之间存在一种或多种特定关系的数据元素的集合2.以下与数据的存储结构无关的术语是( D )。
A.链队列 B. 链表 C. 顺序表 D. 栈3.以下数据结构中,( A )是非线性数据结构A.树 B.字符串 C.队 D.栈4.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是(B)。
A.98 B.100 C.102 D.1065.在线性表的下列运算中,不改变数据元素之间结构关系的运算是(D )。
A.插入 B.删除 C.排序 D.查找6.线性表采用链式存储时,其地址(D )。
A.必须是连续的 B.一定是不连续的C.部分地址必须连续 D.连续与否均可以7.线性表是(A )。
A.一个有限序列,可以为空 B.一个有限序列,不可以为空C.一个无限序列,可以为空 D.一个无限序列,不可以为空8.若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则可能出现的出栈序列为( B )。
A.3,2,6,1,4,5 B.3,4,2,1,6,5C.1,2,5,3,4,6 D.5,6,4,2,3,19. 若一个栈的输人序列是1,2,3,…,n,输出序列的第一个元素是n,则第k个输出元素是(C )。
A.k B.n-k-1 C.n-k+1 D.不确定10.对于队列操作数据的原则是( A )。
A. 先进先出B. 后进先出C. 先进后出D. 不分顺序11. 栈和队列的共同点是( C )。
A. 都是先进先出B. 都是先进后出C. 只允许在端点处插入和删除元素D. 没有共同点12.在一个链队列中,假定front和rear分别为头指针和尾指针,删除一个结点的操作是( A )。
A.front=front->next B.rear=rear->nextC.rear->next=front D.front->next=rear13. 空串与空格串( B )。
A.相同 B.不相同 C.可能相同 D.无法确定14. 串与普通的线性表相比较,它的特殊性体现在(C )。
A.顺序的存储结构 B.链接的存储结构C.数据元素是一个字符 D.数据元素可以任意15. 串的长度是指( B )。
A.串中所含不同字母的个数B.串中所含字符的个数C.串中所含不同字符的个数D.串中所含非空格字符的个数二、填空题(每空2分,共20分)1.线性表、栈和队列,串都是__线性_____结构。
2.数据的基本单位是__数据元素_______________。
3.当线性表的元素总数基本稳定,且很少进行插入和删除操作,但要求以最快的速度存取线性表中的元素时,应采用_顺序______存储结构。
4.已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为Loc(a1),那么,第i个元素的存储地址Loc(a i)= Loc(a1)+(i-1)*k 。
5.栈(stack)是限定在表尾进行插人或删除操作的线性表。
在栈中,允许插人和删除操作的一端称为__栈顶________,而另一端称为_栈底________。
6.一个循环队列Q中,头指针和尾指针分别为Q.front和Q.rear,且最大队列长度为MaxQSize,则判断队空的条件为 Q.rear==Q.front,判断队满的条件为(Q.rear+1)%MaxQSize==Q.front。
队列的长度为 (.rear-Q.front+MaxQSize )%MaxQSize7.两个串相等的充分必要条件是两个串的长度相等,且各个对应位置的字符都相等。
三、程序填空题(每空3分,共30分)1. 在带头结点的单链表L中第i个数据元素之前插入数据元素e的C语言描述算法如下,其中L为链表头结点指针。
请填充算法中标出的空白处,完成其功能。
typedef struct node{int data;struct node *next;}linknode,*link;int ListInsert_L(link &L, int i, int e) {Linknode *p;int j;p = L; j = 0;while (p && j < i-1){ p=p->next ; ++j; } // 寻找第i-1个结点if (!p || j > i-1) return 0;s=(link)malloc(sizeof(linknode)) ;// 生成新结点ss->data = e;s->next=p->next ; p->next = s; // 插入L中return 1;} \2. 对顺序栈的C语言描述算法如下,其中top为栈顶指针,请填充算法中标出的空白处,插入元素e为新的栈顶元素。
#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{char *base;char *top;int stacksize;}SqStack;int Push( SqStack &S, char e){ //if ( (s.top-s.base)>=s.stacksize ) //栈满,追加存储空间{S.base=(SElemType *)realloc(S.base,S.stacksize+STACKINCREMENT) *sizeof(SElemType));if (! S.base) return 0;S.top = s.base+s.stacksize ; //修改栈顶指针S.stacksize += STACKINCREMENT;}*s.top++=e ;//插入元素return 1;}3. 对链队列的C语言描述算法如下,请填充算法中标出的空白处,删除队列Q 的队头元素并用e返回其值。
typedef struct QNode{QElemType data;struct QNode *next;}QNode, *QueuePtr;typedef struct {QueuePtr front;QueuePtr rear;}LinkQueue;int DeQueue(LinkQueue &Q, QElemType &e){ Linknode *p;if( Q.front==Q.rear ) retrun 0;//队列空,返回p = Q.front -> next;e = p->data;Q.front -> next=p->next;//修改指针if(Q.rear==p) Q.rear= Q.front ; //队列只有一个元素的情况free(p) ;//释放结点空间return 1;}三、算法设计与分析题(每题10分,共20分)1、简述下列算法实现的功能:(每题5分,共10分)(1)typedef struct LNode{Char data;struct LNode *next;}LNode,*LinkList;LinkList Demo(LinkList &L){ // L 是无头结点单链表LNode *Q,*P;if(L&&L->next){Q=L; L=L->next; P=L;while (P->next) P=P->next;P->next=Q; Q->next=NULL;}return L;}// Demo答:将单链表的第一个结点删除,放到链尾。
———————————————————————————————————————————————————(2)#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef struct{int *base;int *top;int stacksize;} Stack;void Demo1( Stack &S, int m){ Stack T; int i;InitStack (T);//初始化栈while (! StackEmpty(S))//判断栈是否为空if(( i=Pop(S)) !=m)Push( T,i);//入栈操作while (! StackEmpty(T)){i=Pop(T); //出栈操作Push(S,i);}}答:删除栈S中所有值为m的数据元素2.有一个带头结点的单链表,头指针为head,编写一个算法计算所有数据域为X的结点的个数(不包括头结点)。
typedef struct node{int data;struct node *next;}linknode,*link;int sample(link head, int X){ int count=0;link p=head->next;while(p){if(p->data==X)count++;p=p->next;}return count;}。