数据结构练习题及参考答案.docx
- 文档编号:7453118
- 上传时间:2023-01-24
- 格式:DOCX
- 页数:24
- 大小:95.10KB
数据结构练习题及参考答案.docx
《数据结构练习题及参考答案.docx》由会员分享,可在线阅读,更多相关《数据结构练习题及参考答案.docx(24页珍藏版)》请在冰豆网上搜索。
数据结构练习题及参考答案
数据结构练习题
第一部分绪论
一、单选题
1.一个数组元素a[i]与的表示等价。
A、*(a+i)B、a+iC、*a+iD、&a+i
2.对于两个函数,若函数名相同,但只是不同则不是重载函数。
A、参数类型B、参数个数C、函数类型
3.若需要利用形参直接访问实参,则应把形参变量说明为参数
A、指针B、引用C、值
4.下面程序段的时间复杂度为。
for(inti=0;i for(intj=0;j a[i][j]=i*j; 22 A、O(m)B、O(n)C、O(m*n)D、O(m+n) 5.执行下面程序段时,执行S语句的次数为。 for(inti=1;i<=n;i++)for(intj=1;j<=i;j++) S; 3.在线性结构、树形结构和图形结构中,前驱和后继结点之间分别存在着 10.一个数组a所占有的存储空间的大小即数组长度为,下标为i的元素 a[i]的存储地址为,或者为。 11.函数重载要求、或有所不同。 12.对于双目操作符,其重载函数带有个参数,其中至少有一个为 的类型。 13. 若对象ra和rb中至少有一个是属于用户定义的类型, 则执行 ra==rb时,需要调 用 重载函数,该函数的第一个参数应与 的类型相冋,第二个参数应与 的类型相冋。 14. 从一维数组a[n]中顺序查找出一个最大值兀素的时间复杂度为 ,输出一 个二维数组b[m][nl中所有兀素值的时间复杂度为 。 15. 在下面程序段中,s=s+p语句的执行次数为 p*=j 语句的执行次数为 ,该程序段的时间复杂度为。 inti=O,s=O; while(++i<=n){ intp=1; for(intj=1;j<=i;j++)p*=j; s=s+p; } 16.一个算法的时间复杂度为(3n2+2nlog2n+4n-7)/(5n),其数量级表示为 第二部分线性表 一、单选题 1.在一个长度为n的顺序存储线性表中,向第i个元素(1 素时,需要从后向前依次后移个元素。 A、n-iB、n-i+1C、n-i-1D、i 2.在一个长度为n的顺序存储线性表中,删除第i个元素(1 后依次前移个元素。 A、n-iB、n-i+1C、n-i-1D、i 3.在一个长度为n的线性表中顺序查找值为x的元素时,查找时的平均查找长度(即 x同元素的平均比较次数,假定查找每个元素的概率都相等)为。 A、nB、n/2C、(n+1)/2D、(n-1)/2 4•在一个单链表HL中,若要向表头插入一个由指针p指向的结点,则执行。 A、HL=p;p->next=HL; B、p->next=HL;HL=p; C、p->next=HL;p=HL; D、p->next=HL->next;HL->next=p; 5•在一个单链表HL中,若要在指针q所指的结点的后面插入一个由指针p所指的结点, 则执行。 A、q->next=p->next;p->next=q; B、p->next=q->next;q=p; C、q->next=p->next;p->next=q; D、p->next=q->next;q->next=p; C、p=q_>next;q_>next=p_>next; D、q->next=q->next->next;q->next=q; 二、填空题 1在线性表的单链接存储结构中,每个结点包含有两个域,一个叫域,另 一个叫域。 2.在下面数组a中链接存储着一个线性表,表头指针为a[0].next,则该线性表为_ 。 3.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为, 在表尾插入元素的时间复杂度为。 4.对于一个长度为n的单链接存储的线性表,在表头插入元素的时间复杂度为, 在表尾插入元素的时间复杂度为。 5.在线性表的顺序存储中,若一个元素的下标为i,则它的前驱元素的下标为, 后继元素的下标为。 6•在线性表的单链接存储中,若一个元素所在结点的地址为p,则其后继结点的地址 为,若假定p为一个数组a中的下标,则其后继结点的下标为。 7.在循环单链表中,最后一个结点的指针指向结点。 8.在双向链表中每个结点包含有两个指针域,一个指向其结点,另一个指 向其结点。 9.在循环双向链表中表头结点的左指针域指向结点,最后一个结点的右指 针域指向结点。 10•在以HL为表头指针的带表头附加结点的单链表和循环单链表中,链表为空的条件 分别为和。 三、应用题 1.在下面的每个程序段中,假定线性表La的类型为List,元素类型ElemType为int, 并假定每个程序段是连续执行的,试写出每个程序段执行后所得到的线性表La。 (1)InitList(La); inta[]={48,26,57,34,62,79}; for(i=0;i<6;i++)InsertFront(La,a[i]); TraverseList(La); (2)InitList(La); for(i=0;i<6;i++)Insert(La,a[i]); TraverseList(La); (3)ClearList(La); for(i=0;i<6;i++)InsertRear(La,a[i]); Delete(La,a[5]); Sort(La); Insert(La,a[5]/2); TraverseList(La); 2•写出下面函数被调用执行后,得到的以HL为表头指针的单链表中的数据元素序列。 voidAA(LNode*&HL) { InitList(HL); InsertRear(HL,30); InsertRear(HL,50); inta[5]={15,8,9,26,12}; for(inti=0;i<5;i++)InsertFront(HL,a[i]); } 3.对于List类型的线性表,编写出下列每个算法。 (1)从线性表中删除具有最小值的元素并由函数返回,空出的位置由最后一个元素填补,若线性表为空则显示出错信息并退出运行。 (2)从线性表中删除第i个元素并由函数返回。 (3)向线性表中第i个元素位置插入一个元素。 (4)从线性表中删除具有给定值x的所有元素。 4.对于结点类型为LNode的单链表,编写出下列每个算法。 (1)删除单链表中的第i个结点。 (2)在有序单链表中插入一个元素x的结点。 (3)从单链表中查找出所有元素的最大值,该值由函数返回,若单链表为空,则显示出错信息并停止运行。 (4)统计出单链表中结点的值等于给定值x的结点数。 第三部分栈和队列 一、单选题 1.栈的插入与删除操作在进行。 A、栈顶B、栈底C、任意位置D、指定位置 2.当利用大小为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则向这个 栈插入一个元素时,首先应执行语句修改top指针。 A、top++B、top--C、top=0D、top 3.若让元素1,2,3依次进栈,则出栈次序不可能出现种情况。 A、3,2,1B、2,1,3C、3,1,2D、1,3,2 4.在一个循环顺序队列中,队首指针指向队首元素的位置。 A、前一个B、后一个C、当前D、后面 5.当利用大小为N的一维数组顺序存储一个循环队列时,该队列的最大长度为< A、N-2B、N-1C、ND、N+1 6•从一个循环顺序队列删除元素时,首先需要。 A、前移一位队首指针B、后移一位队首指针 C、取出队首指针所指位置上的元素D、取出队尾指针所指位置上的元素 7•假定一个循环顺序队列的队首和队尾指针分别为f和r,则判断队空的条件是_。 A、f+仁=rB、r+1==fC、f==0D、f==r 8•假定一个链队的队首和队尾指针分别为front和rear,则判断队空的条件是_。 A、front==rearB、front! =NULLC、rear! =NULLD、front==NULL 二、填空题 1•队列的插入操作在进行,删除操作在进行。 2.栈又称为表,队列又称为表。 3.向一个顺序栈插入一个元素时,首先使后移一个位置,然后把待插入元素 到这个位置上。 4•从一个栈中删除元素时,首先取出,然后再前移一位。 5•在一个循环顺序队列Q中,判断队空的条件为,判断队满的条件 为。 6.在一个顺序栈中,若栈顶指针等于,则为空栈;若栈顶指针等于,则 为满栈。 7•在一个链栈中,若栈顶指针等于NULL,则为;在一个链队中,若队首指 针与队尾指针的值相同,则表示该队列为或该队列为。 8•向一个链栈插入一个新结点时,首先把栈顶指针的值赋给,然后把新结点 的存储位置赋给。 9•从一个链栈中删除一个结点时,需要把栈顶结点的值赋给。 10•向一个顺序队列插入元素时,需要首先移动,然后再向所指位置新 插入的元素。 11、当用长度为N的一维数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈 满的条件为。 12.向一个栈顶指针为HS的链栈中插入一个新结点*P果,应执行和 操作。 13.从一个栈顶指针为HS的非空链栈中删除结点并不需要返回栈顶结点的值和回收结 点时,应执行操作。 14•假定front和rear分别为一个链队的队首和队尾指针,则该链队中只有一个结点 的条件为。 15.中缀算术表达式3+4/(25-(6+15))*8所对应的后缀算术表达式为。 16.后缀算术表达式248+3*4107-*/所对应的中缀算术表达式为, 其值为。 三、应用题 执行下面函数调用后得到的输出结果是什么? voidAF(Queue&Q) { InitQueue(Q); inta[4]={5,8,12,15}; for(inti=0;i<4;i++)Qinsert(Q,a[i]); Qinsert(Q,QDelete(Q)); Qinsert(Q,30); Qinsert(Q,QDelete(Q)+10);while(! QueueEmpty(Q))cout< } 四、编程题裴波那契(Fibonacci)数列的定义为: 它的第1项和第2项均为1,以后各项为其前两项之和。 若裴波那契数列中的第n项用Fib(n)表示,则计算公式为: 1(n=1或2) Fib(n)= Fib(n-1)+Fib(n-2)(n>=2) 试编写出计算Fib(n)的递归算法和非递归算法,并分析它们的时间复杂度和空间复杂 度。 第四部分稀疏矩阵和广义表 一、单选题 1.在稀疏矩阵的带行指针向量的链接存储中,每个行单链表中的结点都具有相同的 A、行号B、列号C、元素值D、地址 2.设一个广义表中结点的个数为n,则求广义表深度算法的时间复杂度为。 A、0 (1)B、0(n)C、0(n2)D、O(log2n) 二、填空题 1.在一个稀疏矩阵中,每个非零元素所对应的三元组包括该元素的、 和三项。 2.在稀疏矩阵所对应的三元组线性表中,每个三元组元素按为主序、 为辅序的次序排列。 3.在初始化一个稀疏矩阵的函数定义中,矩阵形参应说明为参数。 4.在稀疏矩阵的顺序存储中,利用一个数组来存储非零元素,该数组的长度应 对应三元组线性表的长度。 5•在稀疏矩阵的带行指针向量的链接存储中,每个结点包含有个域,在相应 的十字链接存储中,每个结点包含有个域。 6•在稀疏矩阵的十字链接存储中,每个结点的down指针域指向相同的下一个 结点,right指针域指向相同的下一个结点。 7•一个广义表中的元素分为元素和元素两类。 8.一个广义表的深度等于嵌套的最大层数。 9•在广义表的存储结构中,每个结点均包含有个域。 10.在广义表的存储结构中,单元素结点与表元素结点有一个域对应不同,各自分别为 域和域。 11.若把整个广义表也看为一个表结点,则该结点的tag域的值为,next域 的值为 三、应用题 1. 已知一个稀疏矩阵如下图所示: 040Or-000 具有6行X7列的一个稀疏矩阵 (1)写出它的三元组线性表; (2)给出它的顺序存储表示; (3)给出它的转置矩阵的三元组线性表和顺序存储表示; 2.画出下列每个广义表的带表头附加结点的链接存储结构图并分别计算出它们的长度 和深度。 (1)A=(()) (2)B=(a,b,c) (3)C=(a,(b,(c))) ⑷D=((a,b),(c,d)) (5)E=(a,(b,(c,d)),(e)) ⑹F=((a,(b,(),c),((d),e))) 第五部分树和二叉树 一、填空题 1.对于一棵具有n个结点的树,该树中所有结点的度数之和为。 2.假定一棵三叉树的结点个数为50,则它的最小深度为,最大深度为 3•在一棵三叉树中,度为3的结点数有2个,度为2的结点数有1个,度为1的结点 数为2个,那么度为0的结点数有个。 4.一棵深度为5的满二叉树中的结点数为个,一棵深度为3的满三叉树中的 结点数为个。 5 ,则树中所含的结点数为 ,则度为3、2、1、0的结点 ,则结点H的双亲结点为 •假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))) 个,树的深度为,树的度为。 6.假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))) 数分别为、、和个。 7.假定一棵树的广义表表示为A(B(C,D(E,F,G),H(I,J))) ,孩子结点为 8•在一棵二叉树中,假定双分支结点数为5个,单分支结点数为6个,则叶子结点数 为个。 9•对于一棵二叉树,若一个结点的编号为i,则它的左孩子结点的编号为, 右孩子结点的编号为,双亲结点的编号为。 10•在一棵二叉树中,第5层上的结点数最多为。 11•假定一棵二叉树的结点数为18,则它的最小深度为,最大深度为< 12.一棵二叉树的广义表表示为a(b(c,d),e(f(,g))),则e结点的双亲结点为: 左孩子结点为,右孩子结点为。 13.一棵二叉树的广义表表示为a(b(c,d),e(f(,g))),它含有双亲结点个,单 分支结点个,叶子结点个。 14.假定一棵二叉树顺序存储在一维数组a中,则a[i]元素的左孩子元素为 右孩子元素为,双亲元素(i>1)为。 15.假定一棵二叉树顺序存储在一维数组a中,但让编号为1的结点存入a[0]元素中, 让编号为2的结点存入a[1]元素中,其余类推,则编号为i结点的左孩子结点对应的存储 位置为,若编号为i结点的存储位置用j表示,则其左孩子结点对应的存储位置为 16.若对一棵二叉树从0开始进行结点编号,并按此编号把它顺序存储到一维数组a中, 即编号为0的结点存储到a[0]中,其余类推,则a[i]元素的左孩子元素为,右孩 子元素为,双亲元素(i>0)为。 17.对于一棵具有n个结点的二叉树,对应二叉链表中指针总数为个,其中 个用于指向孩子结点,个指针空闲着。 18.一棵二叉树广义表表示为a(b(d(,h)),c(e,f(g,i(k)))),该树的结点数为 个,深度为。 19.假定一棵二叉树广义表表示为a(b(c),d(e,f)),则对它进行的先序遍历结果为 中序遍历结果为,后序遍历结果为,按层遍历结果为。 20.假定一棵普通树的广义表表示为a(b(e),c(f(h,i,j),g),d),则先根遍历结果为 ,按层遍历结果为。 二、应用题 1.已知一棵具有n个结点的完全二叉树被顺序存储于一维数组的A[1]A[n]元素中, 试编写一个算法打印出编号为i的结点的双亲和所有孩子。 2.编写一算法,求出一棵二叉树中所有结点数和叶子结点数,假定分别用变参C1和 C2统计所有结点数和叶子结点数,初值均为0。 3.对于右图所示的树: (1)写出先根遍历得到的结点序列; (2)写出按层遍历得到的结点序列; (3)画出转换后得到的二叉树和二叉链表。 二叉树的应用 一、单选题 1.从二叉搜索树中查找一个元素时,其时间复杂度大致为。 2 A、O(n)B、O (1)C、O(log2n)D、O(n) 2.向二叉搜索树中插入一个元素时,其时间复杂度大致为。 A、O (1)B、O(log2n)C、O(n)D、O(nlog2n) 3.根据n个元素建立一棵二叉搜索树时,其时间复杂度大致为。 2 A、O(n)B、O(log2n)C、O(n2)D、O(nlog2n) 4.从堆中删除一个元素的时间复杂度为。 A、O (1)B、O(n)C、O(log2n)D、O(nlog2n) 5.向堆中插入一个元素的时间复杂度为。 A、O(log2n)B、O(n)C、O (1)D、O(nlog2n) 6.由权值分别为3,8,6,2,5的叶子结点生成一棵哈夫曼树,它的带权路径长度为 若查找成功则由item带回整个结点的值并返回true,否则返回falseboolFind(BTreeNode*BST,ElemType&item) 2•下面的算法功能是向HBT堆中插入一个值为item的元素,使得插入后仍是一个堆。 请在画有横线的地方填上合适的语句,完成其功能。 voidAH(Heap&HBT,constElemTypeitem) 在一个具有n个顶点的无向图中,要连通所有顶点则至少需要条边。 4•表示图的三种存储结构为、和。 5.对于一个具有n个顶点的图,若采用邻接矩阵表示,则矩阵大小为。 6•对于一个具有n个顶点和e条边的有向图和无向图,在其对应的邻接表中,所含边结点分别为和条。 7.在有向图的邻接表和逆邻接表表示中,每个顶点邻接表分别链接着该顶点的所有和结点。 8•对于一个具有n个顶点和e条边的有向图和无向图,若采用边集数组表示,则存于 数组中的边数分别为和条。 9•对于一个具有n个顶点和e条边的无向图,当分别采用邻接矩阵、邻接表和边集数 组表示时,求任一顶点度数的时间复杂度依次为、和。 10.假定一个图具有n个顶点和e条边,则采用邻接矩阵、邻接表和边集数组表示时, 其相应的空间复杂度分别为、和。 11.对用邻接矩阵表示的图进行任一种遍历时,其时间复杂度为,对用邻接表 表示的图进行任一种遍历时,其时间复杂度为。 12.对于下面的无向图G1,假定用邻接矩阵表示,则从顶点vo开始进行深度优先搜索 遍历得到的顶点序列为,从顶点v0开始进行广度优先搜索遍历得到的顶点序 列为。 13.对于下面的有向图G2,假定用邻接矩阵表示,则从顶点vo开始进行深度优先搜索 遍历得到的顶点序列为,从顶点v0开始进行广度优先搜索遍历得到的顶点序 列为。 14.对于下面的带权图G3其最小生成树的权为。 15•对于下面的带权图G3,若从顶点vo出发,则按照普里姆算法生成的最小生成树中,依次得到的各条边为。 16.对于下面的带权图G3,若按照克鲁斯卡尔算法产生最小生成树,则得到的各条边 依次为。 17.假定用一维数组d[n]存储一个AOV网中用于拓扑排序的顶点入度,则值为0的元素被链接成为一个。 18.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数和边数分别为和。 二、应用题 1.对于下图G4和G5按下列条件试分别写出从顶点V。 出发按深度优先搜索遍历得到 的顶点序列和按广度优先搜索遍历得到的顶点序列。 (1)假定它们均采用邻接矩阵表示; (2)假定它们均采用邻接表表示,并且假定每个顶点邻接表中的结点是按顶点序号从大到小的次序链接的。 2.对于下图G6,试给出一种拓扑序列,若在它的邻接表存储结构中,每个顶点邻接表 中的边结点都是按照终点序号从大到小链接的,则按此给出唯一一种拓扑序列。 第七部分查找 一、填空题 1•以顺序查找方法从长度为n的线性表中查找一个元素时,平均查找长度为, 时间复杂度为。 2•以二分查找方法从长度为n的线性有序表中查找一个元素时,平均查找长度小于等 于,时间复杂度为。 3•以二分查找方法从长度为12的有序表中查找一个元素时,平均查找长度为。 4•以二分查找方法查找一个线性表时,此线性表必须是存储的表。 5•从有序表(12,18,30,43,56,78,82,95)中依次二分查找43和56元素时,其查找长度 分别为和。 6•对于二分查找所对应的判定树,它既是一棵,又是一棵。 7•假定对长度n=50的有序表进行二分查找,则对应的判定树高度为,判定树 中前5层的结点数为,最后一层的结点数为。 8.在索引表中,每个索引项至少包含有域和域这两项。 9.假定一个线性表为(12,23,74,55,63,40,82,36),若按Key%3条件进行划分,使得同一余数的元素成为一个子表,则得到的三个子表分别为、和。 10.假定一个线性表为 /”I[””I||r””上””]? ? --x””|±” (”abcd”,”baabd”,”bcef”,”cfg”,”ahij”,”bkwte”,”ccdt”, ”aayb”),若按照字符串的第一个字母进行划分,使得同一个字母被划分在一个子表中, 则得到的a,b,c三个子表的长度分别为、和。 11.在线性表的存储中,无法查找到一个元素的前驱或后继元素。 12.在线性表的存储中,对每一个元素只能采用顺序查找。 1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 练习题 参考答案