数据结构习题汇总.docx
- 文档编号:11357137
- 上传时间:2023-02-28
- 格式:DOCX
- 页数:25
- 大小:82.61KB
数据结构习题汇总.docx
《数据结构习题汇总.docx》由会员分享,可在线阅读,更多相关《数据结构习题汇总.docx(25页珍藏版)》请在冰豆网上搜索。
数据结构习题汇总
数据结构习题
习题一
一、选择题
1、算法分析的两个主要方面是:
()
A.正确性和简明性B.时间复杂度和空间复杂度
C.数据复杂性和程序复杂性D.可读性和文档性
2、在数据结构中,从逻辑上可以把数据结构分成()。
A.动态结构和静态结构B.紧凑结构和非紧凑结构
C.线性结构和非线性结构D.逻辑结构和存储结构
3、计算机算法具备输入、输出和()等5个特性:
A.有穷性、确定性和稳定性B.可行性、可移植性和可扩充性
C.有穷性、确定性和可行性D.易读性、稳定性和安全性
4、算法分析的目的是()。
A.找出算法的合理性B.研究算法的输人与输出关系
C.分析算法的有效性以求改进D.分析算法的易懂性
二、填空题
1、数据结构是一门研究非数值计算的程序设计问题中计算机的以及它们之间的和运算等的学科。
2、线性结构中元素之间存在的关系,树形结构中元素之间存在的关系,图形结构中元素之间存在的关系。
3、________是数据不可分割的最小单元,是具有独立含义的最小标识单位。
例如构成一个数据元素的字段、域、属性等都可称之为________。
4、数据的________指数据元素及其关系在计算机存储器内的表示。
_________是逻辑结构在计算机里的实现,也称之为映像。
5、所谓算法(Algorithm)是对特定问题求解方法和步骤的一种描述,它是指令的一组__________,其中每个指令表示一个或多个操作。
三、问答题
1、用大O形式写出下面算法的时间复杂度:
i=0;
s=0;
while(s<n)
{i++;
s+=i;}
2、写出以下算法的时间复杂度:
for(i=0;i<m;i++)
for(j=0;j<t;j++)
c[i][j]=0;
for(i=0;i<m;i++)
for(j=o;j for(k=0;k<n;k++) c[i][j]+=a[i][k]*b[k][j]; 习题二 一、选择题 1.在一个长度为n的顺序表中删除第i个元素(0<i A.n-iB.n-i+1C.n-i+1D.i+1 2.从一个具有n个元素的线性表中查找其值等于x的结点时,在查找成功的情况下,需平均比较()个元素结点。 A.n/2B.nC.(n-1)/2D.(n+1)/2 3.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则下列存储方式最节省运算时间的是(): A.带头结点的双循环链表B.双链表 C.给出表头指针的单循环链表D.单链表 4.如果最常用的操作是取第i个结点及其前驱结点,那么下列存储方式最节省时间的是(): A.单链表B.单循环链表C.顺序表D.双链表 5.若某线性表最常用的操作是在最后一个结点之后插入一个结点或者删除最后一个结点,则下列存储方式最节省运算时间的是: () A.仅有尾指针的单循环链表B.双链表 C.仅有头结点的单循环链表D.单链表 6.线性表是()。 A.一个有限序列,可以为空B.一个有限序列,不可以为空 C.一个无限序列,可以为空D.一个无限序列,不可以为空 7.在一个长度为n的顺序表中,向第i个元素(0一1<n+1)之前捕人一个新元素时,需要向后移动()个元素。 A.n-iB.n-i+1C.n-i-1D.i+1 8.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是()。 A.98B.100C.102D.106 9.在以下叙述中,正确的是: () A.线性表的线性存储结构优于链式存储结构 B.栈的操作方式是先进先出 C.队列的操作方式是先进后出 D.二维数组是其数据元素为线性表的线性表 二、填空题 1.线性表是具有n个的有限序列。 2.在单链表中,要删除某一个指定的结点,必须找到该结点的结点。 3.向一个长度为n的顺序表中的第i个数据元素(1≤i≤n)之前插入一个元素时,需要向后移动个数据元素。 4.在双向链表中,每个结点都具有两个指针域,一个指向,另一个指向。 5.线性表中有且仅有一个开始结点,表中有且仅有一个终端结点,除开始结点外,其他每个元素有巨仅有一个__________,除终端结点外,其他每个元素有且仅有一个______。 6.线性表的链式存储结构的每一个结点(Node)需要包括两个部分: 一部分用来存放元素的数据信息,称为结点的_________;另一部分用来存放元素的指向直接后继元素的指针(即直接后继元素的地址信息),称为________或____________。 7.写出带头结点的双向循环链表L为空表的条件________________。 三、问答题 1.对链表设置头结点的作用是什么? (至少说出两条好处) 2.在单链表、双链表中,如果仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去? 3.如果频繁地对一个线性表进行插入和删除操作,那么该线性表应该采用何种存储结构? 为什么? 四、程序设计题 1.有一个带头结点的单链表(不同结点的数据域值可能相同),其头指针为head,编写一个函数计算数据域值为x的结点个数。 2.设计一个算法,删除单链表L中值为x的结点的直接前驱结点。 3.设计一个算法,将一个不带头结点的单链表L(至少有一个结点)逆置,即最后一个结点变成第一个结点,原来倒数第二个结点变成第二个结点,如此等等。 4.在一个带头结点的单链表中,头指针为head,它的数据域的类型为整型,而且按由小到大的顺序排列,编写一个算法insertx_list(),在该链表中插人值为x的元素,并使该链表仍然有序。 习题三 一、选择题 l.一个栈的序列是: a,b,c,d,e,则栈的不可能输出的序列是()。 A.a,b,c,d,eB.d,e,c,b,aC.d,c,e,a,bD.e,d,c,b,a 2.判定一个栈S(最多元素为MaxSize)为栈满的条件是: () A.S—﹥top! =-1B.S—﹥top==-1 C.S—﹥top==MaxSize-1D.S—﹥top! =MaxSize-1 3.若一进栈序列为1,2,3…,n,其出栈序列为P1,P2,P3,…Pn,如果Pn=n,则Pi(1≤i () A.iB.n-i+1C.不确定D.n-i 4.在一个链队中,假设f和r分别为队头和队尾指针,则插入s所指结点的运算是()A.r->next=s;r=s;B.r->next=s;f=s; C.s->next=r;r=s;D.s->next=f;f=s; 5.若用一个大小为8的一维数组来实现循环队列,且当前front和rear的值分别为4和1,当从队列中删除一个元素,再加入两个元素后,front和rear的值分别是(): A.3和5B.5和3C.2和6D.6和2 6.判断一个循环队列Q(最多元素为MaxSize)为空的条件是: () A.Q->front==Q->rearB.Q->front==(Q->rear+1)%MaxSize C.Q->front! =Q->rearD.Q->front! =(Q->rear+1)%MaxSize 7.向一个带头结点、栈顶指针为top的链栈中插人一个*S结点的时候,应当执行语句()。 A.top->next=S;B.S->next=top;top=S; C.S->next=top->next;top->next=S;D.S->next=top;top=S->next; 8.在一个链队列中,假定front和rear分别为头指针和尾指针,则插入一个结点*S的操作是()。 A.front=front->nextB.S->next=rear;rear=S C.rear->next=S;rear=SD.S->next=front;front=S 9.栈与队列都是()。 A.链式存储的线性结构B.链式存储的非线性结构 C.限制存取点的线性结构D.限制存取点的非线性结构 10.若进栈序列为l,2,3,4,则()不可能是一个出栈序列。 A.3,2,4,1B.l,2,3,4C.4,2,3,1D.4,3,2,l 11.在解决计算机主机与打印机之间速度不匹配问题时通常设置一个打印数据缓冲区,主机将要输出的数据依次写人该缓冲区,而打印机则从该缓冲区中取走数据打印。 该缓冲区应该是一个()结构。 A.堆栈B.队列C.数组D.线性表 二、填空题 1.栈和队列的共同点是。 2.通常元素进栈的操作是。 3.栈(stack)是限定在________一端进行插人或删除操作的线性表。 在栈中,允许插人和删除操作的一端称为__________,而另一端称为_________。 不含元素的栈称为_______。 4.队列(Queue)也是一种___________,但它与栈不同,队列中所有的插人均限定在表的一端进行,而所有的删除则限定在表的另一端进行。 允许插人的一端称为_________,允许删除的一端称为_______________。 5.队列中允许进行删除的一端称为_______________;允许进行插入的一端称为_________。 三、问答题 1.设有一个数列的输入顺序为abcdef,若采用栈结构,并以J和C分别表示进栈和出栈操作,试问下列输出序列是否是合法序列? 如是,请用进栈和出栈操作表示其合法序列。 (1)能否得到输出顺序为cbefda的序列? (2)能否得到输出顺序为aedfbc154623的序列? 2.设输入元素为4、5、6、B、A,入栈次序为456BA,元素经过栈后到达输出序列,当所有元素均到达输出序列后,有哪些序列可以作为高级语言的变量名? 3.假设Q[0…10]是一个线性队列,初始状态为front=rear=0,画出做完下列操作后队列的头尾指针的状态变化情况,若不能入队,请指出其元素,并说明理由。 (1)d,e,b,g,h入队 (2)d,e出队 (3)i,j,k,l,m入队 (4)b出队 (5)n,o,p入队 4.设有4个元素A、B、C和D进栈,给出它们所有可能的出栈秩序。 四、程序设计题 1.假设表达式中有三种括号: 圆括号“()”、方括号“[]”和花括号“{}”用C语言编写程序判断读人的表达式中不同括号是否正确配对,假定读人的表达式以”#”结束。 习题四 一、选择项 4.设有两个串求串S2在S1,那么求串S2在S1求串n在串m中首次出现的位置的运算称为: () A.求子串B.求串长C.模式匹配D.串连接 4.设有串S=‘Computer’,则其子串的数目是()。 A.36B.37C.8D.9 4.下列是C语言中“ASDF567HJKL”子串的是: () A.ASDFB.DF56C.“F567HJ”D.“DFHJ” 5.空串与空格串()。 A.相同B.不相同C.可能相同D.无法确定 二、境空题 1.串是由零个或多个字符组成的____________。 通常记作: s=“c1,c2,…,cn”(n=>0),其中,S称为________;串中的Ci(1<=i<=n)可以是字母、数字字格或其他字符。 用双引号括起来的部分是_________.即串S的内容。 2.串中字符的个数称为串的________。 3.不含有任何字符的串称为_________,它的长度为___________。 4.由一个或多个空格构成的串称为____________,它的长度为___________。 5.串中任意多个连续字符组成的子序列称为该串的____________;包含___________的串称为主串。 三、问答题 1、现有串s1=‘ABCD123’,s2=‘abcde’,假设函数con(x,y)返回x和y串的连接串,函数subs(s,i,j)返回串s的从序号i的字符开始的j个字符组成的子串,函数len(s)返回串s的长度,求: (1)L1=subs(s1,2,len(s2)) (2)L2=subs(s1,len(s2),2)) (3)con(L1,L2) 四、程序设计题 l.编写算法实现将窜S1中的第i个字符到第j个字符之间的字符(不包括第i个字符和第j个字符)之间的字符用串S2替换。 假设串的存储结构为: #defineMAXSIZE81 structstring{ intlen; charch[MAXSIZE]; }stringtype; 习题五 一、选择题 l.数组常用的两种基本操作是()。 A.建立与查找B.删除与查找C.插人与索引D.查找与修改 2.对稀疏矩阵进行压缩存储,常用的两种方法是()。 A.二元组和散列表B.三元组和十字铸表 C.三角矩阵和对角矩阵D.对角矩阵和十字链表 3.数组A中,每个数据元素的长度为2个字节,行下标m从1到10,列下标n从1到8,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是: () A.20B.80C.240D.160 4.数组A中,每个数据元素的长度为3个字节,行下标m从1到8,列下标n从1到10,从首地址SA开始连续存放在存储器内,该数组按行存储时,元素A[8][3]的起始地址是: () A.SA+222B.SA+141C.SA+44D.SA+219 5.若广义表L满足Head(L)=Tail(L),则广义表L为: () A.(())B.()C.((),())D.((),(),()) 6.广义表((a))的表头是()。 A.()B.aC.(a)D.((a)) 7.广义表((a))的表尾是()。 A.()B.aC.(a)D.((a)) 8.广义表((a),a)的表头是()。 A.()B.aC.(a)D.((a)) 9.广义表((a),a)的表尾是()。 A.()B.aC.(a)D.((a)) 10.广义表(a,b,c)的表头是()。 A.aB.(a)C.a,bD.(a,b) 11.广义表(a,b,c)的表尾是()。 A.b,cB.(b,c)C.a.b,cD.(a,b,c) 二、填空题 9.head(((),()))是,tail(((),()))是,表的长度是。 10.head(((a),((b),c),(((d)))))是,tail(((a),((b),c),(((d)))))是。 11.现有广义表L=((a),((b),c),d,e,((i,j),k)),则该广义表的长度是,深度是。 1.数组(array)是n(n>1)个__________的有序组合,数组中的数据是按顺序存储在一块______________的存储单元中。 2.数组中的每一个数据通常称为_____,________用下标区分,其中下标的个数由数组的________________决定。 3.广义表是n(n>=0)个元素的序列。 记作: A=(a1,a2,…,an),其中,A是广义表的_________,n是它的_________,当n=0的时候称为____________。 4.广义表的深度一般定义为广义表元素_________,或者说是广义表___________。 利用递归的定义,广义表的深度就是所有子表中_________________________。 三、问答题 1.现有一个稀疏矩阵如下图所示,写出其对应的三元组表示,并求出其转置矩阵的三元组表示。 2.写一个创建稀疏矩阵相应三元组的算法。 四、程序设计题 1.假设三元组元素值为整型,写一个查找三元组元素值为n的算法。 习题六 一、选择题 1.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含节点数至少有: () A.2hB.2h+1C.h+1D.2h-1 2.现有一二叉树,若其先序遍历序列为ABCDE,中序遍历序列为CBDAE,那么其后序遍历序列为: () A.BDAECB.EDCBAC.DABECD.CDBEA 3.在线索化二叉树中,t所指结点没有左子树的充要条件是: () A.t->left==NULLB.t->left==0 C.t->ltag==1D.t->left==NULL且t->ltag==1 4.设深度为h的二叉树上只有叶子结点和同时具有左右子树的结点,则此类二叉树中所包含的结点数目至少为()。 A.2hB.2hC.2h+1D.2h-l 5.二叉村第k层上最多有()个结点。 A.2kB.2k-1C.2k-1D.2k-1 6.二叉树的深度为k,则二叉树最多有()个结点。 A.2kB.2k-1C.2k-1D.2k-1 7.设某一二叉树先序遍历为abdec,中序遍历为dbeac,则该二叉树后序遍历的顺序是()。 A.abdecB.debacC.debcaD.abedc 8.设某一二叉树中序遍历为badce,后序遍历为bdeca,则该三叉树先序遍历的顺序是()。 A.adbecB.decabC.debacD.abode 9.N个结点的线索二叉树中,线索的数目是()。 A.N-1B.N+1C.2ND.2N-1 10.将一棵树T转换为一棵二叉树T2,则T的先序遍历是T2的()。 A.先序B.中序C.后序D.无法确定 11.将一棵树T转换为一棵二叉树T2,则T的后序遍历是T2的()。 A.先序B.中序C.后序D.无法碉定 12.设一棵二叉树度2的结点数是7,度为1的结点数是6,则叶子结点数是()。 A.6B.7C.8D.9 13.一棵非空的二叉树,先序遍历与后序遍历正好相反,则该二叉树满足()。 A.无左孩子B.无右孩子 C.只有一个叶子结点D.任意二叉树 14.线索二叉树是一种()。 A.逻辑结构B.线性结构 C.逻辑和线性结构D.物理结构 15.权值为{l,2,6,8}的四个结点构成的哈夫曼树的带权路径长度是()。 A.29B.31C.17D.20 二、填空题 1.树(Tree)是n(n≥0)个结点的_____________集。 2.深度为5的二叉树至多有个结点。 3.树中任意结点允许有零个或多个孩子结点,除根结点以外,其余结点双亲结点。 4.在一棵二叉树中,度为零的结点个数为n0,度为2的结点个数为n2,那么n0=。 5.结点的度是指结点所拥有的________________。 6.一个结点的子树中的任一结点都称为该结点的___________________。 7.从根到该结点所经分支上的所有结点称为该结点的_______________。 8.具有_______________________的结点互称为兄弟结点,简称为兄弟。 9.从根结点开始定义,根为________层,根的孩子为__________层,依次往下类推,若某结点在第k层,则其子树的根就在_________________层。 10.如果树中各结点的各子树无排列顺序,即可以互换位置,则称为该树为_________。 11.二又树(BinaryTree)是结点的有限集合,这个集合或者是空,或者是由一个根结点和__________的称为______________和____________的二叉树构成。 12.二叉树第i层上最多有____________个结点。 13.深度为k的二又树最多有____________个结点(k≥l)。 14.在任意二叉树中,叶子结点的数目(即度为0的结点数)等于度为2的结点数____________。 15.一棵深度为k且具有2k-1个结点的二叉树称为__________。 这类二叉树的特点是,二叉树中每一层结点的个数都是______________的个数。 16._________是那种在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者所缺少的结点都在右边。 17.具有n个结点的完全二叉树的深度是_______________。 18.先序遍历二叉树的操作定义为: 若二叉树为空,则为空操作;否则进行如下操作: 访问二叉树____________;先序遍历二叉树____________;先序遍历二叉树_________。 19.中序遍历二叉树的操作定义为: 若二叉树为空,则为空操作;否则进行如下操作: 中序遍历二叉树__________;访问二又树__________;中序遍历二又树____________。 20.后序遍历二叉树的操作定义为: 若二叉树为空,则为空操作;否则进行如下操作: 后序遍历二叉树___________;后序遍历二叉树_________;访问二叉树_____________。 21.线索二叉树(ThreadedBinaryTree)是充分利用二义链表的n+1个空的指针域作为线索来标志每一个结点的________和__________信息。 当某个结点有左孩子的时候,使其___________指向其左孩子,无左孩子的时候,使其左指针域指向该结点的___________;当某个结点有有孩子的时候,使其右指针域指向该结点的__________,无右孩子的时候,使其有指针域指向该结点的_____________。 22.线索二叉树的线索链表中,指向结点前驱和后继的指针称为___________;加上线索的二叉树称为_____________;对二叉树以某种次序进行遍历使其成为线索二叉树的过程称为_______________________。 23.哈夫曼树(HuffmanTree)又称___________。 它是n个带权叶子结点构成的所有二叉树中,带权路径长度WPL__________________。 三、问答题 1.一棵树表达成如下形式: D={A,B,C,D,E,F,G,H,I,J,K,L,M,N,O} R=<A,B>,<A,C>,<A,D>,<B,E>,<B,F>,<C,G>,<D,H>,<D,I>,<D,J>,<K,F>,<K,L>,<F,M>,<I,N>,<I,O>} 其中D为结点集合,R为边的集合。 请根据以上内容回答以下问题: (1)画出这棵树。 (2)该树的根结点是哪一个? (3)哪些是叶子结点? (4)F结点的双亲是谁? (5)F结点的祖先是哪些? (6)F结点的孩子是哪些? (7)F结点的兄弟是哪些? (8)F结点的堂兄弟是哪些? (9)F结点的度是多少? (10)F结点的层次是多少? (11)D结点的子孙有哪些? (12)以结点D为根的子树度是多少? (13)以结点D为根的子树层是多少? (14)该树的层是多少? (15)该树的度是多少? 2.画出图6-1中树的二叉树表示形式。 (a)(b)(c) 图6-l 3.已知某二叉树的先序遍历的结果是: A,B,D,QC,E,H,L,I,K,M,F和J,它的中序遍历的结果是: QD,B,A,L,H,E,K,LM,C,F和J,请画出这棵二叉树,并且写出该二叉树后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 习题 汇总