数据结构习题汇总
数据结构习题
习题一
一、选择题
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-i B.n-i+1 C.n-i+1 D.i+1 2.从一个具有n个元素的线性表中查找其值等于x的结点时,在查找成功的情况下,需平均比较( )个元素结点。 A.n/2 B.n C.(n-1)/2 D.(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-i B.n-i+1 C.n-i-1 D.i+1 8.一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是()。 A.98 B.100 C.102 D.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,e B.d,e,c,b,a C.d,c,e,a,b D.e,d,c,b,a 2.判定一个栈S(最多元素为MaxSize)为栈满的条件是:() A.S—﹥top!= -1B.S—﹥top==-1 C.S—﹥top==MaxSize-1 D.S—﹥top!=MaxSize-1 3.若一进栈序列为1,2,3…,n,其出栈序列为P1,P2,P3,…P n,如果P n=n,则P i (1≤i A.i B.n-i+1 C.不确定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和5 B.5和3 C.2和6 D.6和2 6.判断一个循环队列Q(最多元素为MaxSize)为空的条件是:() A.Q->front==Q->rear B.Q->front==(Q->rear +1)%MaxSize C.Q->front!=Q->rear D.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->next B.S->next=rear;rear=S C.rear->next=S;rear=S D.S->next=front;front=S 9.栈与队列都是()。 A.链式存储的线性结构B.链式存储的非线性结构 C.限制存取点的线性结构D.限制存取点的非线性结构10.若进栈序列为l,2,3,4,则()不可能是一个出栈序列。 A.3,2,4,1 B.l,2,3,4 C.4,2,3,1 D.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.36 B.37 C.8 D.9 4.下列是C语言中“ASDF567HJKL”子串的是:() A.ASDF B.DF56 C.“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替换。假设串的存储结构为: #define MAXSIZE 81 struct string{ int len; char ch[MAXSIZE]; }stringtype; 一、选择题 l.数组常用的两种基本操作是()。 A.建立与查找B.删除与查找C.插人与索引D.查找与修改2.对稀疏矩阵进行压缩存储,常用的两种方法是()。 A.二元组和散列表B.三元组和十字铸表 C.三角矩阵和对角矩阵D.对角矩阵和十字链表3.数组A中,每个数据元素的长度为2个字节,行下标m从1到10,列下标n从1到8,从首地址SA开始连续存放在存储器内,存放该数组至少需要的单元数是:()A.20 B.80 C.240 D.160 4.数组A中,每个数据元素的长度为3个字节,行下标m从1到8,列下标n从1到10,从首地址SA开始连续存放在存储器内,该数组按行存储时,元素A[8][3]的起始地址是:() A.SA+222 B.SA+141 C.SA+44 D.SA+219 5.若广义表L满足Head(L)= Tail(L),则广义表L为:() A.(())B.()C.((),())D.((),(),()) 6.广义表((a))的表头是()。 A.()B.a C.(a)D.((a))7.广义表((a))的表尾是()。 A.()B.a C.(a)D.((a))8.广义表((a),a)的表头是()。 A.()B.a C.(a)D.((a))9.广义表((a),a)的表尾是()。 A.( ) B.a C.(a)D.((a))10.广义表(a,b,c)的表头是()。 A.a B.(a)C.a,b D.(a,b)11.广义表(a,b,c)的表尾是()。 A.b,c B.(b,c)C.a.b,c D.(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,…,a n),其中,A是广义表的_________,n是它的_________,当n=0的时候称为____________。 4.广义表的深度一般定义为广义表元素_________,或者说是广义表___________。利用递归的定义,广义表的深度就是所有子表中_________________________。 三、问答题 1.现有一个稀疏矩阵如下图所示,写出其对应的三元组表示,并求出其转置矩阵的三元组表示。 2.写一个创建稀疏矩阵相应三元组的算法。 四、程序设计题 1.假设三元组元素值为整型,写一个查找三元组元素值为n 的算法。 020000301 0040000?? ?? -???? ?? ?? 习题六 一、选择题 1.设高度为h的二叉树上只有度为0和度为2的结点,则此类二叉树中所包含节点数至少有:() A.2h B.2h+1 C.h+1 D.2h-1 2.现有一二叉树,若其先序遍历序列为ABCDE,中序遍历序列为CBDAE,那么其后序遍历序列为:() A.BDAEC B.EDCBA C.DABEC D.CDBEA 3.在线索化二叉树中,t所指结点没有左子树的充要条件是:() A.t->left==NULL B.t->left==0 C.t->ltag==1 D.t->left==NULL且t->ltag==1 4.设深度为h的二叉树上只有叶子结点和同时具有左右子树的结点,则此类二叉树中所包含的结点数目至少为()。 A.2h B.2h C.2h+1 D.2h-l 5.二叉村第k层上最多有()个结点。 A.2k B.2k-1 C.2k-1 D.2k-1 6.二叉树的深度为k,则二叉树最多有()个结点。 A.2k B.2k-1 C.2k-1 D.2k -1 7.设某一二叉树先序遍历为abdec,中序遍历为dbeac,则该二叉树后序遍历的顺序是()。 A.abdec B.debac C.debca D.abedc 8.设某一二叉树中序遍历为badce,后序遍历为bdeca,则该三叉树先序遍历的顺序是()。 A.adbec B.decab C.debac D.abode 9.N个结点的线索二叉树中,线索的数目是()。 A.N-1 B.N+1 C.2N D.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.6 B.7 C.8 D.9 13.一棵非空的二叉树,先序遍历与后序遍历正好相反,则该二叉树满足()。 A.无左孩子B.无右孩子 C.只有一个叶子结点D.任意二叉树 14.线索二叉树是一种()。 A.逻辑结构B.线性结构 C.逻辑和线性结构D.物理结构 15.权值为{l,2,6,8}的四个结点构成的哈夫曼树的带权路径长度是()。 A.29 B.31 C.17 D.20 二、填空题 1.树(Tree)是n(n≥0)个结点的_____________集。 2.深度为5的二叉树至多有个结点。 3.树中任意结点允许有零个或多个孩子结点,除根结点以外,其余结点双 亲结点。 4.在一棵二叉树中,度为零的结点个数为n0,度为2的结点个数为n2,那么n0= 。 5.结点的度是指结点所拥有的________________。 6.一个结点的子树中的任一结点都称为该结点的___________________。 7.从根到该结点所经分支上的所有结点称为该结点的_______________。 8.具有_______________________的结点互称为兄弟结点,简称为兄弟。 9.从根结点开始定义,根为________层,根的孩子为__________层,依次往下类推,若某结点在第k层,则其子树的根就在_________________层。 10.如果树中各结点的各子树无排列顺序,即可以互换位置,则称为该树为_________。 11.二又树(Binary Tree)是结点的有限集合,这个集合或者是空,或者是由一个根结点和__________的称为______________和____________的二叉树构成。 12.二叉树第i层上最多有____________个结点。 13.深度为k的二又树最多有____________个结点(k≥l)。 14.在任意二叉树中,叶子结点的数目(即度为0的结点数)等于度为2的结点数____________。 15.一棵深度为k且具有2k-1个结点的二叉树称为__________。这类二叉树的特点是,二叉树中每一层结点的个数都是______________的个数。 16._________是那种在一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者所缺少的结点都在右边。 17.具有n个结点的完全二叉树的深度是_______________。 18.先序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:访问二叉树____________;先序遍历二叉树____________;先序遍历二叉树_________。 19.中序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:中序遍历二叉树__________;访问二又树__________;中序遍历二又树____________。 20.后序遍历二叉树的操作定义为:若二叉树为空,则为空操作;否则进行如下操作:后序遍历二叉树___________;后序遍历二叉树_________;访问二叉树_____________。 21.线索二叉树(Threaded Binary Tree)是充分利用二义链表的n+1个空的指针域作为线索来标志每一个结点的________和__________信息。当某个结点有左孩子的时候,使其___________指向其左孩子,无左孩子的时候,使其左指针域指向该结点的___________;当某个结点有有孩子的时候,使其右指针域指向该结点的__________,无右孩子的时候,使其有指针域指向该结点的_____________。 22.线索二叉树的线索链表中,指向结点前驱和后继的指针称为___________;加上线索的二叉树称为_____________;对二叉树以某种次序进行遍历使其成为线索二叉树的过程称为_______________________。 23.哈夫曼树(Huffman Tree)又称___________。它是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,请画出这棵二叉树,并且写出该二叉树后序通历的结果。 4.设A、B、C、D、E、F六个字母出现的概率分别为7,19,2,6,32,3,构建哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),计算出带权路径长度WPL,并设计每个字母的哈夫曼编码 5.假设一棵二叉树的后序序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK,请完成下列操作:(1)画出该二叉树;(2)写出该二叉树的先序遍历序列;(3)画出该二叉树的中序遍历线索二叉树。 6.假设一棵二叉树的先序序列为ABDGCEHLIKMFJ,中序序列为GDBALHEKIMCFJ,请完成下列操作。 (1)画出该二叉树; (2)写出该二叉树的后序遍历序列; (3)画出该二叉树的中序遍历线索二叉树。 7.假设通讯电文中只用到A,B,C,D,E,F六个字母,它们在电文中出现的相对频率分别为:7,2,15,9,4,19,要求画出哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并计算出带权路径长度WPL,试设计每个字母的哈夫曼编码。 8.有七个带权结点,其权值分别为2,6,7,1,5,9,13,试以它们为叶子结点构造一棵哈夫 曼树(请按照每个结点的左子树根结点的权小于等于右子树根结点的权的次序构造),并计算出带权路径长度WPL。 9.假设一棵哈夫曼树共有n0个叶子结点,试证明树中共有2n o-l个结点。 10.假设通信用的报文由9个字母A、B、C、D、E、F、G、H和I构成,它们出现的频率分别是:10、20、5、15、8、2、3、7和30。请用这9个字母出现得频率作为权值求:(l)设计一棵哈夫曼树。 (2)计算其带权路径长度WPL值。 (3)写出每个字符的哈夫曼编码。 四、程序设计题 1. 自己设计一棵二叉树,编写一个完整的程序,输出该二叉树的先序、中序和后序序列。(程序中应包括二叉树的生成函数,先序、中序、后序遍历函数)。 2.已知一棵二叉树的先序遍历序列和中序遍历序列,请写出根据二又树先序遍历序列和中序遍历序列构造一棵二叉树的算法。 习题七 一、选择题 1.在一个无向图G中,所有顶点的度数之和等于所有边数之和的()倍。 A.l/2 B.1 C.2 D.4 2.对某个无向图的邻接矩阵来说:() A.第i行上的非零元素的个数和第i列上的非零元素的个数一定相等 B.矩阵中的非零元素的个数等于图中的边数 C.第i行上、第i列上非零元素的总数等于顶点Vi的度数 D.矩阵中非全零行的行数等于图中的顶点数 3.采用邻接表存储的图的深度优先遍历算法类似于二叉树的:() A.先序遍历B.中序遍历C.后序遍历D.按层遍历 4.在一个具有n个顶点的无向图中,要连通全部顶点至少需要条边:()A.n-1 B.n C.n+1 D.n/2 5.在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的()倍。 A.l/2 B.1 C.2 D.4 6.一个具有n个顶点的无向图包含()条边。 A.n B.n+1 C.n-1 D.n/2 7.一个具有n个顶点的无向完全图包含()条边。 A.n(n-l) B.n(n+l) C.n(n-l)/2 D.n(n-l)/2 8. 一个具有n个顶点的有向完全图包含()条边。 A.n(n-1) B.n(n+l) C.n(n-l)/2 D.n(n+l)/2 9.无向图的邻接矩阵是一个()。 A.对称矩阵B.零矩阵C.上三角矩阵D.对角矩阵 二、填空题 1.在图中,任何两个数据元素之间都可能存在关系,因此图的数据元素之间是一种________________的关系。 2.在有n个顶点的有向图中,至多有条边。 3.具有10个顶点的无向图,边的总数最多为。 4.在一个具有n个顶点的无向图中,要连通全部顶点至少需要条边。 5.具有n (n-1)/2条边的无向图称为__________,简称为_________,其中n表示无向图中顶点的个数,n(n-1)/2是具有n个顶点无向图所拥有边的___________。 6.具有n个顶点的有向图,如果它同时具有n(n-1)条弧,则称该图为____________,其中n(n-1)是具有n个顶点有向图所拥有弧的___________________。 7.如果图中的边或弧带有权,则称这种图为_______________。 8.顶点v的度定义为_________________的数目,记为D(v)。 9.在有向图中,顶点v的度又分为_____________和_________,__________是以顶点v为头的弧的数目,或者说是以该顶点为终点的边的数目,记为ID(v);____________是以顶点v为尾的弧的数目,或者说是以顶点为起点的边的数目,记为OD(v);顶点v的度是它的___________和__________之和,即D(v)=ID(v)+OD(v)。 10.____________是指一条路径上所经过的边或弧的数目。 11.若一条路径上除开始结点和结束结点外(开始结点和结束结点也可以为不同顶点), 其余顶点均不相同,则称该路径为_____________。 12.若一条路径上的开始结点和结束结点为同一个顶点,则称该路径为________或_______。同时除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路称_________或__________。 13.一个____________称为有向无环图,简称为DAG图。 三、问答题 1.已知一个无向图的邻接矩阵如图所示,请画出该无向图,并写出从顶点0出发分别进行深度优先和广度优先搜索遍历得到的顶点序列。 5.依据以下无向图,使用普里姆算法,写出构造该图的最小生成树的过程。 5.请使用克鲁斯卡尔算法,画出构造下图G的最小生成树的过程 一个无向图G 习题八 一、选择题 1.顺序查找方法适合于存储结构为()的线性表 A.散列存储 B.索引存储 C.散列存储或索引存储 D.顺序存储或链接存储 2.采用折半查找法查找长度为n的线性表时,每个元素的平均查找长度为:()A.O(n2) B.O(n log2n) C.O(n) D.O(log2n) 3.对线性表进行折半查找时要求线性表必须:() A.以顺序方式存储B.以顺序方式存储,且结点按关键字有序排序 C.以链式方式存储D.以链式方式存储,且结点按关键字有序排序 4.可以在哈希查找过程中处理冲突的方法是:() A.关键字比较法B.线性探查法 C.数字分析法D.除留余数法 5..己知一个有序表为(11,22,33,44,55,66,77, 88,99), 则折半查找元素55需要比较( )次。 A.1 B.2 C.3 D.4 6.顺序查找法与二分查找法对存储结构的要求是( ) 。 A. 顺序查找与二分查找均只是适用于顺序表 B. 顺序查找与二分查找均既适用于顺序表, 也适用于链表 C. 顺序查找只是适用于顺序表 D. 二分查找适用于顺序表 二、填空题 1. 折半查找( Binary Search)又称为,是一种效率较高的一种查找算法。 2. 分块查找(Blocking Search)又称为,是一种以的形式来来进行的查找方法。分块查找是的一种改进,它是一种介于和折半查找之间的查找方法。 3. 如果对查找表只进行查询某个"特定的"数据元素是否在查找表中, 以及查找某"特定的"数据元素的各种属性两种类型的基本操作,而不进行插入和删除数据元素的查找表称为。 4. 如果在查找表中进行查找的过程中,同时插入查找表中不存在的数据元素,或者查找表中删除已存在的某个数据元素,则称此类查找表为。 5. 用折半法查找一个线性表时,该线性表必须具有的特点是。 6. 在一个查找表中,能够惟一的标识一个数据元素(或记录)的关键字称为。 7. 二叉排序树(Binary Sort Tree),又称为,它或者是一棵空树,或者是具有下列性质的一棵二叉树: (1) 若左子树不空,则左子树上所有结点的值。 (2) 若右子树不空,则右子树上所有结点的值。 (3) 左右子树又分别是。 8. 对有序表(25,30,32,38,47,54,62,68,90,95) 用二分查找法查找32,则所需的比较次数为。 三、问答题 1.输入一个正整数序列{3,45,91,25,14,76,56,65},建立一棵二叉排序树,再从该树上删除结点76,请画出初始二叉排序树和删除结点后的二叉排序树。 2.关键字序列A=(36,27,68,33,97,40,81,24,23,90,32,14)共12个数据,哈希表长为13, 采用的哈希函数为:h (key) = key % 13。如果采用开放定址的线性探测再散列方法解决冲突,请构造哈希表并求其平均查找长度。 3.已知一个顺序存储的有序表为(17,25,33,37,47,53,59,65,73,77),试画出对应的折半查找判定树,并求其平均查找长度。 4.设有一组关键字{81,25,91,24,49,56,83,66},采用散列函数h(key)=key % 11,采用线性探查法解决冲突,试在0~10的散列地址空间中对该组关键字序列构造散列表,并求出在该散列表上进行查找的平均查找长度。 5.设散列表ht[0..12],既表的大小m=13。散列函数h(key)=key % 13,采用线性探查法解决冲突,试用关键字序列{15,21,57,7,6,18,40,27}建立散列表,并求出在该散列表上进行查找的平均查找长度。 四、程序设计题 1.设计一个在二叉排序树中查找指定关键字的结点的非递归算法。 2.编写算法,用折半查找算法在一个有序的顺序表中插入x 结点,并保持结点的有序性。 3. 写出二叉排序树的插入结点的递归算法,并利用插入算法写出建立一个有n个结点的二叉排序树算法。 4. 写出折半查找的递归算法。 习题九 一、选择题 1.在所有的排序方法中,关键字比较的次数与记录初始排列秩序无关的是()。 A.冒泡排序B.希尔排序 C.直接选择排序D.直接插人排序 2.一组记录的排序码(46,79,56,38,40,84),则利用堆排序(建立大根堆)的方法建立的初始堆为:() A.79,46,56,38,40,80 B.84,79,56,38,40,46 C.84,79,56,46,40,38 D.84,56,79,40,46,38 3.设有5000个无序的元素,希望用最快的速度挑选出其中前10个最大的元素,最好选用:() A.基数排序 B.快速排序 C.堆排序D.冒泡排序 4.从未排序序列中依次取出元素与已经排好序的序列中的元素作比较,将其放入已排序序列的正确位置上,此方法称为()。 A.插人排序B.选择排序 C.交换排序D.归并排序 5.依次将每两个相邻的有序表合并成一个有序表的排序方法称为()。 A.插人排序B.交换排序 C.选择排序D.归并排序 6.当两个元素出现逆序的时候就交换位置,这种排序方法称为()。 A.插人排序B.交换排序 C.选择排序D.归并排序 7.在正常情况下,直接插人排序的时间复杂度为()。 A.O(log2n)B.O(n) C.O(n log2n) D.O(n2) 8.在正常情况下,冒泡排序的时间复杂度为()。 A.O(log2n) B.O(n) C.O(nlog2n) D.O(n2) 9..堆排序算法时间复杂度为()。 A.O(log2n)B.O(n) C.O(nlog2n) D.O(n2) 二、填空题 1.每次直接或通过基准元素间接比较两个元素,若出现逆序排列时就交换他们的位置,此种排序方法叫做排序;每次使两个相邻的有序表合并成一个有序表的排序方法叫做排序。 2.每次从无序子表中取出一个元素,把它插入到有序子表中的适当位置,此种排序方法叫做排序;每次从无序子表中挑选出一个最小或者最大元素,把它交换到有序表的一端,此种排序方法叫做排序。 3.假设对记录的次关键字进行排序,记录之中有两条记录Ri和Rj,它们的关键字Ki 和Kj相等,在排序之前记录Ri在Rj之前,若排序之后记录Ri仍在Rj之前,则称排序方法是___________; 相反,若经过某种排序之后Ri在Rj之后,则称所用的排序方法是 ____________。 4.根据所排序过程中所用存储器的不同,可以将排序方法分为__________和__________。 5.__________的基本思想是:每一趟将一个待排序的记录按其关键字的大小,插入到已经排好序的部分记录之中,使之构成一个新的有序序列,直到所有记录全部插入完成,所有待排记录的关键字都成为一个有序序列。 6.直接插人排序是一种__________.(填是否稳定)的排序算法。 7.冒泡排序是一种__________(填是否稳定)的排序算法。 填空题(10 * 1 '= 10') 一、概念题 22当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 23当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 2.6. 带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 36循环队列的引入,目的是为了克服假溢出。 4.2. 长度为0的字符串称为空串。 4.5. 组成串的数据元素只能是字符。 4.8. 设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 7.2. 为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 5.7. 广义表的深度是广义表中括号的重数 7.8. 有向图G可拓扑排序的判别条件是有无回路。 7.9. 若要求一个稠密图的最小生成树,最好用Prim算法求解。 8.8. 直接定址法法构造的哈希函数肯定不会发生冲突。 9.2. 排序算法所花费的时间,通常用在数据的比较和交换两大操作。 1.1. 通常从正确性、可读性、健壮性、时空效率等几个方面评价算法的(包括程序)的质量。 1.2. 对于给定的n元素,可以构造出的逻辑结构有集合关系、线性关系树形关系、图状关系四种。 1.3. 存储结构主要有顺序存储、链式存储、索引存储、散列存储四种。 1.4. 抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不 变,都不影响其外部使用。 1.5. 一个算法具有五大特性:有穷性、确定性、可行性,有零个或多个输入、有一个或多个输入。 2.8. 在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句: s_>prior= p_>prior; s->next= p; p_>prior- next= s; p_>prior= s;。 2.9. 在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作 (如插入和删除)在各种情况下统一。 3.1. 队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 3.2 .栈是限定尽在表位进行插入或删除操作的线性表。 3.5. 在链式队列中,判定只有一个结点的条件是(Q->rear==Q->fro nt)&&(Q->rear!=NULL) 。 3.7. 已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x;] p_>next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 3.8. 循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt 和(fron t=-1 &&rear+ ^=MAXSIZE) 。 4.3. 串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 4.7. 字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 5.3. 所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数,则称该矩阵为稀 疏矩阵。 5.4. —维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种?不同的存储 方式。 7.4. 在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是求邻接矩阵中第?i列非10元素的个数。 7.10. AOV网中,结点表示活动,边表示活动之间的优先关系,AOE网中,结点表示事件,边表示活动。 9.1. 按排序过程中依据不同原则对内部排序方法进行分类,主要有选择排序、交换排序、插入排序归并排序等4类。 9.3 .在堆排序、快速排序和归并排序中若只从排序结果的稳定性考虑,则应选择归并排序方法;若只从平均情况下 排序最快考虑,则应选择快速排序方法;若只从最坏情况下排序最快且要节省类存考虑,则应选择堆排序方法。 9.4. 直接插入排序用监视哨的作用是存当前要的插入记录,可又省去查找插入位置时对是否出界的判断。 9.6. 设表中元素的初始状态是按键值递增的,则直接插入排序最省时间,快速排序最费时间。 4.9. 下列程序判断字符串s是否对称,对称则返回1,否则返回0;如?(abba”返回1, ? (”abab”)返回0. Int f (char*s) { Int i=0,j=0; 数据结构例题(及答案) 项目一习题(答案) 一选择题 1. 算法的计算量的大小称为计算的(B )。 A( 效率 B. 复杂性 C. 现实性 D. 难度 2.算法的时间复杂度取决于(C ) A(问题的规模 B. 待处理数据的初态 C. A和B 3(从逻辑上可以把数据结构分为(C )两大类。 A(动态结构、静态结构 B(顺序结构、链式结构 C(线性结构、非线性结构 D(初等结构、构造型结构 4(连续存储设计时,存储单元的地址(A )。 A(一定连续 B(一定不连续 C(不一定连续 D(部分连续,部分不连续 5. 以下属于逻辑结构的是(C )。 A(顺序表 B. 哈希表 C.有序表 D. 单链表 二、判断题 1. 数据元素是数据的最小单位。(×) 2. 记录是数据处理的最小单位。(×) 3. 数据的逻辑结构是指数据的各数据项之间的逻辑关系;(×) 4(程序一定是算法。(×) 5. 在顺序存储结构中,有时也存储数据结构中元素之间的关系。(×) 6. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。(×) 7. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。(?) 8. 数据的逻辑结构说明数据元素之间的顺序关系,它依赖于计算机的储存结构. (×) 三、填空 1(数据的物理结构包括数据元素的表示和数据元素间关系的表示。 2. 对于给定的n个元素,可以构造出的逻辑结构有集合,线性结构,树形 结构,图状结构或网状结构四种。 3(数据的逻辑结构是指数据的组织形式,即数据元素之间逻辑关系的总体。而 逻辑关系是指数据元素之间的关联方式或称“邻接关系”。 4(一个数据结构在计算机中表示(又称映像) 称为存储结构。 5(抽象数据类型的定义仅取决于它的一组逻辑特性,而与在计算机内部如何表 示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响 其外部使用。 6(数据结构中评价算法的两个重要指标是算法的时间复杂度和空间复杂度。 7. 数据结构是研讨数据的逻辑结构和物理结构,以及它们之间的相互 关系,并对与这种结构定义相应的操作(运算),设计出相应的算法。 ( 一个算法具有5个特性: 有穷性、确定性、可行性,有零个或多个输入、 有一个或多个输8 出。 四、应用题 1. 1. 数据结构是一门研究什么内容的学科, 答:数据结构是一门研究在非数值计算的程序设计问题中,计算机的操作对象 及对象间的关系和施加于对象的操作等的学科 2. 2. 数据元素之间的关系在计算机中有几种表示方法,各有什么特点, 答:四 种表示方法 栈和队列的共同特点是__________________________ .栈通常采用的两种存储结构是______________________ .用链表表示线性表的优点是_______________________ 8.在单链表中,增加头结点的目的是___________________ 9.循环链表的主要优点是________________________- 12.线性表的顺序存储结构和线性表的链式存储结构分别是 __________________________ 13.树是结点的集合,它的根结点数目是_____________________ 14.在深度为5的满二叉树中,叶子结点的个数为_______________ 15.具有3个结点的二叉树有(_____________________ 16.设一棵二叉树中有3个叶子结点,有8个度为1的结点,则该二叉树中总的结点数为____________________ 17.已知二叉树后序遍历序列是dabec,中序遍历序列是debac,它的前序遍历序列是 ____________________________ 18.已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为______________________ 19.若某二叉树的前序遍历访问顺序是abdgcefh,中序遍历访问顺序是dgbaechf,则其后序遍历的结点访问顺序是_______________________ 20.数据库保护分为:安全性控制、完整性控制、并发性控制和数据的恢复。 在计算机中,算法是指_______________________ 算法一般都可以用哪几种控制结构组合而成_____________________ .算法的时间复杂度是指______________________ 5. 算法的空间复杂度是指__________________________ 6. 算法分析的目的是__________________________ 数据结构习题集答案 第1章绪论 1.1 简述下列术语:数据,数据元素、数据对象、数据结构、存储结构、数据类型和抽象数据类型。 解:数据是对客观事物的符号表示。在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。 数据元素是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。 数据对象是性质相同的数据元素的集合,是数据的一个子集。 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。存储结构是数据结构在计算机中的表示。 数据类型是一个值的集合和定义在这个值集上的一组操作的总称。抽象数据类型是指一个数学模型以及定义在该模型上的一组操作。是对一般数据类型的扩展。 1.2 试描述数据结构和抽象数据类型的概念与程序设计语言中数据类型概念的区别。 解:抽象数据类型包含一般数据类型的概念,但含义比一般数据类型更广、更抽象。一般数据类型由具体语言系统内部定义,直接提供给编程者定义用户数据,因此称它们为预定义数据类型。抽象数据 类型通常由编程者定义,包括定义它所使用的数据和在这些数据上所进行的操作。在定义抽象数据类型中的数据部分和操作部分时,要求只定义到数据的逻辑结构和操作说明,不考虑数据的存储结构和操作的具体实现,这样抽象层次更高,更能为其他用户提供良好的使用接口。 1.3 设有数据结构(D,R),其中 {}4,3,2,1d d d d D =,{}r R =,()()(){}4,3,3,2,2,1d d d d d d r = 试按图论中图的画法惯例画出其逻辑结构图。 解: 1.4 试仿照三元组的抽象数据类型分别写出抽象数据类型复数和有理数的定义(有理数是其分子、分母均为自然数且分母不为零的分数)。 解:ADT Complex{ 数据对象:D={r,i|r,i 为实数} 数据关系:R={ 数据结构试题及答案 一、单项选择题 (1)一个算法应该就是()。 A)程序???B)问题求解步骤得描述 C)要满足五个基本属性??D) A与C (2)算法指得就是()。 A)计算机程序???B)解决问题得计算方法 C)排序算法???D)解决问题得有限运算序列。 (3)与数据元素本身得形式、内容、相对位置、个数无关得就是数据得()。 A) 存储结构B) 逻辑结构C)算法D)操作 (4)从逻辑上可以把数据结构分为( )两大类。 A)动态结构、静态结构??B) 顺序结构、链式结构 C)线性结构、非线性结构???D)初等结构、构造型结构 (5)下列叙述中正确得就是()。 A)一个逻辑数据结构只能有一种存储结构 B)数据得逻辑结构属于线性结构,存储结构属于非线性结构 C)一个逻辑数据结构可以有多种存储结构,且各种存储结构不影响数据处理得效率 D)一个逻辑数据结构可以有多种存储结构,且各种存储结构影响数据处理得效率 (6)数据得基本单位就是() ?A) 数据项??B) 数据类型C)数据元素??D)数据变量 (7)下列程序得时间复杂度为() i=0;s=0; while(s 数据结构模拟卷(含答案)经典习题 练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4 6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位10. 下列图示的顺序存储结构表示的二叉树是( ) 填空题(10 * 1’ = 10’) 一、概念题 .当对一个线性表经常进行的是插入和删除操作时,采用链式存储结构为宜。 .当对一个线性表经常进行的是存取操作,而很少进行插入和删除操作时,最好采用顺序存储结构。 .带头结点的单链表L中只有一个元素结点的条件是L->Next->Next==Null。 .循环队列的引入,目的是为了克服假溢出。 .长度为0的字符串称为空串。 .组成串的数据元素只能是字符。 .设T和P是两个给定的串,在T中寻找等于P的子串的过程称为模式匹配,又称P为模式。 .为了实现图的广度优先搜索,除一个标志数组标志已访问的图的结点外,还需要队列存放被访问的结点实现遍历。 .广义表的深度是广义表中括号的重数 .有向图G可拓扑排序的判别条件是有无回路。 .若要求一个稠密图的最小生成树,最好用Prim算法求解。 . 直接定址法法构造的哈希函数肯定不会发生冲突。 .排序算法所花费的时间,通常用在数据的比较和交换两大操作。 .通常从正确性﹑可读性﹑健壮性﹑时空效率等几个方面评价算法的(包括程序)的质量。 .对于给定的n元素,可以构造出的逻辑结构有集合关系﹑线性关系树形关系﹑图状关系四种。 .存储结构主要有顺序存储﹑链式存储﹑索引存储﹑散列存储四种。 .抽象数据类型的定义仅取决于它的一组逻辑特性,而与存储结构无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。 .一个算法具有五大特性:有穷性﹑确定性﹑可行性,有零个或多个输入﹑有一个或多个输入。 .在双向链表结构中,若要求在p指针所指的结点之前插入指针为s所指的结点,则需执行下列语句:s->prior= p->prior; s->next= p; p->prior- next= s; p->prior= s;。 .在单链表中设置头结点的作用是不管单链表是否为空表,头结点的指针均不空,并使得对单链表的操作(如插入和删除)在各种情况下统一。 .队列是限制在表的一端进行插入和在另一端进行删除的线性表,其运算遵循先进先出原则。 .栈是限定尽在表位进行插入或删除操作的线性表。 .在链式队列中,判定只有一个结点的条件是(Q->rear==Q->front)&&(Q->rear!=NULL)。 .已知链队列的头尾指针分别是f和r,则将x入队的操作序列是node *p=(node *)malloc(node); p->next=x; p->next=NULL; if(r) {r->next=p; r=p;} else {r=p; f=p;}。 .循环队列的满与空的条件是(rear+1)%MAXSIZE==fornt和(front=-1&&rear+1==MAXSIZE)。 .串是一种特殊的线性表,其特殊性表现在数据元素都是由字符组成。 .字符串存储密度是串值所占存储位和实际分配位的比值,在字符串的链式存储结构中其结点大小是可变的。 .所谓稀疏矩阵指的是矩阵中非零元素远远小于元素总数,则称该矩阵为矩阵中非零元素远远小于元素总数,则称该矩阵为稀疏矩阵。 .一维数组的逻辑结构是线性结构,存储结构是顺序存储结构;对二维或多维数组,分别按行优先和列优先两种不同的存储方式。 .在有向图的邻接矩阵表示中,计算第i个顶点入度的方法是求邻接矩阵中第i列非0元素的个数。 网中,结点表示活动,边表示活动之间的优先关系,AOE网中,结点表示事件,边表示活动。 .按排序过程中依据不同原则对内部排序方法进行分类,主要有选择排序﹑交换排序﹑插入排序归并排序等4类。 .在堆排序、快速排序和归并排序中若只从排序结果的稳定性考虑,则应选择归并排序方法;若只从平均情况下排序最快考虑,则应选择快速排序方法;若只从最坏情况下排序最快且要节省类存考虑,则应选择堆排序方法。 .直接插入排序用监视哨的作用是存当前要的插入记录,可又省去查找插入位置时对是否出界的判断。 .设表中元素的初始状态是按键值递增的,则直接插入排序最省时间,快速排序最费时间。 .下列程序判断字符串s是否对称,对称则返回1,否则返回0;如?(“abba”)返回1,?(”abab”)返回0. Int f (char*s) { Int i=0,j=0; 求串长*/ 一、选择题(20分) 1.下面关于线性表的叙述错误的是(D )。 (A) 线性表采用顺序存储必须占用一片连续的存储空间 (B) 线性表采用链式存储不必占用一片连续的存储空间 (C) 线性表采用链式存储便于插入和删除操作的实现 (D) 线性表采用顺序存储便于插入和删除操作的实现 2.设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为(A )。 (A) BADC (B) BCDA (C) CDAB (D) CBDA 3.设某棵二叉树中有2000个结点,则该二叉树的最小高度为(C )。 (A) 9 (B) 10 (C) 11 (D) 12 4.设二叉排序树中有n个结点,则在二叉排序树的平均平均查找长度为(B )。 (A) O(1) (B) O(log2n) (C) (D) O(n2) 5.设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,则用下列(B )方法可以达到此目的。 (A) 快速排序(B) 堆排序(C) 归并排序(D) 插入排序 第9小题分析:9快速排序、归并排序和插入排序必须等到整个排序结束后才能够求出最小的10个数,而堆排序只需要在初始堆的基础上再进行10次筛选即可,每次筛选的时间复杂度为O(log2n)。 6.下列四种排序中(D )的空间复杂度最大。 (A) 插入排序(B) 冒泡排序(C) 堆排序(D) 归并排序 7.设一维数组中有n个数组元素,则读取第i个数组元素的平均时间复杂度为(C )。 (A) O(n) (B) O(nlog2n) (C) O(1) (D) O(n2) 8.设一棵二叉树的深度为k,则该二叉树中最多有(D )个结点。 (A) 2k-1 (B) 2k(C) 2k-1(D) 2k-1 9.在二叉排序树中插入一个结点的时间复杂度为(B )。 (A) O(1) (B) O(n) (C) O(log2n) (D) O(n2) 10.设用链表作为栈的存储结构则退栈操作(B )。 (A) 必须判别栈是否为满(B) 必须判别栈是否为空 (C) 判别栈元素的类型(D) 对栈不作任何判别 11.下列四种排序中(A )的空间复杂度最大。 (A) 快速排序(B) 冒泡排序(C) 希尔排序(D) 堆 12.设某二叉树中度数为0的结点数为N0,度数为1的结点数为N l,度数为2的结点数为N2,则下列等式成立的是(C )。 (A) N0=N1+1 (B) N0=N l+N2(C) N0=N2+1 (D) N0=2N1+l 13.设有序顺序表中有n个数据元素,则利用二分查找法查找数据元素X的最多比较次数不 超过(A )。 (A) log2n+1 (B) log2n-1 (C) log2n (D) log2(n+1) 14.数据的最小单位是(A )。 (A) 数据项(B) 数据类型(C) 数据元素(D) 数据变量 15.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为(D )。 (A) O(log2n) (B) O(1) (C) O(n2) (D) O(n) 练习题 一、单项选择题 1. 若将数据结构形式定义为二元组(K,R),其中K是数据元素的有限集合,则R是K上( ) A. 操作的有限集合 B. 映象的有限集合 C. 类型的有限集合 D. 关系的有限集合 2. 在长度为n的顺序表中删除第i个元素(1≤i≤n)时,元素移动的次数为( ) A. n-i+1 B. i C. i+1 D. n-i 3. 若不带头结点的单链表的指针为head,则该链表为空的判定条件是( ) A. head==NULL B. head->next==NULL C. head!=NULL D. head->next==head 4. 引起循环队列队头位置发生变化的操作是( ) A. 出队 B. 入队 C. 取队头元素 D. 取队尾元素 5. 若进栈序列为1,2,3,4,5,6,且进栈和出栈可以穿插进行,则不.可能出现的出栈序列是( ) A. 2,4,3,1,5,6 B. 3,2,4,1,6,5 C. 4,3,2,1,5,6 D. 2,3,5,1,6,4 1 6. 字符串通常采用的两种存储方式是( ) A. 散列存储和索引存储 B. 索引存储和链式存储 C. 顺序存储和链式存储 D. 散列存储和顺序存储 7. 数据结构是() A.一种数据类型 B.数据的存储结构 C.一组性质相同的数据元素的集合 D.相互之间存在一种或多种特定关系的数据元素的集合 8. 算法分析的目的是() A.辨别数据结构的合理性 B.评价算法的效率 C.研究算法中输入与输出的关系 D.鉴别算法的可读性 9. 在线性表的下列运算中,不.改变数据元素之间结构关系的运算是 () A.插入B.删除 C.排序D.定位 10. 下列图示的顺序存储结构表示的二叉树是( ) 2 第二章习题 1. 描述以下三个概念的区别:头指针,头结点,首元素结点。 2. 填空: (1)在顺序表中插入或删除一个元素,需要平均移动元素,具体移动的元素个数与有关。 (2)在顺序表中,逻辑上相邻的元素,其物理位置相邻。在单链表中,逻辑上相邻的元素,其物理位置相邻。 (3)在带头结点的非空单链表中,头结点的存储位置由指示,首元素结点的存储位置由指示,除首元素结点外,其它任一元素结点的存储位置由指示。3.已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点。按要求从下列语句中选择合适的语句序列。 a. 在P结点后插入S结点的语句序列是:。 b. 在P结点前插入S结点的语句序列是:。 c. 在表首插入S结点的语句序列是:。 d. 在表尾插入S结点的语句序列是:。 供选择的语句有: (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; 4. 设线性表存于a(1:arrsize)的前elenum个分量中且递增有序。试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。 5. 写一算法,从顺序表中删除自第i个元素开始的k个元素。 6. 已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有大于mink且小于maxk的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数)。 7. 试分别以不同的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., an)逆置为(an, an-1,..., a1)。 (1)以一维数组作存储结构,设线性表存于a(1:arrsize)的前elenum个分量中。 (2)以单链表作存储结构。 8. 假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和B表归并成一个按元素值递减有序排列的线性表C,并要求利用原表(即A 表和B表的)结点空间存放表C。 2013-2014学年二学期数据结构期末考试模拟试卷(1~6卷) 一、应用题(3小题,共24分) 1已知某字符串S中共有8种字符,各种字符分别出现2次、1次、4次、5次、7次、3 次、4次和9次,对该字符串用[0,1]进行前缀编码,问该字符串的编码至少有多少位。 【解答】以各字符出现的次数作为叶子结点的权值构造的哈夫曼编码树如图所示。其带权路 径长度=2X 5+1X 5+3X 4+5X 3+9X 2+4X 3+4X 3+7X 2=98,所以,该字符串的编码长度至少为98位。 2.已知关键码序列为(Ja n, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec), 散列表的地址空间为0~16,设散列函数为H(x)= [i/2」(取下整数),其中i为关键码 中第一个字母在字母表中的序号,采用链地址法处理冲突构造散列表,并求等概率情况下查找成功的平均查找长度。 【解答】H(Ja n)=10/2=5, H(Feb)=6/2=3, H(Mar)=13/2=6, H(Apr)=1/2=0 H(May)=13/2=6, H(Ju n)=10/25, H(Jul)=10/25, H(Aug)=1/2=0 H(Sep)=19/2=8, H(Oct) =15/2=7, H(Nov) =14/2=7, H(Dec) =4/2=2 采用链地址法处理冲突,得到的开散列表如下: 平均查找长度=(1 X 7+2X 4+3X 1)/12=18/12 3.分析下面各程序段的时间复杂度 (1)s1(int n) { int p=1,s=0; for (i=1;iv=n;i++) { p*=i;s+=p; } return(s); } ——0(n) (2)s2(int n) x=0;y=0; For (k=1;kv=n;k++) x++; For (i=1;iv=n;i++) For (j=1;jv=n;j++) y++; ——0(n) 1?下述算法的功能是什么? ListNode *Demo l(LinkList L P ListNode *p) ("L是有头结蛊的单链表 ListNodc *q=L->rLCxt P (1) V ‘V … 」(1 )返回结点*p的直接前趋结点地址。 q=q->nest; if (q) return q, else ?ro< #*p not in L"); I ⑵ i/oid Demo2(LisINode *p ,ListNode +q) 〔//p t*q*8S 表中的 两个结点 (2)交换结点*p和结点*q (p和q的值不变)。 DataTypetemp; temp=p->data, p->data=q->data; q-x^ata^emp, 1.对给定的一组权值W=( 5, 2, 9, 11, 8, 3, 7),试构造相应的哈夫曼树,并计算它的带权路径长度。【解答】构造的哈夫曼树如图所示。 数据结构经典例题 1.设计一个算法将L拆分成两个带头节点的单链表L1和L2。 void split(LinkList *&L,LinkList *&L1,LinkList *&L2) { LinkList *p=L->next,*q,*r1; //p指向第1个数据节点 L1=L; //L1利用原来L的头节点 r1=L1; //r1始终指向L1的尾节点 L2=(LinkList *)malloc(sizeof(LinkList));//创建L2的头节点 L2->next=NULL; //置L2的指针域为NULL while (p!=NULL) { r1->next=p; //采用尾插法将*p(data值为ai)插入L1中 r1=p; p=p->next; //p移向下一个节点(data值为bi) q=p->next; //由于头插法修改p的next域,故用q保存*p的后继节点 p->next=L2->next; //采用头插法将*p插入L2中 L2->next=p; p=q; //p重新指向ai+1的节点 } r1->next=NULL; //尾节点next置空 } 2.查找链表中倒数第k个位置上的节点(k为正整数)。若查找成功,算法输出该节点的data域的值,并返回1;否则,只返回0。 typedef struct LNode {int data; struct LNode *link; } *LinkList; int Searchk(LinkList list,int k) { LinkList p,q; int count=0; p=q=list->link; while (p!=NULL) { if (count 数据结构上机实验题目 实验一线性表的顺序存储结构 实验学时 2学时 背景知识:顺序表的插入、删除及应用。 目的要求: 1.掌握顺序存储结构的特点。 2.掌握顺序存储结构的常见算法。 实验容 1.输入一组整型元素序列,建立顺序表。 2.实现该顺序表的遍历。 3.在该顺序表中进行顺序查找某一元素,查找成功返回1,否则返回0。4.判断该顺序表中元素是否对称,对称返回1,否则返回0。 5.实现把该表中所有奇数排在偶数之前,即表的前面为奇数,后面为偶数。 6.输入整型元素序列利用有序表插入算法建立一个有序表。 7.利用算法6建立两个非递减有序表并把它们合并成一个非递减有序表。 8. 利用该顺序结构实现循环队列的入队、出队操作。 8.编写一个主函数,调试上述算法。 #include #define OVERFLOW 0 #define MAXSIZE 100 typedef int ElemType; typedef struct list {ElemType elem[MAXSIZE]; int length; }Sqlist; void Creatlist(Sqlist &L) {int i; printf("请输入顺序表的长度:"); //输入一组整型元素序列,建立一个顺序表。 scanf("%d",&L.length); for(i=0;i 数据结构习题及解答 第1章 概述 【例1-1】分析以下程序段的时间复杂度。 for(i=0;i 得:T(n)=O( n 2 log) 【例1-4】有如下递归函数fact(n),分析其时间复杂度。 fact(int n) { if(n<=1) return(1);① else return(n*fact(n-1));② } 解:设fact(n)的运行时间函数是T(n)。该函数中语句①的运行时间是O(1),语句②的运行时间是T(n-1)+ O(1),其中O(1)为常量运行时间。 由此可得fact(n)的时间复杂度为O(n)。 习题1 一、单项选择题 1.数据结构是指(1. A )。 A.数据元素的组织形式 B.数据类型 C.数据存储结构 D.数据定义 2.数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为(2. C )。 A.存储结构 B.逻辑结构 C.链式存储结构 D.顺序存储结构 3.树形结构是数据元素之间存在一种(3. D )。 A.一对一关系 B.多对多关系 C.多对一关系 D.一对多关系 4.设语句x++的时间是单位时间,则以下语句的时间复杂度为(4. B)。 for(i=1; i<=n; i++) for(j=i; j<=n; j++) x++; A.O(1) B.O(2 n) C.O(n) D.O(3n) 5.算法分析的目的是(5. C、),算法分析的两个主要方面是(A)。 (1) A.找出数据结构的合理性 B.研究算法中的输入和输出关系 C.分析算法的效率以求改进 D.分析算法的易懂性和文档性 (2) A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 6.计算机算法指的是(6. C、),它具备输入,输出和(B)等五个特性。 (1) A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 (2) A.可行性,可移植性和可扩充性 B.可行性,确定性和有穷性 C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性 7.数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要(7. B)。 第三章栈和队列 一、判断题: 1、栈和队列都是限制存取点的线性结构(易) 2、栈和队列是两种重要的线性结构。(易) 3、带头结点的单链表形式的队列,头指针F指向队列的头结点,尾指针R指向队列的最后一个结点(易) 4、在对不带头结点的链队列作出队操作时,不会改变头指针的值。(易) 答案:1-4 √√×× 二、选择题: 1、一个栈的入栈序列a,b,c,d,e,则栈的不可能的输出序列是C____。 A、 edcba B、 decba C、 dceab D、 abcde 2、若已知一个栈的入栈序列是1,2,3,…,n,其输出序列为p1,p2,p3,…,pn,若p1=n,则pi 为_C___。 A、 i B、 n=i C、 n-i+1 D、不确定 3、栈结构通常采用的两种存储结构是_A___。 A、顺序存储结构和链式存储结构 B、散列方式和索引方式 C、链表存储结构和数组 D、线性存储结构和非线性存储结构 4、判定一个顺序栈ST(最多元素为m0)为空的条件是_B___。A、top !=0 B、top= =0 C、top !=m0 D、top= =m0-1 5、判定一个顺序栈ST(最多元素为m0)为栈满的条件是D。A、top!=0 B、top= =0 C、top!=m0 D、top= =m0-1 6、队列操作的原则是( A ) A、先进先出 B、后进先出 C、只能进行插入 D、只能进行删 除 7、向一个栈顶指针为HS的链栈中插入一个s所指结点时,则执行__ _C_。(不带空的头结点) (易) A、HS—>next=s;9 B、s—>next= HS—>next; HS—>next=s; C、s—>next= HS; HS=s; D、s—>next= HS; HS= HS—>next 基本概念典型例题 一、单项选择题 [例6-1]数据结构用集合的观点可以表示为一个二元组DS=(D,R)。其中,D是( ①)的有穷集合,R是D上( ②)的有限集合。 ①A.算法B. 数据元素C. 数据操作D. 逻辑结构 ②A. 操作B. 映像C. 存储D.关系 解析:由数据结构的集合形式化定义可知,本题答案为:①B;②D。 [例6-2]数据的常用存储结构中不包括( )。 A.顺序存储结构B.线性结构C.索引存储结构D.散列存储结构 解析:数据通常有四种基本的存储方法,即顺序存储方法、链式存储方法、索引存储 方法和散列存储方法。由此可知,本题答案为:B。 [例6-3] 算法指的是( ①),它必须具备( ②)这三个特性。 ①A.计算方法B.排序方法C.解决问题的步骤序列D.调度方法 ②A.可执行性、可移植性、可扩充性B.可执行性、确定性、有穷性 C.确定性、有穷性、稳定性D.易读性、稳定性、安全性 解析:算法是对特定问题求解步骤的一种描述,是由若于条指令组成的有限序列。它 必须满足以下性质:输人性、输出性、有穷性、确定性、无二义性和可行性。由此可知,本 题答案为:①㈠②B。 [例6-4] 在下面的程序段中,对x的赋值语句的执行频度为( )。 for(i=0;i 《数据结构》课程设计题目 (程序实现采用C语言) 题目1:猴子选王(学时:3) 一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第n个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。 要求:m及n要求从键盘输入,存储方式采用向量及链表两种方式实现该问题求解。 //链表 #include { pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void KickFromRing(RingNodePtr pHead, int n) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == n) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr;(完整word版)数据结构课后习题及答案
数据结构经典例题
经典数据结构面试题(含答案)
数据结构课后习题答案
数据结构试题库答案
数据结构模拟卷(含答案)经典习题培训讲学
数据结构课后习题及答案
大数据结构经典复习题(仅供参考)
数据结构模拟卷(含答案)经典习题
数据结构课后习题及解析第二章
数据结构题库教材
数据结构经典例题
经典数据结构上机题_答案解析
数据结构各章习题及答案
数据结构相关题库及答案
数据结构典型例题
数据结构经典题目c语言代码