数据结构习题库汇总
数据结构试题及答案(十套)
一、单选题(每题 2 分,共20分)1.对一个算法的评价,不包括如下(B )方面的内容。
A.健壮性和可读性B.并行性C.正确性D.时空复杂度2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。
A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3.对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35.AOV网是一种()。
A.有向图B.无向图C.无向无环图D.有向无环图6.采用开放定址法处理散列表的冲突时,其平均查找长度()。
A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。
A.值B.函数C.指针D.引用8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。
A.行号B.列号C.元素值D.非零元素个数9.快速排序在最坏情况下的时间复杂度为()。
A.O(log2n) B.O(nlog2n)C.0(n) D.0(n2)10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。
A. O(n)B. O(1)C. O(log2n)D. O(n2)二、运算题(每题 6 分,共24分)1.数据结构是指数据及其相互之间的______________。
当结点之间存在M对N (M:N)的联系时,称这种结构为_____________________。
数据结构考试试题题库
数据结构考试试题题库一、选择题1. 在数据结构中,线性表是按照什么顺序存储数据的?A. 随机B. 无序C. 有序D. 连续2. 栈(Stack)是一种遵循哪种原则的数据结构?A. 先进先出(FIFO)B. 先进后出(LIFO)C. 后进先出(LILO)D. 随机访问3. 哈希表(Hash Table)的主要优点是什么?A. 存储空间大B. 访问速度快C. 易于排序D. 易于扩展二、简答题1. 请简述数组和链表的区别。
2. 什么是二叉树?请描述二叉树的几种遍历方法。
三、计算题1. 给定一个单链表,编写一个算法来删除链表中的重复元素。
2. 假设有一个数组,其中包含n个元素,编写一个算法来找到数组中的第k小的元素。
四、应用题1. 描述如何使用队列来实现一个打印任务调度系统。
2. 请解释二叉搜索树(BST)的插入操作,并给出相应的算法实现。
五、编程题1. 编写一个C++函数,实现对一个给定的整数数组进行排序。
2. 编写一个Python函数,实现对一个二叉树进行层次遍历。
六、论述题1. 讨论图的两种存储结构:邻接矩阵和邻接表,并比较它们的优缺点。
2. 解释什么是递归,并给出一个使用递归解决实际问题的例子。
结束语数据结构的学习不仅仅是对概念的理解,更重要的是能够将这些概念应用到实际问题的解决中。
通过本题库的练习,希望能够加深你对数据结构的理解和应用能力。
请注意,这只是一个示例题库,实际的考试题库可能会包含更多的题目和不同的题型。
考生应根据具体的课程内容和考试要求来准备。
数据结构题库及答案详解
数据结构题库及答案详解一、选择题1. 在数据结构中,线性结构的特点是什么?A. 结构中存在唯一的开始结点和终端结点B. 结构中所有结点的前驱和后继都存在C. 结构中所有结点都只有一个直接前驱和一个直接后继D. 结构中存在多个开始结点和终端结点答案:C2. 栈是一种特殊的线性表,其特点是:A. 先进先出B. 先进后出C. 可以同时在两端进行插入和删除操作D. 只能在一端进行插入和删除操作答案:D3. 在二叉树的遍历算法中,先序遍历的顺序是:A. 先访问根结点,然后遍历左子树,最后遍历右子树B. 先遍历左子树,然后访问根结点,最后遍历右子树C. 先遍历右子树,然后访问根结点,最后遍历左子树D. 先遍历左右子树,最后访问根结点答案:A二、填空题4. 在图的遍历中,______算法可以避免重复访问同一顶点。
5. 哈希表的冲突可以通过______方法来解决。
答案:4. 深度优先搜索(DFS)5. 链地址法或开放地址法三、简答题6. 简述排序算法中的快速排序算法的基本原理。
答案:快速排序算法是一种分治算法,它通过选择一个元素作为“基准”,然后将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素。
然后对这两个子数组递归地应用快速排序算法。
7. 解释什么是递归,并给出一个递归函数的例子。
答案:递归是一种在函数中调用自身的编程技术。
递归函数必须有一个明确的终止条件,以避免无限递归。
例如,计算阶乘的递归函数如下:```int factorial(int n) {if (n == 0) return 1; // 终止条件return n * factorial(n - 1); // 递归调用}```四、编程题8. 编写一个函数,实现单链表的反转。
答案:```c// 假设ListNode是链表节点的定义ListNode* reverseList(ListNode* head) {ListNode* prev = NULL;ListNode* curr = head;ListNode* next = NULL;while (curr != NULL) {next = curr->next; // 保存下一个节点curr->next = prev; // 反转指针prev = curr; // 移动prevcurr = next; // 移动curr}return prev; // 新的头节点}```9. 给定一个整数数组,请实现一个函数来找到数组中的最长连续子序列的长度。
数据结构试题及答案(10套)
数据结构试题及答案(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编程题:略(以下部分省略)通过以上的题目,您可以对数据结构的知识点进行综合练习和复习。
每套试题包含了不同难度和类型的题目,能够帮助您全面了解和掌握数据结构的概念和操作。
数据结构试题库及答案
数据结构试题库及答案一、选择题(每题2分,共20分)1. 在数据结构中,线性表的顺序存储结构通常使用()来存储。
A. 链表B. 栈C. 队列D. 数组答案:D2. 以下哪个算法不是排序算法?A. 快速排序B. 归并排序C. 深度优先搜索D. 堆排序答案:C3. 在二叉树的遍历算法中,先访问根节点,然后遍历左子树,最后遍历右子树的遍历方式是()。
A. 先序遍历B. 中序遍历C. 后序遍历D. 层序遍历答案:A4. 哈希表的冲突解决方法不包括以下哪种?A. 链地址法B. 线性探测法C. 二分查找法D. 再散列法答案:C5. 在图的遍历算法中,广度优先搜索(BFS)使用的辅助数据结构是()。
A. 栈B. 队列C. 堆D. 链表答案:B6. 下列关于堆的描述中,错误的是()。
A. 堆是一种特殊的完全二叉树B. 堆中的每个节点的值都大于其子节点的值C. 堆可以用于实现优先队列D. 堆的插入操作的时间复杂度为O(log n)答案:B7. 在一个长度为n的数组中,使用二分查找算法查找一个元素的最坏情况下的时间复杂度是()。
A. O(1)B. O(n)C. O(n^2)D. O(log n)答案:D8. 以下哪个数据结构不是线性结构?A. 链表B. 栈C. 队列D. 二叉树答案:D9. 以下哪个算法是动态查找表?A. 直接索引B. 顺序查找C. 二分查找D. 哈希表答案:D10. 在图的表示方法中,邻接矩阵表示法的缺点是()。
A. 占用空间大B. 占用空间小C. 插入和删除操作复杂D. 遍历操作复杂答案:A二、填空题(每题2分,共20分)1. 在一个长度为n的数组中,使用顺序查找算法查找一个元素的时间复杂度为________。
答案:O(n)2. 一个具有n个节点的完全二叉树的高度为________。
答案:log2(n) + 1(向上取整)3. 一个长度为n的链表,删除一个节点的时间复杂度为________。
答案:O(1)4. 在图的表示方法中,邻接表表示法的缺点是________。
数据结构综合习题集(含答案)
数据结构习题集一、选择题1.数据结构中所定义的数据元素,是用于表示数据的。
(C)A.最小单位B.最大单位C.基本单位D.不可分割的单位2.从逻辑上可以把数据结构分为(C)A.动态结构、静态结构B.顺序结构、链式结构C.线性结构、非线性结构D.初等结构、构造型结构3.当待排序序列中记录数较少或基本有序时,最适合的排序方法为(A )A.直接插入排序法B.快速排序法C.堆排序法D.归并排序法4.关于串的的叙述,不正确的是( B)A.串是字符的有限序列B.空串是由空格构成的串C.替换是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储5.带表头结点链队列的队头和队尾指针分别为front和rear,则判断队空的条件为(A )A.front==rear B.front!=NULL C.rear!=NULL D.front==NULL6.若构造一棵具有n个结点的二叉排序树,最坏的情况下其深度不会超过(B)A.n/2B.nC.(n+1)/2D.n+17.将两个各有n个元素的有序表合并成一个有序表,其最少的比较次数为(A)A.nB.2n-1C.2nD.n28.设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为(B )A.236B.239C.242D.2459.一个栈的入栈序列是a,b,c,d,e,则栈的输出序列不可能是(A )A.dceabB.decbaC.edcbaD.abcde10.元素大小为1个单元,容量为n个单元的非空顺序栈中,以地址高端为栈底,以top作为栈顶指针,则出栈处理后,top的值应修改为(D )A.top=topB.top=n-1C.top=top-1D.top=top+111.设有一个10阶的对称矩阵A,采用压缩存储方式以行序为主序存储,a00为第一个元素,其存储地址为0,每个元素占有1个存储地址空间,则a45的地址为(B)A.13B.35C.17D.3612.栈和队列( C )A.共同之处在于二者都是先进先出的特殊的线性表B.共同之处在于二者都是先进后出的特殊的线性表C.共同之处在于二者都只允许在顶端执行删除操作D.没有共同之处13.含有n个结点的二叉树用二叉链表表示时,空指针域个数为(C )A.n-1B.nC.n+1D.n+214.对一棵有100个结点的完全二叉树按层序编号,则编号为49的结点,它的左孩子的编号为(B)A.99B.98C.97D.5015.在一个图中,所有顶点的度数之和与图的边数的比是( C)A.1∶2B.1∶1C.2∶1D.4∶116.在一个具有n个顶点的无向图中,要连通全部顶点至少需要的边数为(A )A.n-1B.nC.n+1D.n/217.在一个具有n个顶点的无向图中,每个顶点度的最大值为( B )A.nB.n-1C.n+1D.2(n-1)18.若采用邻接表存储结构,则图的广度优先搜索类似于二叉树的(D)A.先序遍历B.中序遍历C.后序遍历D.层次遍历19.对线性表进行二分查找时,要求线性表必须( C)A.以顺序方式存储B.以链式方式存储C.以顺序方式存储,且结点按关键字有序排列D.以链接方式存储,且结点按关键字有序排列20.二分查找算法的时间复杂度是(D)A.O(n2)B.O(nlog2n)C.O(n)D.O(log2n)21.采用排序算法对n个元素进行排序,其排序趟数肯定为n-1趟的排序方法是(C)A.插入和快速B.冒泡和快速C.选择和插入D.选择和冒泡22. 闭散列表中由于散列到同一个地址而引起的“堆积”现象,是( B)A.由同义词之间发生冲突引起的B.由非同义词之间发生冲突引起的C.由同义词之间或非同义词之间发生冲突引起的D.由散列表“溢出”引起的23.在对查找表的查找过程中,若被查找的数据元素不存在,则把该数据元素插入到集合中。
数据结构历年真题及解析题
数据结构历年真题及解析题一、选择题1. 下列关于数组的描述,正确的是()。
A. 数组在内存中是连续存放的。
B. 数组一经定义,其长度不可改变。
C. 数组的每个元素可以是不同的数据类型。
D. 数组可以通过下标随机访问元素。
答案:A、B、D2. 链表相比于数组的优势在于()。
A. 内存使用更高效。
B. 插入和删除操作更加方便。
C. 可以通过下标随机访问元素。
D. 存储空间可以动态分配。
答案:B、D3. 栈(Stack)的特点是()。
A. 先进先出(FIFO)。
B. 后进先出(LIFO)。
C. 只能在一端进行插入和删除。
D. 可以通过索引随机访问元素。
答案:B、C4. 队列(Queue)与栈的主要区别在于数据的()。
A. 存取方式。
B. 存储结构。
C. 操作速度。
D. 内存占用。
答案:A5. 二叉树的前序遍历的顺序是()。
A. 根-左-右。
B. 左-根-右。
C. 右-根-左。
D. 根-右-左。
答案:A6. 快速排序算法的时间复杂度在最坏情况下是()。
A. O(n)B. O(nlogn)C. O(n^2)D. O(n^3)答案:C7. 哈希表的冲突解决方法中,开放定址法的特点是()。
A. 通过增加哈希表的大小来解决冲突。
B. 通过链表来链接具有相同哈希值的元素。
C. 寻找表中下一个空闲位置来存储冲突元素。
D. 重新计算哈希值,直到找到空闲位置。
答案:C8. 图的遍历算法中,深度优先搜索(DFS)与广度优先搜索(BFS)的主要区别在于()。
A. DFS使用递归,BFS使用队列。
B. DFS使用栈,BFS使用递归。
C. DFS使用队列,BFS使用栈。
D. DFS和BFS都使用链表。
答案:A9. 堆(Heap)结构中,最大堆的性质是()。
A. 父节点的值小于子节点。
B. 父节点的值大于子节点。
C. 父节点的值等于子节点。
D. 没有固定的大小关系。
答案:B10. 动态规划算法通常用于解决()类型的问题。
A. 排序。
数据结构习题集(包含全部答案)
数据结构习题集(包含全部答案)数据结构习题集(自编)第一章绪论一、选择题1.数据结构是一门研究非数值计算的程序设计问题中的操作对象以及它们之间的()和运算的学科。
A.结构B.关系 C.运算 D.算法2.在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构 B.紧凑结构和非紧凑结构C.线性结构和非线性结构 D.逻辑结构和存储结构3.线性表的逻辑顺序和存储顺序总是一致的,这种说法()。
A.正确B.不正确 C.无法确定 D.以上答案都不对4.算法分析的目的是()。
A.找出算法的合理性 B.研究算法的输人与输出关系C.分析算法的有效性以求改进 D.分析算法的易懂性5. 算法的时间复杂度取决于()A.问题的规模B待处理数据的初态 C. A和B6.一个算法应该是()。
A.程序B.问题求解步骤的描述C.要满足五个基本特性 D.A和C.7. 下面关于算法说法错误的是()A.算法最终必须由计算机程序实现B.为解决某问题的算法与为该问题编写的程序含义是相同的C. 算法的可行性是指指令不能有二义性D. 以上几个都是错误的8.以下与数据的存储结构无关的术语是()。
A.循环队列 B. 链表 C. 哈希表 D. 栈9.在下面的程序段中,对x的赋值语句的频度为()for(i=0;i<n;i++)for(j=0;j<n;j++)x=x+1;nA. 2n B.n C.n2 D.log210.以下数据结构中,()是非线性数据结构A.树 B.字符串 C.队列 D.栈11. 下列数据中,()是线性数据结构。
A.哈夫曼树 B.有向无环图 C. 二叉排序树 D. 栈12.以下属于逻辑结构的是()。
A.顺序表 B. 哈希表 C.有序表 D. 单链表二、填空题1、_______是信息的载体,是对客观事物的符号表示,它能够被计算机识别、存储、加工和处理,________是对能够有效的输人到计算机中并且能够被计算机处理的符号的总称。
数据结构考试试题题库
数据结构考试试题题库一、选择题1. 在数据结构中,栈(Stack)是一种特殊的线性表,其特点是:A. 允许在表的任意位置插入和删除元素B. 只能在表的一端进行插入和删除操作C. 只能在表的两端进行插入和删除操作D. 只能在表的中间进行插入和删除操作答案:B2. 假设有一个单链表,头结点的指针域为head,链表中每个结点包含一个数据域data和指向下一个结点的指针域next。
若要删除指针p所指向的结点,以下哪个操作是正确的?A. p = p->nextB. p->next = p->next->nextC. p = p->next->nextD. p = NULL答案:B3. 在二叉树的遍历算法中,先序遍历的顺序是:A. 先访问根节点,然后遍历左子树,最后遍历右子树B. 先遍历左子树,然后访问根节点,最后遍历右子树C. 先遍历右子树,然后访问根节点,最后遍历左子树D. 同时遍历左子树和右子树答案:A4. 哈希表的冲突可以通过多种方式解决,以下哪种不是解决哈希表冲突的方法?A. 链地址法B. 开放地址法C. 再哈希法D. 排序法答案:D5. 快速排序算法的时间复杂度在最好、最坏和平均情况下分别是:A. O(n log n), O(n^2), O(n)B. O(n), O(n log n), O(n^2)C. O(n log n), O(n), O(n log n)D. O(n^2), O(n log n), O(n)答案:A二、简答题1. 请简述什么是图,并说明图的两种基本表示方法。
答案:图是一种数据结构,由顶点(或称为节点)和边组成。
图可以表示为有向图或无向图。
图的两种基本表示方法为邻接矩阵和邻接表。
邻接矩阵是一个二维数组,其元素表示顶点之间的连接关系;邻接表则使用链表存储每个顶点的邻接点。
2. 什么是二叉搜索树(BST)?请简述其特点。
答案:二叉搜索树是一种特殊的二叉树,其中每个节点的值都大于或等于其左子树中所有节点的值,并且小于或等于其右子树中所有节点的值。
《数据结构》习题册
《数据结构》练习题习题一一.单项选择题1.数据结构是一门研究非数值计算的程序设计问题中计算机的(1)以及它们之间的(2)和运算的学科.(1)A.操作对象 B.计算方法 C.逻辑存储 D.数据映象(2)A. 结构 B.关系 C.运算 D. 算法2.数据结构被形式地定义为(K,R),其中K是(1)的有限集合,R是K上的(2)有限集合.(1)A.算法 B. 数据元素 C. 数据操作 D.逻辑结构(2)A. 操作 B. 映象 C. 存储 D.关系3.在数据结构中,从逻辑上可以把数据结构分成( ).A. 动态结构和静态结构B. 紧凑结构和非紧凑结构C.线性结构和非线性结构 D.内部结构和外部结构4.计算机算法指的是(1),它必具备输入,输出和(2)等五个特性.(1)A. 计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法(2)A.可行性、可移植性和可扩充性 B.可行性、确定性和有穷性C. 确定性、有穷性和稳定性 D.易读性、稳定性和安全性5.线性表的顺序存储结构是一种(1)的存储结构,线性表的链式存储结构是一种(2)的存储结构.(1)(2)A.随机存取 B.顺序存取 C.索引存取 D.散列存取6.线性表的逻辑顺序与存储顺序总是一致的,这种说法( )A.正确 B.不正确7.线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )A.必须是连续的 B.部分地址必须是连续的C. 一定是不连续 D.连续或不连续都可以8.在以下的叙述中,正确的是( )A.线性表的线性存储结构优于链表存储结构B.二维数组是其数据.元素为线性表的线性表C. 栈的操作方式是先进先出D.队列的操作方式是先进后出9.一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( ). A.110 B.108 C.100 D.12010.一个栈的入栈序列是a,b,c,d,e,则栈的不可能的输出序列是( ).A.edcba B.decba C. dceab D.abcde11.栈结构通常采用的两种存储结构是( ).A.顺序存储结构和链表存储结构B.散列方式和索引方式C. 链表存储结构和数组D.线性存储结构和非线性存储结构12.判定一个栈ST(最多元素为mO)为空的条件是(①);判定ST为满的条件是(②).A.ST-->top<>0 B.ST-->top=0 C. ST-->mp<>m0 D.ST-->top=mO12.栈的特点是(①),队列的特点是(②).A.先进先出 B,先进后出13.一个队列的入列序列是1,2,3,4,则队列的输出序列是( ).A. 4,3,2,1B.1,2,3,4 C.1,4,3,2 D.3,2,4,114.判定一个队列QU(最多元素为mO)为空的条件是(①);判定QU为满的条件是(②).A. QU->rear-QU->front==m0B. QU->rear-QU->front-1==m0C. QU->front==QU->rearD. QU->front==QU->rear+115.判定一个循环队列QU(最多元素为mO)为空的条件是(①);判定QU为满的条件是(②).A. QU->front==QU->rearB. QU->front!=QU->rearC. QU->front==(QU->rear+1)%m0D. QU->front!=(QU->rear+1)%m016.栈和队列的共同点是( ).A.都是先进后出 B.都是先进先出C. 只允许在端点处插入和删除元素 D.没有共同点17.不带头结点的单链表head为空的判定条件是( ).A. head=NULLB. head->next=NULLC. head->next=headD.head!=NULI18.带头结点的单链表head为空的判定条件是( ).A. head=NULLB. head->next=NULLC. head->next=headD. head!=NULL19.非空的循环单链表head的尾结点是(由p所指向)满足( ).A. p->next=NULLB. p=NULLC. p->next=headD. p=head20. 在循环双链表的p所指结点之后插入s所指点的操作是( ).A. p->right=s;s->left=p; p->right->left=s;s->right=p->right;B. p->right=s;p->right->left=s;s->left=p;s->right=p->right;C. s->left=p:s->right=p->right;p->right=s;p->right->left=s;D. s->left=p;s->right=p->right;p->right->left=s;p->right=s;21. 在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行( ). A.s->next=p->next;p->next=s;B. p->next=s->next;s->next=p;C. q->next=s;s->next=p:D. p->next=s;s->next=q;22. 在一个单链表中,若p所指结点不是最后结点,在p之后插入s所指结点,则执行( ).A. s->next=p;p->next=s;B. s->next=p->next;p->next=s;C. s->next=p->next; p=s;D. p->next=s;s->next=p;23.在一个单链表中,若删除p所指结点的后续结点,则执行( ).A. p->next=p->next->next;B. p=p->next;p->next=p->next->next;C. p->next=p->next;D. p=p->next->next;24. 假设双链表结点的类型如下:typedef struct linknode{int data;struct linknode *llink;struct linknode *rlink;}bnode;下面给出的算法段是要把一个q所指新结点作为非空双向链表中的p所指结点的前驱结点插入到该双链表中,能正确完成要求的算法段是( ).A.q->rlink=p; q->llink=p->llink; p->llink=q; p->llink->rlink=q;B.p->llink=q; q->rlink=p; p->llink->rlink=q; q->llink=p->llink;C. q->llink=p->llink; q->rlink=p; p->llink->rlink=q; p->llink=q;D.以上都不对25.从一个具有n个结点的单链表中查找等于x结点时.在查找成功的情况下,需平均比较( )个结点.A. n B.n/2 C.(n-1)/2 D.(n+1)/226.在一个具有n个结点的有序单链表中插入一个新结点并仍然有序的时间复杂度是( ).A. O(1) B.O(n) C.O(n2) D. O(nlog2n)27.向一个栈顶指针为16的链栈中插入一个s所指结点时,则执行( ).A.HS->next=s; B.s->next=HS->next;HS->next=s;C.s->next=HS;HS=s; D.s->next=HS; HS=HS->next;28.从一个栈顶指针为HS的链栈中删除一个结点时,用x保存被删结点的值,则执行( ).A.x=HS;HS=HS->next; B.x=HS->data;C.HS=HS->next;x=HS->data;D. x=HS->data;HS=HS->next;29.在一个链队中,假如f和r,分别为队首和队尾指针,要插入s所指结点,则执行( ).A.f->next=s;f=s;B.r->next=s;r=s;C. s->next=r; r=s;D.s->next=f; f=s;30.在一个链队中,假如f和r分别为队首和队尾指针.要删除一个结点,则执行( )oA.r=f->next; B.r=f->next; C.f=f->next; D.f=r->next;31.空串与空格串是相同的,这种说法( ).A.正确 B.不正确32.设有两个串p和q,求q在p中首次出现的位置的运算称作( ).A.连接 B,模式匹配 C.求子串 D.求串长33.串是一种特殊的线性表,其特殊性体现在( ).A.可以顺序存储 B.数据元素是一个字符C.可以链接存储 D.数据元素可以是多个字符34.设串s1='ABCDEFG’,s2='PQRST',函数CONCAT(x,y)返回x和y串的连接串,SUBSTR(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,STRLEN(s)返回串s的长度,则CONCAT(SUBSTR(s1,2,STRLEN(s2)),SUBSTR(s1,STRLEN(s2),2)的结果串是( ).A.BCDEF B.BCDEFG C.BCPQRST D.BCDEFEF35.常对数组进行的两种基本操作是( ).A.建立与删除 B.索引和修改 C查找和修改 D.查找与索引36.二维数组M的成员是6个字符(每个字符占一个存储单元)组成的串,行下标i的范围从0到8,列下标j 的范围从1到10,则存放M至少需要(①)个字节;M的第8列和第5行共占(②)个字节;若M按行优先方式存储,元素M[8][5]的起始地址与当M按列优先方式存储时的( ③)元素的起始地址一致.①A.90 B.180 C.240 D.540②A.108 B.114 C.54 D.60③A.M[8][5] B.M[3][10] C.M[5][8] D.M[0][9]37.数组A中每个元素的长度为3个字节,行下标i从1到8,列下标从l到10,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是( ).A.80 B.100 C.240 D.27038.数组A中每个元素的长度为3个字节,行下标i从l到8,列下标从1到10,从首地址SA开始连续存放在存储器内,该数组按行存放时,元素A[8][5]的起始地址是(①);按列存放时,元素A[5][8]的起始地址是(②).①A.SA+141 B.SA+144 C.SA+222 D.SA+225②A. SA+141 B.SA+180 C.SA+222 D.SA+22539.稀疏矩阵一般的压缩存储方法有两种,即( ).A.二维数组和三维数组 B.三元组和散列C. 三元组和十字链表 D.散列和十字链表40.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点( ).A.正确 B.不正确二、填空题1.数据逻辑结构包括___________、_______________和______________三种类型,树型结构和图型结构合称为 _____________________2.在线性结构中,第一个结点______________前驱结点,其余每个结点有且只有________个前驱结点,最后一个结点_______后继结点,其余每个结点有且只有__________个后继结点.3.算法的五个重要特性是________ 、_________、______________、___________ 、_________ 和___________. 4.向量、栈和队列都是__________结构,可以在向量_________位置插入和删除元素;对于栈只能在_________ 插入和删除元素:对于队列只能在___________插入元素和在________删除元素.5.向一个长度为n的向量的第i个元素(1<=i<=n+1)之前插入一个元素时,需向后移动_______个元素.若要删除第j个元素(1<=j<=n)时,需向前移动______________个元素.6. 向栈中压入元素的操作是先____________________________,后存入元素.出栈的操作是先取出元素,后__________________.7.在一个循环队列中,队首指针指向队首元素的_____________;从该队列中删除一个元素时,其操作是先_________________,后取出元素.8.在具有n个单元的循环队列中,队满时共有_____________元素.9.单链表是_________________ 的链式存储表示.10.在双链表,每个结点有两个指针域,通常一个指向___________,另一个指向_________________.11.在一个单链表中的p所指结点之前插入一个s所指结点时,可执行如下操作:(1)s->next=_____________ (2)p->next=s; (3)t=p->data;(4)p->data=_______________; (5)s->data=_______________;12.在一个单链表中删除p所指结点时,应执行以下操作:(1)q=p->next; (2)p->data=p->next->data;(3)p->next=_________________; (4)free(q);13.带有一个头结点的单链表head为空的条件是____________________.14.在一个单链表中p所指结点之后插入一个s所指结点时,应执行(1)s->next=______________; (2)p->next=_________________;15.在栈项指针为HS的链栈中,判定栈空的条件是______________ .16.在HQ的链队中,判定只有一个结点的条件是__________________ .17.串的两种最基本的存储方式是________________ 和_____________.18.两个串相等的充分必要条件是 ____________________.19.空串是_________________,且其长度等于________________.20.已知二维数组A[m][n]采用以行优的存储方式,每个元素占k个存储单元,并且第一个元素的存储地址是LOC(A[0][0]),则A[i][j]的地址是_________________________.21. 广义表是____________________. 如G=(al,a2,a3,…,ai,...,an),其中G是___________,n是_______________________,ai也可以是___________________________.22.广义表(((a)))的表头是_________________,表尾是__________;广义表((a),((b),c),(((d))))的长度是____________;深度是_____________________ .23.设HEAD[P]为求广义表P的表头函数,TAIL[P]为求广义表P的表尾函数.求下列的运算结果:(1)HEAD[(a,b,c)]= _________________; (2)TAIL[(a,b,c)]=__________________;(3)HEAD[((a),(b))]=_________________; (4)TAIL[((a),(b))]=____________________.习题二一、选择题1. 如下图所示的4棵二叉树中,( )不是完全二叉树.2.A.正确 B .不正确3.设高度为h 的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含的结点数至少为 ( ).A .2h B. 2h-1 C .2h+1 O .h+l4.已知某二叉树后序遍历序列是dabec ,中序遍历序列是debac ,它的前序遍历序列是( ).A .acbed B.decab C.deabc D .cedba5.二叉树为二叉排序树的充分必要条件是其任一结点的值均大于其左孩子的值、小于其右孩子的值.这种说法( ).A .正确 B.不正确6.按照二叉树的定义,具有3个结点的二叉树有( )种形态A.3 B .4 C .5 D .67.深度为5的二叉树至多有( )个结点.A .16B .32C .21 D.108在一非空二叉树的中序遍历序列中,根结点的右边( ).A .只有右子树上的所有结点B .只有右子树上的部分结点C .只有左子树上的部分结点 D.只有左子树上的所有结点9.树最适合用来表示( ).A .有序数据元素B .无序数据元素C .元素之间具有分支层次关系的数据D .元素之间无联系的数据10.由于二叉树中每个结点的度最大为2,所以二叉树是一种特殊的树,这种说法( ).A .正确 B.不正确11.对于一个满二叉树,m 个树叶,n 个结点,深度为h ,则( ), A .n=h+m B. h+m=2n C .m=h-1 D .n=2h -112.在一个图中,所有顶点的度数之和等于所有边数的( )倍.A.1/2B.1C.2D.413.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍.A.1/2 B .1 C.2 D.414.一个有n 个顶点的无向图最多有( )条边.A .n B.n(n-1) C .n(n-1)/2 D .2n15.具有4个顶点的无向完全图有( )条边.A.6B.12 C .16 D .2016.具有6个顶点的无向图至少应有( )条边才能确保是一个连通图.A. 5B. 6 C . 7 D . 817.在一个具有n 个顶点的无向图中,要连通全部顶点至少需要( )条边.A. nB. n+1 C . n-1 D . n/218.对于一个具有n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是( ).A .n B.(n-1)2 C .n-1 D .n 219.对于一个具有n 个顶点和e 条边的无向图,若采用邻接矩阵表示,则表头向量的大小为(①);所有邻接表中的结点总数是(②).A .nB .n+l C. n-1 D.n+eA.e/2 B .e C .2e D.n+e20.已知一个图G(见下图),若从顶点a 出发按深度搜索法进行遍历,则可能得到的一种顶点序列为(①);按宽度搜索法进行遍历,则可能得到的一种顶点序列为(②).A .a, b ,e ,c ,d, fB .a ,c, f ,e ,b ,dC .a ,e ,b ,c ,f, dD .a ,e ,d ,f ,c ,bA .a, b, c ,e ,d ,fB .a, b, c, e, f, dC .a ,e ,b, c ,f ,dD .a ,c ,f, d ,e, b二、填空题1.指出树和二叉树的主要差别________________________________________________________ .2.深度为k 的完全二叉树至少存_________个结点.至多有______________个结点,若按自上而下,从左 到右次序给结点编号(从1开始),则编号最小的叶子结点的编号是___________________________.3.在一棵二叉树中,度为零的结点的个数为n.,度为2的结点的个数为n2,则有 n0=___________________4.结点最少的树为__________________; 结点最少的二叉树为________________;一棵二叉树的第i 层最多有__________________个结点.5.现有按中序遍历二叉树的结果为abc ,则有__________________棵二叉树可以得到这一遍历结果;这些二叉树分别是:6.树有三种常用的存储方法:__________________、________________ ,______________8.n 个顶点的连通图至少有________________________条边.9. 在无向图G 的邻接矩阵A 中,若A[i][j]等于1,,则A[j][i]等于_________________.10.已知一个图的邻接矩阵表示,计算第 i 个结点的入度的方法是_____________________________11.已知一个图的邻接矩阵表示,删除所有从第i 个结点出发的边的方法是____________________________12.已知无向图G 的邻接链表如下图所示,求:(1)画出对应的无向图G 。
数据结构试题及答案(10套最新)
数据结构试题及答案(10套最新)数据结构试题及答案(10套最新)第一套试题:问题一:什么是数据结构?数据结构的作用是什么?回答:数据结构是一种组织和存储数据的方式,它关注数据元素之间的关系以及对数据元素的操作。
数据结构的作用包括提供高效的数据存储和访问方式,减少资源消耗,简化问题的解决方法,提高算法的性能和程序的可读性。
问题二:请列举几种常见的线性数据结构,并简要介绍它们的特点。
回答:常见的线性数据结构包括数组、链表和栈。
数组是一种连续存储数据元素的结构,具有随机访问的特点;链表是一种通过指针相连的数据元素,可以灵活地插入和删除元素;栈是一种遵循先进后出原则的数据结构,常用于解决递归问题。
问题三:请说明二叉树的定义及其性质。
回答:二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点。
二叉树具有以下性质:每个节点最多有两个子节点,分别称为左子节点和右子节点;左子树和右子树都是二叉树;二叉树的节点个数为n,边的个数为n-1。
问题四:在数组中查找一个元素的时间复杂度是多少?为什么?回答:在数组中查找一个元素的时间复杂度是O(n),其中n是数组的长度。
因为在数组中查找元素需要按照索引一个一个比较,最坏情况下需要比较n次才能找到目标元素。
问题五:请解释堆排序算法的原理及时间复杂度。
回答:堆排序算法利用堆这种数据结构进行排序。
首先将待排序的元素构建成一个大顶堆,然后将堆顶元素与最后一个元素交换,继续调整堆,再取出堆顶元素与倒数第二个元素交换,依次执行,最后得到从小到大排序的序列。
堆排序的时间复杂度为O(nlogn)。
第二套试题:问题一:请解释图的邻接矩阵和邻接表表示法。
回答:图的邻接矩阵表示法是使用二维数组来表示图的连接关系,数组中的元素表示相应节点之间的边的关系。
邻接表表示法使用链表来表示图的连接关系,链表中的元素表示相邻节点之间的边的关系。
问题二:请说明深度优先搜索算法的原理及其应用。
回答:深度优先搜索(DFS)算法是一种遍历或搜索图的算法,其原理是从起始节点开始,依次深入到尽可能远的节点,直到无法继续深入为止,然后回溯到上一个节点,再继续深入其他未访问过的节点。
数据结构试题汇编带答案
《数据结构》习题汇编一、单项选择题1. 在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构C.线性结构和非线性结构D.内部结构和外部结构2. 数据结构在计算机内存中的表示是指()。
A.数据的存储结构B.数据结构C.数据的逻辑结构D.数据元素之间的关系3. 在数据结构中,与所使用的计算机无关的是数据的()结构。
A.逻辑B.存储C.逻辑和存储D.物理4.计算机算法指的是(①),它必须具备输入、输出和(②)等5个特性。
①A.计算方法 B.排序方法C.解决问题的有限运算序列D.调度方法②A.可行性、可移植性和可扩充性 B.可行性、确定性和有穷性C.确定性、有穷性和稳定性D.易读性、稳定性和安全性5.在一个长度为n的顺序表中向第i个元素(l W i W n+1)位置插入一个新元素时,需要从后向前依次后移()个元素。
A. n-iB. n-i+1C. n-i-1D. i6.在一个长度为n的顺序表中删除第i个元素(i W i W n)时,需要从前向后依次前移()个元素。
A. n-iB. n-i+1C. n-i-1D. i7.在一个长度为n的顺序表的表尾插入一个新元素的渐进时间复杂度为()。
A. O(n)B. O(1)C. O(n2)D. O(log2n)8.在一个长度为n的顺序表的任一位置插入一个新元素的渐进时间复杂度为()。
A. O(n)B. O(n/2)C. 0(1)D. O(n2)9.不带头结点的单链表first为空的判定条件是:()A. first == NULL;B. first->next == NULL;C. first->next == first;D. first != NULL;10.带头结点的单链表first为空的判定条件是:()A. first == NULL;B. first->next == NULL;C. first->next == first;D. first != NULL;11.设单链表中结点的结构为(data, next)。
数据结构试题库及答案
数据结构试题库及答案一、选择题1. 在数据结构中,线性结构的特点是:A. 元素之间存在一对一关系B. 元素之间存在一对多关系C. 元素之间存在多对多关系D. 元素之间存在一对一或多对多关系答案:A2. 栈(Stack)是一种特殊的线性表,其特点是:A. 只能在一端进行插入和删除操作B. 可以在两端进行插入和删除操作C. 只能在一端进行插入操作,另一端进行删除操作D. 可以在任意位置进行插入和删除操作答案:A3. 在二叉树中,度为1的节点数目为2,度为0的节点数目也为2,该二叉树的节点总数是:A. 5B. 6C. 7D. 8答案:B二、简答题1. 请简述什么是哈希表,并说明其主要优点。
答案:哈希表是一种通过哈希函数将键映射到表中一个位置来访问记录的数据结构。
其主要优点包括:平均情况下,查找、插入和删除操作的时间复杂度为O(1),即常数时间内完成操作;空间效率高,能够存储大量数据。
2. 描述图的深度优先搜索(DFS)算法的基本思想。
答案:深度优先搜索算法的基本思想是从一个顶点开始,尽可能深地搜索图的分支。
搜索过程中使用一个栈来保存路径上的顶点。
当搜索到一个顶点时,先访问该顶点,然后依次搜索其所有未被访问过的邻接顶点。
如果当前顶点的所有邻接顶点都被访问过,则回溯到上一个顶点,继续搜索其他邻接顶点。
三、应用题1. 给定一个无向图,使用邻接表表示,请编写一个算法找出图中的所有连通分量。
答案:首先,创建一个访问过的顶点集合。
然后,从图中任意一个未被访问的顶点开始,执行深度优先搜索(DFS)。
每次DFS完成后,就找到了一个连通分量。
重复这个过程,直到所有顶点都被访问过,即可找到图中的所有连通分量。
2. 假设有一个数组,需要频繁地进行查找、插入和删除操作,请设计一个适合这种场景的数据结构,并说明其优势。
答案:对于这种场景,可以使用平衡二叉搜索树(如AVL树或红黑树)。
这些数据结构可以保证在最坏情况下,查找、插入和删除操作的时间复杂度为O(log n)。
数据结构习题库汇总
知识点:01.绪论02.顺序表03.链表04.栈05.链队列06.循环队列07.串08•数组的顺序表示09.稀疏矩阵10.广义表11.二叉树的基本概念12.二叉树遍历、二叉树性质13.树、树与二叉树的转换14.赫夫曼树15.图的定义、图的存储16.图的遍历17.图的生成树18.静态查找(顺序表的查找、有序表的查找)19 .动态查找(二叉排序树、平衡树、B树)20.哈希查找21 .插入排序(直接插入、折半插入、2路插入、希尔排序)22.选择排序(简单选择、树形选择、堆排序)23.快速排序、归并排序101A1 A . 101A1 A . 101B1 (1) .数据的逻辑结构是(A )。
数据的组织形式B .数据的存储形式 (2) .组成数据的基本单位是(C )。
数据项 B .数据类型 C .数据元素 C .数据的表示形式D .数据的实现形式 D .数据变量 A . 101B2 A . C . 101B2 (3) .与顺序存储结构相比,链式存储结构的存储密度( 大 B . 小 C .相同 D .以上都不对 (4) .对于存储同样一组数据元素而言, 顺序存储结构比链接结构多占空间 B )。
(D ) B .在顺序结构中查找元素的速度比在链接结构中查找要快 D .顺序结构占用整块空间而链接结构不要求整块空间 A . 101B2 A .101C2A . 101D3A . 102A1A . C . 102C2 与链接结构相比,顺序结构便于安排数据元素 (5) .下面程序的时间复杂度为( x=0 ; for (i=1 ; i<n ; i++) for (j=i+1 ; j<=n ; j++ ) X++ ;O ( V n ) B. O (n 2) C. (6) .下面程序的时间复杂度为(for (i=0 ; i<m ; i++ ) for (j=0 ; j<n ; j++ ) A[i][j]=i*j ; O ( m 2) B . O (n 2) C . (7) .下面程序段的执行次数为(for (i=0 ; i<n-1 ; i++) for (j=0 ; j>i ; j++ ) state;n (n+1) /2 B . (n-1) (n+2) (8) .下面程序的时间复杂度为( for (i=0 ; i<m ; i++) for (j=0; j<t ; j++ )c[i][j]=0 ; for (i=0 ; i<m ; i++) for (j=0; j<t ; j++ ) for ( k=0; k<n ; k++)c[i][j]=c[i][j]+a[i][k]*b[k][j] O (mx nx t) B . O (m+n+t) C. O ( m+n x t) D . O (mx t+n) (9) .顺序表的特点是(B )。
数据结构习题集
数据结构习题集数据结构试题一、单项选择1、若某线性表中最常用的操作是在最后一个元素之前插入和删除元素,则采用___________最节省运算时间.A、单链表B、仅有头指针的单循环链表C、仅有尾指针的单循环链表D、双链表2、哈夫曼树的带权路径长度WPL等于___C________.A、除根以外的所有结点的权植之和B、所有结点权值之和C、各叶子结点的带权路径长度之和D、根结点的值3、设输入序列为1,2,3,4,5,借助一个栈不可能得到的输出序列是___________.A、1,2,3,4,5B、1,4,3,2,5C、4,1,3,2,5D、1,3,2,5,44、20个结点的完全二叉树,其高度为___________.A、3B、2C、4D、55、栈和队列都是___________.A、顺序存储的线性结构B、链式存储的线性结构C、限制存储点的线性结构D、限制存储点的非线结构6、已知完全二叉树有30个结点,则整个二叉树有___________个度为1的结点.A、0B、1C、2D、不确定7、对于N个结点的完全无向图,其边数是___________A、NB、N2C、N(N+1)/2D、N(N+1)8、队列的特点是A、先进先出B、先进后出C、后进先出D、不进不出9、连通分量是的极大连通子图。
A、有向图B、树C、无向图D、图10、现有一“遗传”关系:设x是y的父亲,则x可以把它的属性遗传给y。
表示该遗传关系最适合的数据结构为..............................A、向量B、树C、图D、二叉树11、栈和队列都是().A、线性结构B、链式存储的线性结构C、线性结构或非线性结构D、非线性结构12、二叉树第J层有()个结点A、JB、2JC、J+1D、不能确定13、若图G中()是有向的,则称此图为有向图.A、至少有一条边B、每一条边C、有一条边D、有些边14、在二叉树中,若已知先根序遍历和后根序遍历顺序,则()A、能唯一确定一棵二叉树B、不能唯一确定一棵二叉树C、能唯一确定二棵二叉树D、不存在这样的遍历15、冒泡排序是()的排序方法A、稳定B、不稳定C、外部D、选择16、归并排序是()的排序方法A、稳定B、不稳定C、外部D、选择17、对于顺序存储的队列,存储空间大小为n,头指针为F,尾指针为R.若在逻辑上看一个环,则队列中元素的个数为().A、R-FB、n+R-FC、(R-F+1)mod nD、(n+R-F)mod n18、用9个数据构造出的霍夫曼树共有()个结点A、9B、18C、16D、1719、N个结点的顺序查找的平均查找次数为()A、NB、N/2 C(N+1)/2 D、与N无关20、在无向图的邻接链表中,若表结点个数为M,则边数为()A、MB、M+1C、与M无关D、M/221、设输入序列为1,2,3,4,5,6,借助一个栈不可能得到的输出序列是().A、1,2,3,4,5,6B、1,4,3,2,5 ,6C、4,1,3,2,5,6D、1,3,2,5,4 ,622、栈和队列都是().A、散列存储的线性结构B、链式存储的线性结构C、限制存储点的线性结构D、索引存储的非线性结构23、已知完全二叉树有2008个结点,则整个二叉树有()个度为1的结点.A、0B、1C、2D、不确定24、下列排序方法中,最好情况下,时间复杂度最坏的算法是().A、选择排序B、归并排序C、冒泡排序D、直接插入排序25、下列排序方法中,排序所花费时间复杂度最小的算法是___________。
数据结构期末复习题库(215道)
数据结构期末复习1、算法分析的目的是分析算法的效率以求改进,算法分析的两个主要方面是()——[单选题]A 空间复杂性和时间复杂性B 正确性和简明性C 可读性和文档性D 数据复杂性和程序复杂性正确答案:A2、两类存储结构为()——[单选题]A 线性结构和非线性结构B 逻辑结构和非逻辑结构C 顺序结构和链式结构D 逻辑结构和物理结构正确答案:C3、计算机算法指的是解决问题的有限运算序列,它必具备输入、输出和()等五个特性。
——[单选题]A 可行性、可移植性和可扩充性B 可行性、确定性和有穷性C 确定性、有穷性和稳定性D 易读性、稳定性和安全性正确答案:B4、在 C 语言中,有一种适用于不同数据类型构成的数据的结构称为()——[单选题]A 结构体B 数组C 变量D 常量正确答案:A5、在定义数组 int a[10]后,需要访问数组中第 3 个元素,正确的是()——[单选题]A a[0]B a[1]C a[2]D a[3]6、分析以下程序段,其时间复杂度为 T(n)=() for( i =0; i<n;i++)For(j=0;j<i;j++) A[i][j] = 0;——[单选题]A O(n)B O(n^2)C O(n^3)D O(1)正确答案:B7、数据元素之间存在一对多的关系,这种数据间的结构属于()——[单选题]A 集合B 线性结构C 树型结构D 图型结构正确答案:C8、有一个结构体及其变量定义如下: struct date{Int year; int month; intday;}birthday;此时要调用变量中的 year,正确的书写格式是()——[单选题]A yearB birthday.yearC date.yearD struct.year正确答案:B9、在数据结构中,从逻辑上可以把数据结构分成()——[单选题]A 动态结构和静态结构B 紧凑结构和非紧凑结构C 线性结构和非线性结构D 内部结构和外部结构正确答案:C10、分析下面算法(程序段),该算法的时间复杂度 T(n)=() for (i=0;i<n;i++)For (j=0;j<n; j++) A[i][j]=0;——[单选题]A O(n)B O(n^2)C O(n^3)D O(1)11、当定义一个结构体变量时,系统为它分配的内存空间是()——[单选题]A 结构体中一个成员所需的内存容量B 结构体中第一个成员所需的内存容量C 结构体中占内存容量最大者所需的容量D 结构体中各成员所需内存容量之和正确答案:D12、分析以下程序段,其时间复杂度为 T(n)=() x=0;For(i=1;i<n;i++);for(j=1;j<n;j++);For(k=1;k<n;k++); x++;——[单选题]A O(n)B O(n^2)C O(n^3)D O(1)正确答案:A13、有结构体定义及结构体类型数组如下: struct worklist{Int no;Char name[20]; char sex;}person[5];需要给结构体数组中第 2 个变量的 no 成员赋值为 5,正确的写法是()——[单选题]A no=5;B person.no=5;C person[2].no=5;D person[1].no=5;正确答案:D14、分析以下程序段,其时间复杂度为 T(n)=() i=1;While(i<=n) i=3*i;——[单选题]A O(n)B O(n^2)C O(n^3)D O(1)正确答案:D15、线性表是具有 n 个()的有限序列。
数据结构试题集含答案
程序复杂性3、具有线性结构的数据结构是 D ;A. 图B. 树C. 广义表D. 栈4、计算机中的算法指的是解决某一个问题的有限运算序列,它必须具备输入、输出、B等5个特性;A. 可执行性、可移植性和可扩充性B. 可执行性、有穷性和确定性C. 确定性、有穷性和稳定性D. 易读性、稳定性和确定性5、下面程序段的时间复杂度是C ;fori=0;i<m;i++forj=0;j<n;j++aij=ij;A. Om2B. On2C. OmnD. Om+n6、算法是 D ;A. 计算机程序B. 解决问题的计算方法C. 排序算法D. 解决问题的有限运算序列7、某算法的语句执行频度为3n+nlog2n+n2+8,其时间复杂度表示 C ;A. OnB. Onlog2n C. On2 D. Olog2n8、下面程序段的时间复杂度为 C ;i=1;whilei<=ni=i3;A. OnB. O3nC. Olog3n D. On39、数据结构是一门研究非数值计算的程序设计问题中计算机的数据元素以及它们之间的 B 和运算等的学科;A. 结构B. 关系C. 运算D. 算法10、下面程序段的时间复杂度是 C ;i=s=0;whiles<n{i++;s+=i;}A. OnB. On2C. O√nD. On311、抽象数据类型的三个组成部分分别为 A ;A. 数据对象、数据关系和基本操作B. 数据元素、逻辑结构和存储结构C. 数据项、数据元素和数据类型D. 数据元素、数据结构和数据类型12、通常从正确性、易读性、健壮性、高效性等4个方面评价算法的质量,以下解释错误的是 A ;A. 正确性算法应能正确地实现预定的功能B. 易读性算法应易于阅读和理解,以便调试、修改和扩充C. 健壮性当环境发生变化时,算法能适当地做出反应或进行处理,不会产生不需要的运行结果D. 高效性即达到所需要的时间性能13、下列程序段的时间复杂度为 B ;x=n;y=0;whilex>=y+1y+1y=y+1;A. OnB. )(nO C. O1 D. On2二、填空题1、程序段“i=1;whilei<=n i=i2;”的时间复杂度为 Olog2n ;2、数据结构的四种基本类型中,树形结构的元素是一对多关系;三、综合题1、将数量级O1,ON,ON2,ON3,ONLOG2N,OLOG2N,O2N按增长率由小到大排序;答案: O1 < Olog2N < ON < ONlog2N < ON2 < ON3 < O2N第二章线性表一、选择题1、若长度为n的线性表采用顺序存储结构,在其第i个位置插入一个新元素算法的时间复杂度C ;A. Olog2n 1 C. On n22、若一个线性表中最常用的操作是取第i个元素和找第i个元素的前趋元素,则采用A 存储方式最节省时间;A. 顺序表B. 单链表C. 双链表D. 单循环链表3、具有线性结构的数据结构是 D ;A. 图B. 树C. 广义表D. 栈4、在一个长度为n的顺序表中,在第i个元素之前插入一个新元素时,需向后移动 B 个元素;A. n-iB. n-i+1C. n-i-1D. i5、非空的循环单链表head的尾结点p满足 A ;A. p->next==headB. p->next==NULLC. p==NULLD. p==head6、链表不具有的特点是 A ;A. 可随机访问任一元素B. 插入删除不需要移动元素C. 不必事先估计存储空间D. 所需空间与线性表长度成正比7、在双向循环链表中,在p指针所指的结点后插入一个指针q所指向的新结点,修改指针的操作是 C ;A. p->next=q;q->prior=p;p->next->prior=q;q->next=q;B. p->next=q;p->next->prior=q;q->prior=p;q->next=p->next;C. q->prior=p;q->next=p->next;p->next->prior=q;p->next=q;D. q->next=p->next;q->prior=p;p->next=q;p->next=q;8、线性表采用链式存储时,结点的存储地址 C ;A. 必须是连续的B. 必须是不连续的C. 连续与否均可D. 和头结点的存储地址相连续9、在一个长度为n的顺序表中删除第i个元素,需要向前移动 A 个元素;A. n-iB. n-i+1C. n-i-1D. i+110、线性表是n个 C的有限序列;A. 表元素B. 字符C. 数据元素D. 数据项11、从表中任一结点出发,都能扫描整个表的是 C ;A. 单链表B. 顺序表C. 循环链表D. 静态链表12、在具有n个结点的单链表上查找值为x的元素时,其时间复杂度为 A ;A. OnB. O1C. On2D. On-113、线性表L=a1,a2,……,an,下列说法正确的是 D ;A. 每个元素都有一个直接前驱和一个直接后继B. 线性表中至少要有一个元素C. 表中诸元素的排列顺序必须是由小到大或由大到小D. 除第一个和最后一个元素外,其余每个元素都由一个且仅有一个直接前驱和直接后继14、一个顺序表的第一个元素的存储地址是90,每个元素的长度为2,则第6个元素的存储地址是 B ;A. 98B. 100C. 102D. 10615、在线性表的下列存储结构中,读取元素花费的时间最少的是 D ;A. 单链表B. 双链表C. 循环链表D. 顺序表16、在一个单链表中,若删除p所指向结点的后续结点,则执行 A ;A. p->next=p->next->next;B. p=p->next;p->next=p->next->next;C. p =p->next;D. p=p->next->next;17、将长度为n的单链表连接在长度为m的单链表之后的算法的时间复杂度为 C ;A. O1B. OnC. OmD. Om+n18、线性表的顺序存储结构是一种 A 存储结构;A. 随机存取B. 顺序存取C. 索引存取D. 散列存取19、顺序表中,插入一个元素所需移动的元素平均数是 D ;A. n-1/2B. nC. n+1D. n/210、循环链表的主要优点是 D ;A. 不再需要头指针B. 已知某结点位置后能容易找到其直接前驱C. 在进行插入、删除运算时能保证链表不断开D. 在表中任一结点出发都能扫描整个链表11、不带头结点的单链表head为空的判定条件是 A ;A. head==NULLB. head->next==NULL 带头结点判定条件C. head->next==head 循环链表判定条件D. head=NULL12、在下列对顺序表进行的操作中,算法时间复杂度为O1的是 A ;A. 访问第i个元素的前驱1<ni≤B. 在第i个元素之后插入一个新元素n≤1≤iC. 删除第i个元素n≤i1≤D. 对顺序表中元素进行排序13、已知指针p和q分别指向某单链表中第一个结点和最后一个结点;假设指针s指向另一个单链表中某个结点,则在s所指结点之后插入上述链表应执行的语句为 A ;A. q->next=s->next;s->next=p;B. s->next=p;q->next=s->next;C. p->next=s->next;s->next=q;D. s->next=q;p->next=s->next;14、在以下的叙述中,正确的是 C ;A. 线性表的顺序存储结构优于链表存储结构B. 线性表的顺序存储结构适用于频繁插入/删除数据元素的情况C. 线性表的链表存储结构适用于频繁插入/删除数据元素的情况D. 线性表的链表存储结构优于顺序存储结构15、在表长为n的顺序表中,当在任何位置删除一个元素的概率相同时,删除一个元素所需移动的平均个数为 A ;A. n-1/2B. n/2C. n+1/2D. n16、在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入一个结点s,则执行 C ;A. s->next=p->next; p->next=s;B. p->next=s->next;s->next=p;C. q->next=s;s->next=p;D. p->next=s;s->next=q;17、在单链表中,指针p指向元素为x的结点,实现删除x的后继的语句是 B ;A. p=p->next;B. p->next=p->next->next;C. p->next=p;D. p=p->next->next;18、在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next==head,则 D ;A. p指向头结点B. p指向尾结点C. p的直接后继是头结点D. p的直接后继是尾结点1、设单链表的结点结构为data,next;已知指针p指向单链表中的结点,q指向新结点,欲将q插入到p结点之后,则需要执行的语句:q->next=p->next ; p->next = q ;二、填空题答案:q->next=p->next p->next=q2、线性表的逻辑结构是线性结构 ,其所含元素的个数称为线性表的长度;答案:线性结构长度3、写出带头结点的双向循环链表L为空表的条件 ;答案:L->prior==L->next==L4、带头结点的单链表head为空的条件是 ;答案:head->next==NULL5、在一个单链表中删除p所指结点的后继结点时,应执行以下操作:q = p->next;p->next= _q->next ___;三、判断题1、单链表不是一种随机存储结构;对2、在具有头结点的单链表中,头指针指向链表的第一个数据结点;错3、用循环单链表表示的链队列中,可以不设队头指针,仅在队尾设置队尾指针;对4、顺序存储方式只能用于存储线性结构;错5、在线性表的顺序存储结构中,逻辑上相邻的两个元素但是在物理位置上不一定是相邻的;错6、链式存储的线性表可以随机存取;错四、程序分析填空题1、函数GetElem实现返回单链表的第i个元素,请在空格处将算法补充完整;int GetElemLinkList L,int i,Elemtype e{LinkList p;int j;p=L->next;j=1;whilep&&j<i{1 ;++j;}ifp||j>i return ERROR;e= 2 ;return OK;}答案:1p=p->next 2p->data2、函数实现单链表的插入算法,请在空格处将算法补充完整;int ListInsertLinkList L,int i,ElemType e{LNode p,s;int j;p=L;j=0;whilep=NULL&&j<i-1{ p=p->next;j++;}ifp==NULL||j>i-1 return ERROR;s=LNode mallocsizeofLNode;s->data=e;1 ;2 ;return OK;}/ListInsert/答案:1s->next=p->next 2p->next=s3、函数ListDelete_sq实现顺序表删除算法,请在空格处将算法补充完整;int ListDelete_sqSqlist L,int i{int k;ifi<1||i>L->length return ERROR;fork=i-1;k<L->length-1;k++L->slistk= 1 ;2 ;return OK;}答案:1L->slistk+1 2 --L->Length4、函数实现单链表的删除算法,请在空格处将算法补充完整;int ListDeleteLinkList L,int i,ElemType s{LNode p,q;int j;p=L;j=0;while 1 &&j<i-1{p=p->next;j++;}ifp->next==NULL||j>i-1 return ERROR;q=p->next;2 ;s=q->data;freeq;return OK;}/listDelete/答案:1p->next=NULL 2p->next=q->next5、写出算法的功能;int Lhead{node head;int n=0;node p;p=head;whilep=NULL{ p=p->next;n++;}returnn;}答案:求单链表head的长度五、综合题1、编写算法,实现带头结点单链表的逆置算法;答案:void inventLnode head{Lnode p,q,r;ifhead->next return ERROR;p=head->next; q=p->next; p->next =NULL;whileq{ r=q->next;q->next=p;head->next=q;p=q;q=r;}}试编写一个算法,将一个顺序表逆置,并使用最少的辅助存储空间实现;答案:typedef struct {ElemType elem;int length;}Sqlist;Invert_listSqlist L/将顺序表进行逆置/{ int i; ElemType t;fori=0;i<L->length-1/2;i++{t=L->elemi;L->elem i= L->elem L->length-i-1;L->elem L->length -i-1=t;}/for/}/invert_list/2、有两个循环链表,链头指针分别为L1和L2,要求写出算法将L2链表链到L1链表之后,且连接后仍保持循环链表形式;答案:void mergeLnode L1, Lnode L2{Lnode p,q ;whilep->next=L1p=p->next;whileq->next=L2q=q->next;q->next=L1; p->next =L2;}3、设一个带头结点的单向链表的头指针为head,设计算法,将链表的记录,按照data 域的值递增排序;答案:void assendingLnode head{Lnode p,q , r, s;p=head->next; q=p->next; p->next=NULL;whileq{r=q; q=q->next;ifr->data<=p->data{r->next=p; head->next=r; p=r; }else{whilep && r->data>p->data{s=p; p=p->next; }r->next=p; s->next=r;}p=head->next; }}4、编写算法,将一个头指针为head不带头结点的单链表改造为一个单向循环链表,并分析算法的时间复杂度;答案:void linklist_cLnode head{Lnode p; p=head;ifp return ERROR;whilep->next=NULLp=p->next;p->next=head;}设单链表的长度数据结点数为N,则该算法的时间主要花费在查找链表最后一个结点上算法中的while循环,所以该算法的时间复杂度为ON;5、已知head为带头结点的单循环链表的头指针,链表中的数据元素依次为a1,a2,a3,a4,…,an,A为指向空的顺序表的指针;阅读以下程序段,并回答问题:1写出执行下列程序段后的顺序表A中的数据元素;2简要叙述该程序段的功能;ifhead->next=head{p=head->next;A->length=0;whilep->next=head{p=p->next;A->dataA->length ++=p->data;ifp->next=headp=p->next;}}答案:1 a2, a4, …,2将循环单链表中偶数结点位置的元素值写入顺序表A6、设顺序表va中的数据元数递增有序;试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性;答案:void Insert_sqSqlist va, ElemType x{int i, j, n;n=lengthva;ifx>=van-1van=x;else{i=0;whilex>vai i++;forj=n-1;j>=I;j--vaj+1=vaj;vai=x; }n++;}试编写一个算法,在一个递增有序排列的单链表中插入一个新结点x,并保持有序;struct Linknode{int data ;struct Linknode next ;};typedef struct Linknode Link;Link insertLink head{int i,e,j ;Link pointer,s;printf"\nplease input the elem of you want insert:";scanf"%d",&e;pointer= head;while pointer->next && e>=pointer->next->data/在链表中确定插入的位置/pointer=pointer->next;if pointer->next{s=Linkmallocsizeofstruct Linknode;s->data=e;s->next=NULL;pointer->next=s;}else {s=Linkmallocsizeofstruct Linknode;s->data=e; /为插入的结点建立链接关系/s->next=pointer->next;pointer->next=s;}/if/return head;}/LinkList_insert/7、假设线性表采用顺序存储结构,表中元素值为整型;阅读算法f2,设顺序表L=3,7,3,2,1,1,8,7,3,写出执行算法f2后的线性表L的数据元素,并描述该算法的功能;void f2SeqList L{int i,j,k;k=0;fori=0;i<L->length;i++{forj=0;j<k && L->datai=L->dataj;j++;ifj==k{ifk=iL->datak=L->datai;k++;}}L->length=k;}答案:3,7,2,1,8 删除顺序表中重复的元素8、已知线性表中的元素以值递增有序排列,并以单链表作存储结构;试写一算法,删除表中所有大于x且小于y的元素若表中存在这样的元素同时释放被删除结点空间; 答案:void Delete_listLnode head, ElemType x, ElemType y{Lnode p, q;ifhead return ERROR;p=head; q=p;whilep{ifp->data>x && p->data<y}i++;ifp==head{head=p->next; freep;p=head; q=p; }else{q->next=p->next; freep;p=q->next; }else{q=p; p=p->next; }}}9、在带头结点的循环链表L中,结点的数据元素为整型,且按值递增有序存放;给定两个整数a和b,且a<b,编写算法删除链表L中元素值大于a且小于b的所有结点;void Delete_listLnode head, ElemType a, ElemType b{Lnode p, q;ifhead->next return ERROR;p=head->next; q=p;whilep->next=head{ifp->data>x && p->data<y}i++;ifp==head{head=p->next; freep;p=head; q=p; }else{q->next=p->next; freep;p=q->next; }else{q=p; p=p->next; }}}试编写一个算法,将两个元素值递减排列的顺序表合并为一个非递增的顺序表;typedef struct {ElemType elem;int length;}Sqlist;Merge_listSqlist A, Sqlist B, Sqlist C{int j=0, k=0, i=0; C->length= A->length+ B->length;whilei<A->length&&j<B->lengthifA->elemi>B->elemj {C->elemk= A->elemi; i++; k++;} else { C->elemk= B->elemj; j++; k++;}whilei< A->length { C->elemk= A->elemi; i++; k++;}whilej< B->length { C->elemk= B->elemj; j++; k++;}}第三章栈和队列一、选择题1、一个栈的输入序列为:a,b,c,d,e,则栈的不可能输出的序列是 C ;A. a,b,c,d,eB. d,e,c,b,aC. d,c,e,a,bD. e,d,c,b,a2、判断一个循环队列Q最多n个元素为满的条件是 C ;A. Q->rear==Q->frontB. Q->rear==Q->front+1C. Q->front==Q->rear+1%nD. Q->front==Q->rear-1%n3、设计一个判别表达式中括号是否配对的算法,采用 D 数据结构最佳;A. 顺序表B. 链表C. 队列D. 栈4、带头结点的单链表head为空的判定条件是 B ;A. head==NULLB. head->next==NULLC. head->next=NULLD. head=NULL5、一个栈的输入序列为:1,2,3,4,则栈的不可能输出的序列是 D ;A. 1243B. 2134C. 1432D. 4312E. 32146、若用一个大小为6的数组来实现循环队列,且当rear和front的值分别为0,3;当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为B ;A. 1和5B. 2和4C. 4和2D. 5和17、队列的插入操作是在 A ;A. 队尾B. 队头C. 队列任意位置D. 队头元素后8、循环队列的队头和队尾指针分别为front和rear,则判断循环队列为空的条件是A ;A. front==rearB. front==0C. rear==0D. front=rear+19、一个顺序栈S,其栈顶指针为top,则将元素e入栈的操作是 A ;A. S->top=e;S->top++;B. S->top++;S->top=e;C. S->top=eD. S->top=e;10、表达式ab+c-d的后缀表达式是B ;A. abcd+-B. abc+d-C. abc+d-D. -+abcd11、将递归算法转换成对应的非递归算法时,通常需要使用 B 来保存中间结果;A. 队列B. 栈C. 链表D. 树12、栈的插入和删除操作在 B ;A. 栈底B. 栈顶C. 任意位置D. 指定位置13、五节车厢以编号1,2,3,4,5顺序进入铁路调度站栈,可以得到 C 的编组;A. 3,4,5,1,2B. 2,4,1,3,5C. 3,5,4,2,1D. 1,3,5,2,414、判定一个顺序栈S栈空间大小为n为空的条件是 A ;A. S->top==0B. S->top=0C. S->top==nD. S->top=n15、在一个链队列中,front和rear分别为头指针和尾指针,则插入一个结点s的操作为C ;A. front=front->nextB. s->next=rear;rear=sC. rear->next=s;rear=s;D. s->next=front;front=s;16、一个队列的入队序列是1,2,3,4,则队列的出队序列是 A ;A. 1,2,3,4B. 4,3,2,1C. 1,4,3,2D. 3,4,1,217、依次在初始为空的队列中插入元素a,b,c,d以后,紧接着做了两次删除操作,此时的队头元素是 C ;A. aB. bC. cD. d18、正常情况下,删除非空的顺序存储结构的堆栈的栈顶元素,栈顶指针top的变化是D ;A. top不变B. top=0C. top=top+1D. top=top-119、判断一个循环队列Q空间大小为M为空的条件是 A ;A. Q->front==Q->rearB. Q->rear-Q->front-1==MC. Q->front+1=Q->rearD. Q->rear+1=Q->front20、设计一个判别表达式中左右括号是否配对出现的算法,采用 C 数据结构最佳;A. 线性表的顺序存储结构B. 队列C. 栈D. 线性表的链式存储结构21、当用大小为N的数组存储顺序循环队列时,该队列的最大长度为 C ;A. NB. N+1C. N-1D. N-2解析:队列的头指针指向的是第一个元素的前一个结点,而不是指向第一个元素,一次队列的头指针要占用一个结点长度;22、队列的删除操作是在 A ;A. 队首B. 队尾C. 队前D. 队后23、若让元素1,2,3依次进栈,则出栈次序不可能是 C ;A. 3,2,1B. 2,1,3C. 3,1,2D. 1,3,224、循环队列用数组A0,m-1存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是 A ;A. rear-front+m%mB. rear-front+1C. rear-front-1D. rear-front25、在解决计算机主机和打印机之间速度不匹配问题时,通常设置一个打印数据缓冲区,主机将要输出的数据依次写入该缓冲区,而打印机则从该缓冲区中取走数据打印;该缓冲区应该是一个 B 结构;A. 堆栈B. 队列C. 数组D. 线性表解析:先进入缓冲区的文件先被打印,选择先进先出的结构,即队列;26、栈和队列都是 C ;A. 链式存储的线性结构B. 链式存储的非线性结构C. 限制存取点的线性结构D. 限制存取点的非线性结构解析:栈是只允许在栈顶进行插入和删除操作的线性表,队列是只允许在队头进行删除,在队尾进行删除操作的线性表27、在一个链队列中,假定front和rear分别为队头指针和队尾指针,删除一个结点的操作是 A ;A. front=front->nextB. rear= rear->nextC. rear->next=frontD. front->next=rear28、队和栈的主要区别是 D ;A. 逻辑结构不同B.存储结构不同C. 所包含的运算个数不同D. 限定插入和删除的位置不同二、填空题1、设栈S和队列Q的初始状态为空,元素e1,e2,e3,e4,e5,e6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出队的序列是e2,e4,e3,e6,e5,e1,则栈的容量至少应该是 ;答案:32、一个循环队列Q的存储空间大小为M,其队头和队尾指针分别为front和rear,则循环队列中元素的个数为 ;答案:rear-front+M%M3、在具有n个元素的循环队列中,队满时具有个元素;答案:n-14、设循环队列的容量为70,现经过一系列的入队和出队操作后,front为20,rear为11,则队列中元素的个数为 ;答案:615、已知循环队列的存储空间大小为20,且当前队列的头指针和尾指针的值分别为8和3,且该队列的当前的长度为 ;答案:15三、判断题1、栈和队列都是受限的线性结构;对2、在单链表中,要访问某个结点,只要知道该结点的地址即可;因此,单链表是一种随机存取结构;错3、以链表作为栈的存储结构,出栈操作必须判别栈空的情况;对四、程序分析填空题1、已知栈的基本操作函数:int InitStackSqStack S; 连接 B. 求子串 C. 模式匹配D. 判断子串2、已知串S=’aaab’,则next数组值为A ;A. 0123B. 1123C. 1231D. 12113、串与普通的线性表相比较,它的特殊性体现在 C ;A. 顺序的存储结构B. 链式存储结构C. 数据元素是一个字符D. 数据元素任意4、设串长为n,模式串长为m,则KMP算法所需的附加空间为 A ;A. OmB. OnC. OmnD. Onlogm25、空串和空格串 B ;A. 相同B. 不相同C. 可能相同D. 无法确定6、与线性表相比,串的插入和删除操作的特点是 A ;A. 通常以串整体作为操作对象B. 需要更多的辅助空间C. 算法的时间复杂度较高D. 涉及移动的元素更多7、设SUBSTRS,i,k是求S中从第i个字符开始的连续k个字符组成的子串的操作,则对于S=’Beijing&Nanjing’,SUBSTRS,4,5= B ;A. ‘ijing’B. ‘jing&’C.‘ingNa’D. ‘ing&N’二、判断题对1、造成简单模式匹配算法BF算法执行效率低的原因是有回溯存在;对2、KMP算法的最大特点是指示主串的指针不需要回溯;对3、完全二叉树某结点有右子树,则必然有左子树;三、填空题1、求子串在主串中首次出现的位置的运算称为 ;答案:模式匹配2、设s=’I︺AM︺A︺TEACHER’,其长度是 ;答案:143、两个串相等的充分必要条件是两个串的长度相等且 ;答案:对应位置的字符也相同四、程序填空题1、函数kmp实现串的模式匹配,请在空格处将算法补充完整;int kmpsqstring s,sqstring t,int start,int next{int i=start-1,j=0;whilei<s->len&&j<t->lenifj==-1||s->datai==t->dataj{i++;j++;}else j= nextj ;ifj>=t->lenreturn i-t->len ;elsereturn-1;}2、函数实现串的模式匹配算法,请在空格处将算法补充完整;int index_bfsqstrings,sqstring t,int start{int i=start-1,j=0;whilei<s->len&&j<t->lenifs->datai==t->dataj{i++;j++;}else{i= i-j+1 ;j=0;}ifj>=t->lenreturn i-t->len+1 ;elsereturn -1;}}/listDelete/3、写出下面算法的功能;int functionSqString s1,SqString s2{int i;fori=0;i<s1->length&&i<s1->length;i++ifs->datai=s2->dataireturn s1->datai-s2->datai;return s1->length-s2->length;}答案:.串比较算法4、写出算法的功能;int funsqstring s,sqstring t,int start{int i=start-1,j=0;whilei<s->len&&j<t->lenifs->datai==t->dataj{i++;j++;}else{i=i-j+1;j=0;}ifj>=t->lenreturn i-t->len+1;elsereturn -1;}答案:串的模式匹配算法第五章数组和广义表一、选择题1、设广义表L=a,b,c,则L的长度和深度分别为C ;A. 1和1B. 1和3C. 1和2D. 2和32、广义表a,a的表尾是 B ;A. aB. aC.D. a3、稀疏矩阵的常见压缩存储方法有 C 两种;A. 二维数组和三维数组B. 三元组和散列表C. 三元组和十字链表D. 散列表和十字链表4、一个非空广义表的表头 D ;A. 不可能是子表B. 只能是子表C. 只能是原子D. 可以是子表或原子5、数组A0..5,0..6的每个元素占5个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A55的地址是 A ;A. 1175B. 1180C. 1205D. 12106、广义表G=a,bc,d,e,f,g 的长度是 A ;A. 3B. 4C. 7D. 87、采用稀疏矩阵的三元组表形式进行压缩存储,若要完成对三元组表进行转置,只要将行和列对换,这种说法 B ;A. 正确B. 错误C. 无法确定D. 以上均不对8、广义表a,b,c 的表尾是 B ;A. b,cB. b,cC. cD. c9、常对数组进行两种基本操作是 C ;A. 建立和删除B. 索引和修改C. 查找和修改D. 查找与索引10、对一些特殊矩阵采用压缩存储的目的主要是为了 D ;A. 表达变得简单B. 对矩阵元素的存取变得简单C. 去掉矩阵中的多余元素D. 减少不必要的存储空间的开销11、设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一个元素,其存储地址为1,每元素占1个地址空间,则a85的地址为 B ;A. 13B. 33C. 18D. 4012、设矩阵A 是一个对称矩阵,为了节省存储,将其下三角部分按行序存放在一维数组B1,nn-1/2中,对下三角部分中任一元素ai,ji>=j,在一维数组B 的下标位置k 的值是A ;A. ii-1/2+j-1B. ii-1/2+jC. ii+1/2+j-1D. ii+1/2+j13、广义表A=a,a 的表头是 B ;A. aB. aC. bD. a14、稀疏矩阵一般的压缩存储方法有两种,即 C ;A. 二维数组和三维数组B. 三元组和散列C. 三元组和十字链表D. 散列和十字链表15、假设以三元组表表示稀疏矩阵,则与如图所示三元组表对应的4×5的稀疏矩阵是注:矩阵的行列下标均从1开始 B ;A. ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--00405000000000706080B. ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--00000004053000706080C. ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--00405000073000006080D. ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--00000304050000706080 16、以下有关广义表的表述中,正确的是 A ;A. 由0个或多个原子或子表构成的有限序列B. 至少有一个元素是子表C. 不能递归定义D. 不能为空表17、对广义表L=a,b,c,d,e,f 执行headtailheadtailL 操作的结果是 D ;A. 的B. eC. eD. e,f二、判断题错 1、广义表中原子个数即为广义表的长度;错 2、一个稀疏矩阵采用三元组表示,若把三元组中有关行下标与列下标的值互换,并把mu 和nu 的值进行互换,则完成了矩阵转置;对 3、稀疏矩阵压缩存储后,必会失去随机存取功能;错 4、广义表的长度是指广义表中括号嵌套的层数;对 5、广义表是一种多层次的数据结构,其元素可以是单原子也可以是子表;三、填空题1、已知二维数组Amn 采用行序为主方式存储,每个元素占k 个存储单元,并且第一个元素的存储地址是LOCA00,则Aij 的地址是LocA00+iN+jk ;2、广义表运算式HEADTAILa,b,c,x,y,z 的结果是:x,y,z ;3、二维数组,可以按照 按行序为主和按列序为主 两种不同的存储方式;4、稀疏矩阵的压缩存储方式有: 三元组表 和 十字链表法 ;四、综合题1、现有一个稀疏矩阵,请给出它的三元组表;答案:第六章 树一、选择题1、二叉树的深度为k,则二叉树最多有 C 个结点;A. 2kB. 2k-1C. 2k -1D. 2k-12、用顺序存储的方法,将完全二叉树中所有结点按层逐个从左到右的顺序存放在一维数组R1..N中,若结点Ri有右孩子,则其右孩子是 B ;A. R2i-1B. R2i+1C. R2iD. R2/i3、设a,b为一棵二叉树上的两个结点,在中序遍历时,a在b前面的条件是 B ;A. a在b的右方B. a在b的左方C. a是b的祖先D. a是b的子孙4、设一棵二叉树的中序遍历序列:badce,后序遍历序列:bdeca,则二叉树先序遍历序列为 D ;A. adbceB. decabC. debacD. abcde5、在一棵具有5层的满二叉树中结点总数为 A ;A. 31B. 32C. 33D. 166、由二叉树的前序和后序遍历序列 B 惟一确定这棵二叉树;A. 能B. 不能解析:二叉树的前序和中序遍历序列可以唯一确定一颗二叉树;二叉树的中序和后序遍历序列可以唯一确定一颗二叉树;而二叉树的前序和后序遍历序列不能惟一确定一棵二叉树7、某二叉树的中序序列为ABCDEFG,后序序列为BDCAFGE,则其左子树中结点数目为C ;A. 3B. 2C. 4D. 58、若以{4,5,6,7,8}作为权值构造哈夫曼树,则该树的带权路径长度为 C ;A. 67B. 68C. 69D. 709、将一棵有100个结点的完全二叉树从根这一层开始,每一层上从左到右依次对结点进行编号,根结点的编号为1,则编号为49的结点的左孩子编号为 A ;A. 98B. 99C. 50D. 4810、表达式ab+c-d的后缀表达式是 B ;A. abcd+-B. abc+d-C. abc+d-D. -+abcd11、对某二叉树进行先序遍历的结果为ABDEFC,中序遍历的结果为DBFEAC,则后序遍历的结果是 B ;A. DBFEACB. DFEBCAC. BDFECAD. BDEFAC12、树最适合用来表示 C ;A. 有序数据元素B. 无序数据元素C. 元素之间具有分支层次关系的数据D. 元素之间无联系的数据13、表达式AB+C/D-E+F的后缀表达式是C ;A. AB+C/D-E+FB. ABC+D/E-F+C. ABC+DE-F+/D. ABCDED+/-+14、在线索二叉树中,t所指结点没有左子树的充要条件是 B ;A. t->left==NULLB. t->ltag==1C. t->ltag==1&&t->left==NULLD. 以上都不对15、任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序 A ;A. 不发生改变B. 发生改变C. 不能确定D. 以上都不对16、假定在一棵二叉树中,度为2的结点数为15,度为1的结点数为30,则叶子结点数为B个;A. 15B. 16C. 17D. 4717、在下列情况中,可称为二叉树的是 C ;。
数据结构试题及答案(十套)
数据结构试题及答案(十套)数据结构试题及答案(十套)一、选择题1. 数据结构是指()。
A. 存储数据的方式B. 数据的逻辑结构和物理结构C. 数据的存储结构和存储方式D. 数据的逻辑结构、存储结构和存储方式答案:D2. 在数据结构中,线性表的存储方式包括()。
A. 顺序存储和链式存储B. 数组存储和链表存储C. 顺序存储、链表存储和索引存储D. 顺序存储、链表存储和树形存储答案:A3. 栈是一种()的数据结构。
A. 先进先出B. 先进后出C. 后进先出D. 后进后出答案:C4. 队列是一种()的数据结构。
A. 先进先出B. 先进后出C. 后进先出D. 后进后出答案:A5. 二叉树中,度为0的节点称为()。
A. 叶子节点B. 根节点C. 中间节点D. 子节点答案:A6. 以下哪个排序算法是稳定的?A. 快速排序B. 选择排序C. 插入排序D. 希尔排序答案:C7. 图中表示顶点之间关系的边的数量称为()。
A. 顶点度数B. 边数C. 路径数D. 网络答案:B8. 哈希表通过()来实现高效的查找操作。
A. 散列函数B. 排序算法C. 遍历操作D. 顺序存储答案:A9. 平衡二叉树是一种具有左右子树高度差不超过()的二叉树。
A. 0B. 1C. 2D. 3答案:B10. 在链表中,删除节点的操作时间复杂度是()。
A. O(1)B. O(logn)C. O(n)D. O(nlogn)答案:A二、填空题1. 在顺序存储结构中,元素之间的逻辑关系由()表示。
答案:下标2. 二叉查找树的中序遍历结果是一个()序列。
答案:递增3. 哈希表通过散列函数将关键字映射到()上。
答案:地址4. 图的邻接表中,每个顶点的所有邻接点链接成一个()。
答案:链表5. 位运算符中的左移和右移运算都是对二进制数进行()操作。
答案:移位三、解答题1. 简要介绍顺序存储和链式存储这两种线性表的存储方式,并比较它们的优缺点。
答案:顺序存储是将元素按照逻辑顺序依次存储在一块连续的存储空间中,通过元素的下标可以直接访问到元素。
十套数据结构试题及答案
数据构造试卷〔一〕一、单项选择题〔每题 2 分,共20分〕1.栈和队列的共同特点是( a )。
A.只允许在端点处插入和删除元素B.都是先进后出C.都是先进先出D.没有共同点2.用链接方式存储的队列,在进展插入运算时( d ).A. 仅修改头指针B. 头、尾指针都要修改C. 仅修改尾指针D.头、尾指针可能都要修改3.以下数据构造中哪一个是非线性构造?( d )A. 队列B. 栈C. 线性表D. 二叉树4.设有一个二维数组A[m][n],假设A[0][0]存放位置在644(10),A[2][2]存放位置在676(10),每个元素占一个空间,问A[3][3](10)存放在什么位置?脚注(10)表示用10进制表示。
cA.688 B.678 C.692 D.6965.树最适合用来表示( c )。
A.有序数据元素B.无序数据元素C.元素之间具有分支层次关系的数据D.元素之间无联系的数据6.二叉树的第k层的结点数最多为( d ).A.2k-1 B.2K+1 C.2K-1 D. 2k-17.假设有18个元素的有序表存放在一维数组A[19]中,第一个元素放A[1]中,现进展二分查找,那么查找A[3]的比拟序列的下标依次为( c d)A. 1,2,3B. 9,5,2,3C. 9,5,3D. 9,4,2,38.对n个记录的文件进展快速排序,所需要的辅助存储空间大致为 cA. O〔1〕B. O〔n〕C. O〔1og2n〕D. O〔n2〕9.对于线性表〔7,34,55,25,64,46,20,10〕进展散列存储时,假设选用H〔K〕=K %9作为散列函数,那么散列地址为1的元素有〔 c d〕个,A.1 B.2 C.3 D.410.设有6个结点的无向图,该图至少应有( a )条边才能确保是一个连通图。
二、填空题〔每空1分,共26分〕1.通常从四个方面评价算法的质量:____时间正确性_____、____占用内存_易读性____、____复杂度__强壮性___和_____准确度_ 高效率___。
(完整版)数据结构练习题及参考答案
数据结构练习题第一部分绪论一、单选题1. 一个数组元素a[i]与________的表示等价。
A、 *(a+i)B、 a+iC、 *a+iD、 &a+i2. 对于两个函数,若函数名相同,但只是____________不同则不是重载函数。
A、参数类型B、参数个数C、函数类型3. 若需要利用形参直接访问实参,则应把形参变量说明为________参数A、指针B、引用C、值4. 下面程序段的时间复杂度为____________。
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)5. 执行下面程序段时,执行S语句的次数为____________。
for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)S;A、 n2B、 n2/2C、 n(n+1)D、 n(n+1)/26. 下面算法的时间复杂度为____________。
int f( unsigned int n ) {if ( n==0 || n==1 ) return 1; else return n*f(n-1);}A、 O(1)B、 O(n)C、 O(n2)D、 O(n!)二、填空题1. 数据的逻辑结构被分为__________、_________、__________和__________四种。
2. 数据的存储结构被分为__________、_________、__________和__________四种。
3. 在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着________、________和________的联系。
4. 一种抽象数据类型包括__________和__________两个部分。
5. 当一个形参类型的长度较大时,应最好说明为_________,以节省参数值的传输时间和存储参数的空间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
知识点:01.绪论02.顺序表03.链表04.栈05.链队列06.循环队列07.串08.数组的顺序表示09.稀疏矩阵10.广义表11.二叉树的基本概念12.二叉树遍历、二叉树性质13.树、树与二叉树的转换14.赫夫曼树15.图的定义、图的存储16.图的遍历17.图的生成树18.静态查找(顺序表的查找、有序表的查找)19.动态查找(二叉排序树、平衡树、B树)20.哈希查找21.插入排序(直接插入、折半插入、2路插入、希尔排序)22.选择排序(简单选择、树形选择、堆排序)23.快速排序、归并排序101A1(1).数据的逻辑结构是(A)。
A.数据的组织形式B.数据的存储形式C.数据的表示形式D.数据的实现形式101A1(2).组成数据的基本单位是(C)。
A.数据项B.数据类型C.数据元素D.数据变量101B1(3).与顺序存储结构相比,链式存储结构的存储密度(B)。
A.大B.小C.相同D.以上都不对101B2(4).对于存储同样一组数据元素而言,(D)。
A.顺序存储结构比链接结构多占空间B.在顺序结构中查找元素的速度比在链接结构中查找要快C.与链接结构相比,顺序结构便于安排数据元素D.顺序结构占用整块空间而链接结构不要求整块空间101B2(5).下面程序的时间复杂度为(B)。
x=0;for(i=1;i<n;i++)for(j=i+1;j<=n;j++)x++;A.O(n)B.O(n2)C.O(1)D.O(n)101B2(6).下面程序的时间复杂度为(C)。
for(i=0;i<m;i++)for(j=0;j<n;j++)A[i][j]=i*j;A.O(m2)B.O(n2)C.O(m×n)D.O(m+n)101C2(7).下面程序段的执行次数为(B)。
for(i=0;i<n-1;i++)for(j=0;j>i;j++)state;A.n(n+1)/2 B.(n-1)(n+2)/2C.n(n+1)/2 D.(n-1)(n+2)101D3(8).下面程序的时间复杂度为(A)。
for(i=0;i<m;i++)for(j=0;j<t;j++)c[i][j]=0;for(i=0;i<m;i++)for(j=0;j<t;j++)for(k=0;k<n;k++)c[i][j]=c[i][j]+a[i][k]*b[k][j];A.O(m×n×t)B.O(m+n+t)C.O(m+n×t)D.O(m×t+n)102A1(9).顺序表的特点是(B)。
A.表中元素的个数为表长B.按顺序方式存储数据元素C.逻辑结构中相邻的结点在存储结构中仍相邻D.按表中元素的次序存储102C2(10).设顺序表共有n个元素,用数组elem存储,实现在第i个元素之前插入一个元素e的操作,其主要语句为(D)。
A.FOR j=n DOWNTO i DO elem[j]=elem[j+1];elem[i]=e;B.FOR j=i TO n DO elem[j]=elem[j+1];elem[i]=e;C.FOR j=i TO n DO elem[j+1]=elem[j];elem[i]=e;D.FOR j=n DOWNTO i DO elem[j+1]=elem[j];elem[i]=e;102D2(11).顺序表有5个元素,设在任何位置上插入元素是等概率的,则在该表中插入一个元素时所需移动元素的平均次数为(C)。
A.3 B.2 C.2.5 D.5102D2(12).设顺序表有9个元素,则在第3个元素前插入一个元素所需移动元素的个数为(C)。
A.9 B.4.5 C.7 D.6102D3(13).设顺序表有19个元素,第一个元素的地址为200,且每个元素占3个字节,则第14个元素的存储地址为(B)。
A.236 B.239C.242 D.245102D2(14).设顺序表的第5个元素的存储地址为200,且每个元素占一个存储单元,则第14个元素的存储地址为(B)。
A.208 B.209C.210 D.214103D3(15).设p为指向双向循环链表中某个结点的指针,p所指向的结点的两个链域分别用p->llink 和p->rlink表示,则下列等式中(D)成立。
A.p=p->llink B.p=p->rlink C.p=p->llink->llink D.p=p->llink->rlink103A1(16).线性表采用链式存储时,其地址(D)。
A.必须是连续的B.一定是不连续的C.部分地址必须是连续的D.连续与否均可以103B1(17).线性表是(A)。
A.一个有限序列,可以为空B.一个有限序列,不可以为空C.一个无限序列,可以为空D.一个无限序列,不可以为空103B1(18).链式存储的线性表中的指针指向其(B)。
A.前趋结点B.后继结点C.物理前趋D.物理后继103C2(19).设在链式存储的线性表中,设结点结构为p结点后插入一个结点q的关键步骤为(A)。
A.q->link=p->link;p->link=q;B.p->link=q->link;p->link=q;C.q->link=p->link;q->link=p;D.p->link=q->link;q->link=p;103C3(20).设有指针head指向的带表头结点的单链表,现将指针p指向的结点插入表中,使之成为第一个结点,其操作是(A)(其中,p->next、head->next分别表示p、head所指结点的链域)。
A.p->next=head->next;head->next=p;B.p->next=head->next;head=p;C.p->next=head;head=p;D.p->next=head;p= head;104A1(21).在栈中,下列说法正确的是(A)。
A.每次插入总是在栈顶,每次删除也总是在栈顶。
B.每次插入总是在栈顶,每次删除总是在栈底。
C.每次插入总是在栈底,每次删除总是在栈顶。
D.每次插入总是在栈底,每次删除也总是在栈底。
104B2(22).设有一个栈,按A、B、C的顺序进栈,则下列(C)为不可能的出栈序列。
A.ABC B.CBA C.CAB D.ACB104B2(23).设有一个栈,按A、B、C、D的顺序进栈,则下列(D)为可能的出栈序列。
A.DCAB B.CDAB C.DBAC D.ACDB104A2(24).顺序栈的上溢是指(B)。
A.栈满时作退栈运算B.栈满时作进栈运算C.栈空时作退栈运算D.栈空时作进栈运算104D3(25).顺序栈S中top为栈顶指针,指向栈顶元素所在的位置,elem为存放栈的数组,则元素e进栈操作的主要语句为(D)。
A.s.elem[top]=e;s.top=s.top+1;B.s.elem[top+1]=e;s.top=s.top+1;C.s.top=s.top+1;s.elem[top+1]=e;D.s.top=s.top+1;s.elem[top]=e;104C2(26).设有5个元素A,B,C,D,E顺序进栈(进栈过程中可以出栈),出栈后依出栈次序进入队列,已知其出队次序为D,C,E,B,A,则该栈容量必定不小于(C)。
A.2 B.3 C.4 D.5104B2(27).设栈S的初始状态为空,现有五个元素组成的序列1,2,3,4,5,对该序列在栈S上依次进行PUSH,PUSH,POP,PUSH,POP,PUSH,PUSH操作,出栈的元素序列是(C)。
A.5,4,3,2,1 B.2,1 C.2,3D.3,4104B2(28).在一个具有n个单元的顺序栈中,假定以地址低端(即0单元)作为栈底,以top为栈顶指针,则当做出栈处理时,top变化为(C)。
A.top不变B.top=0 C.top- -D.top++104D3(29).向一个栈顶指针为hs的链栈中插入一个*s结点时,应执行(B)。
A.hs->next=s;B.s->next=hs;hs=s;C.s->next=hs->next;hs->next=s;D.s->next=hs;hs=hs->next;105A1(30).在队列中,下列说法正确的是(A)。
A.每次插入总是在队尾,每次删除总是在队头。
B.每次插入总是在队尾,每次删除也总是在队尾。
C.每次插入总是在队头,每次删除也总是在队头。
D.每次插入总是在队头,每次删除总是在队尾。
105D3(31).在带头结点的链队列q中,用q.front表示队头指针,q.rear表示队尾指针,结点结构为B)。
A.s=q.front;q.front->next= s.next;B.s=q.front->next;q.front->next= s.next;C.s=q.front->next;q.front= s.next;D.s=q;q.front->next= s.next;106C3(32).循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear 指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则队列满的条件为(D)。
A.sq.front= sq.rear B.sq.front= sq.rear+1 C.(sq.front +1)mod MAXSIZE= sq.rear D.(sq.rear+1)mod MAXSIZE= sq.front106C2(33).循环队列sq中,用数组elem存放数据元素,sq.front指示队头元素的前一个位置,sq.rear 指示队尾元素的当前位置,队列的最大容量为MAXSIZE,则在队列未满时元素x入队列的主要操作为(A)。
A.sq.rear= (sq.rear+1)mod MAXSIZE;sq.elem[sq.rear]=x;B.sq.elem[sq.rear]=x;sq.rear= (sq.rear+1)mod MAXSIZE;C.sq.front= (sq.front+1)mod MAXSIZE;sq.elem[sq.front]=x;D.sq.elem[sq.front]=x;sq.front= sq.front+1;106B2(34).循环队列sq中,用数组elem[0‥25]存放数据元素,sq.front指示队头元素的前一个位置,sq.rear指示队尾元素的当前位置,设当前sq.front为20,sq.rear为12,则当前队列中的元素个数为(D)。