数据结构习题及答案.docx

上传人:b****5 文档编号:7934699 上传时间:2023-01-27 格式:DOCX 页数:27 大小:117.24KB
下载 相关 举报
数据结构习题及答案.docx_第1页
第1页 / 共27页
数据结构习题及答案.docx_第2页
第2页 / 共27页
数据结构习题及答案.docx_第3页
第3页 / 共27页
数据结构习题及答案.docx_第4页
第4页 / 共27页
数据结构习题及答案.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

数据结构习题及答案.docx

《数据结构习题及答案.docx》由会员分享,可在线阅读,更多相关《数据结构习题及答案.docx(27页珍藏版)》请在冰豆网上搜索。

数据结构习题及答案.docx

数据结构习题及答案

习题一

1.填空题

(1)数据的逻辑结构可形式地用一个二元组B=(K,R)来表示,其中K是_________,R是________。

(2)存储结构可根据数据元素在机器中的位置是否连续分为____,____。

(3)算法的基本要求有_____,_____,____,____,____。

(4)度量算法效率可通过_______,_______两方面进行。

2.简述下列术语:

数据数据元素数据对象数据结构存储结构数据类型。

3.常用的存储表示方法有哪几种?

4.举例说明一下数据结构和算法的关系。

5.设有数据逻辑结构为B=(K,R),K={k1,k2,……,k9}

r={,,,,,,,,,,}

画出这个逻辑结构的图示,并确定相对于r哪些结点是开始结点,哪些结点是终端结点?

6.试举一个数据结构的例子,并叙述其逻辑结构、存储结构、运算三方面的内容。

7.何谓算法?

试详述算法设计的目的和算法必须满足的条件。

8.编写一个算法,对三个两位数按由大到小的顺序进行排序。

描述构造该算法的思维过程。

习题二

1.如定理2.1所描述的,从盒子中往外取球,在1-4所给的答案中,哪一个是i,j,k对应的值。

①Red,5,6

②Blue,5,6

③Blue,3,Red

④6,5,Red

2.如定理2.1所描述的,从盒子往外取球,在1-4所给的答案中,哪一个是i,j,k对应的值。

①6,7,Red

②Blue,7,3

③8,2,Red

④9,Red,1

3.假设T1(N)=O(F(N)),T2(N)=O(F(N)),说明下列哪一个正确?

①T1(N)+T2(N)=O(F(N))

②T1(N)-T2(N)=O(F(N))

③T1(N)/T2(N)=O

(1)

④T1(N)=O(T2(N))

4.假设两个算法的时间复杂度分别为T1(N)=O(N)和T2(N)=O(N2),说明下列哪一个正确(估算)?

①T1(N)*T2(N)=O(N3)

②T1(N)+T2(N)=O(N2)

③T2(N)/T1(N)=O(N)

④T2(N)-T1(N)=O(N)

5.基于定理2.2的描述,为什么不能充分获得一个最大连续子序列之和的次平方运行时间?

6.读者思考:

由算法2.1到算法2.2的改进过程中,时间复杂度由三次降到二次,那么算法的空间复杂度有没有变化?

这种改进是不是无条件的?

7.将下列各式组合成与Big-Oh相等的函数。

x2,x2+x,x2-x,x3/(x–1)

8.确定以下各式的等价Big-Oh函数(估算)。

x4/(x+1),x3-x2,x2+x3

9.程序A和程序B经分析,有不超过150NlogN和N2的最坏情况下的运行时间,如可能,分别回答下列各问题:

①当N值很大时(N>10,000),哪个程序对运行时间有保证?

②N值较小(N<1000)时,哪一个程序对运行时间有更好的保证?

③在N=1,000的平均情况下,哪个程序运行更好?

④在所有可能的输入中,程序B总比程序A运行的快吗?

10.程序A和程序B经分析,有不超过150NlogN和N2的最坏情况下的运行时间,读者计算一下输入的值N在哪个范围里程序A的运行效率高于程序B,在哪个范围里程序B的运行效率高于程序A?

(提示:

可以通过建立方程式求解)

11.对于这些你用手工来计算的典型算法,确定其运行时间。

①两个N位整数相加

②两个N位整数相乘

③两个N位整数相除

12.设一个N位整数x,对于表达式x2+x-x3/(x–1),试确定其运行的时间复杂度(考虑“最坏情况分析法”)。

13.对于N个项来说,以下计算XN的算法运行时间是多少?

doublepower(doublex,intn)

{

doubleresult=1.0;

for(inti=0;i

result*=x;

returnresult;

}

14.试确定下面递归算法的时间复杂度:

Intfunc(intn)

{

if(n==0)

return(0);

return(n+func(n-1));

}

15.对于求最大子序列之和问题的平方算法而言,精确的确定语句最内部循环被执行多少次?

16.试计算在算法2.1中,精确的确定语句最内部循环被执行多少次?

17.一个算法在输入规模为100时,花费0.5ms的时间,在下列情况下,输入规模为500时,它将花费多少时间(低次项不考虑)?

①线性算法

②O(NlogN)

③平方算法

④立方算法

18.一个算法在输入规模为10时,花费0.05ms的时间,在下列情况下,输入规模为1000时,它将花费多少时间(低次项不考虑)?

①线性算法

②O(NlogN)

③平方算法

④立方算法

19.一个算法在输入规模为100时,花费0.5ms的时间,在下列情况下,一分钟可以解决一个多大的问题(低次项不考虑)?

①线性算法

②平方算法

③立方算法

20.一个算法在输入规模为10时,花费0.05ms的时间,在下列情况下,0.5分钟可以解决一个多大的问题(低次项不考虑)?

①线性算法

②平方算法

③立方算法

习题三

1.填空题

(1)线性表(a1,a2,…an)有两种存贮结构:

顺序存贮结构和链接存贮结构,请就这两种存贮结构完成下列填充:

____________存贮密度较大;_______________存贮利用率较高;___________可以随机存取;________________不可以随机存取;_______________插入和删除操作比较方便。

(2)在单链表中,删除指针P所指结点的后继结点的语句是__________。

(1)带头结点的单循环链表Head的判空条件是__________;不带头结点的单循环链表的判空条件是__________。

(2)删除带头结点的单循环链表Head的第一个结点的操作是__________;删除不带头结点的单循环链表的第一个结点的操作是__________。

(3)如果线性表中最常用的操作是存取第I个元素及其前驱的值,则采用_________存储方式节省时间。

A.单链表B.双链表C.单循环链表D.顺序表

2.动态与静态数据结构在计算机内存中的存储方式有何不同?

各有何优缺点?

3.描述以下三个概念的区别:

头指针、头结点、第一个结点。

4.试写出一个计算线性链表P中结点个数的算法,其中指针P指向该表中第一个结点,尾结点的指针域为空。

5.何时选用顺序表、何时选用链表作为线性表的存储结构为宜?

6.在顺序表中插入和删除一个结点需平均移动多少个结点?

具体的移动次数取决于哪两个因素?

7.在单链表、双链表和单循环链表中,若仅知道指针p指向某结点,不知道头指针,能否将结点*p从相应的链表中删去?

若可以,其时间复杂度各为多少?

8.假设LA、LB为两个递增有序的线性链表,试写出将这两个线性链表归并成一个线性链表LC的操作算法。

9.将学生成绩按成绩高低排列建立了一个有序单链表,每个结点包括:

学号、姓名和课程成绩。

(1)输入一个学号,如果与链表中的结点的学号相同,则将此结点删除;

(2)在链表中插入一个学生的记录,使得插入后链表仍然按成绩有序排列。

10.某仓库中有一批零件,按其价格从低到高的顺序构成一个单链表存于计算机内,链表的每一个结点说明同样价格的若干个零件。

现在又新有m个价格为s的零件需要进入仓库,试写出仓库零件链表增加零件的算法。

链表结点结构如下:

11.设指针P指向单链表的首结点,指针X指向单链表中的任意一个结点,写出在X前插入一个结点i的算法。

12.设多项式A和B采用线性链表的存储方式存放,试写出两个多项式相加的算法,要求把相加结果存放在A中。

13.设指针a和b分别为两个带头结点的单链表的头指针,编写实现从单连表La中删除自第i个数据元素起,共length个数据元素、并把它们插入到单链表Lb中第j个元素之前的算法。

14.设La和Lb是两个有序的循环链表,Pa和Pb分别指向两个表的表头结点,是写一个算法将这两个表归并为一个有序的循环链表。

15.已知有一个单向循环链表,其每个结点中含三个域:

pre、data和next,其中data为数据域,next为指向后继结点的指针域,pre也为一个指针域,但是他的值为空(null),试编写一个算法将此单链表改为双向循环链表,即使pre成为指向前驱结点的指针域。

16.画出执行下列各行语句后各指针及链表的示意图。

L=(linklist)malloc(sizeof(lnode));P=l;

for(i=1;i<4;i++)

{

p->next=(linklist)malloc(sizeof(lnode));

p=p->next;

p->data=i*2-1;

}

p->next=null;

for(i=4;i>=1;i--;)insert_linklist(l;i+1;i*2);

for(i=1;i<3;i++)del_linklist(l,i);

17.设顺序表L是一个递增有序表,试写一算法,将x插入L中,并使L仍是一个有序表。

习题四

1.填空题

(1)设栈S和队列Q的初始状态皆为空,元素a1,a2,a3,a4,a5和a6依次通

过一个栈,一个元素出栈后即进入队列Q,若6个元素出队列的顺序是a3,a5,a4,a6,a2,a1则栈S至少应该容纳____________个元素。

(2)一个栈的输入序列为1,2,3,4,5则下列序列中不可能是栈的输出序列的

是__________。

A.2,3,4,1,5B.5,4,1,3,2C.2,3,1,4,5D.1,5,4,3,2

2.对于下面的每一步画出栈中元素及栈顶指针的示意图:

(1)空栈;

(2)元素A入栈;

(3)元素B入栈;

(4)删除栈顶元素;

(5)元素C入栈;

(6)元素D入栈;

3.比较栈和队列的相同点和不同点,举例说明。

4.对于算术表达式3*(5-2)+7,用栈存储式子中的运算对象和运算符,试说明该算术表达式的运算过程。

5.若依次输入数据元素序列{a,b,c,d,e,f,g}进栈,出栈操作可以和入栈操作间隔进行,则下列那些元素序列可以由出栈序列得到?

{d,e,c,f,b,g,a};

{f,e,g,d,a,c,b};

{e,f,d,g,b,c,a};

{c,d,b,e,f,a,g}

6.编写一个算法,用来判别表达式中开、闭括号是否配对出现。

7.设将整数以万计1、2、3、4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下有问题:

(1)若入栈次序为push

(1),pop(),push

(2),push(3),pop(),pop(),push(4),

pop(),则出栈的数字序列为什么?

(2)请分析1、2、3、4的24种排列中,哪些序列可以通过相应的入出栈得到。

8.链栈中为何不设头指针?

10.循环队列的优点是什么?

如何判断它的空和满?

11.试述队列的链式存储结构和顺序存储结构的优缺点。

12.假设以一维数组s[n]存储循环队列的元素,若要使这n个存储空间都得到利用,需另设一个标志flag,以flag为0或1来区分队头指针和队尾指针相同时队列是空还是满。

编写与此结构相对应的初始化、入队列和出队列的算法。

13.试编写下面定义的递归函数的递归算法,并根据算法画出求G(5,2)时栈的变化过程。

14.分别在栈和队列(至少含有3个结点)中实现删除紧邻栈顶或队头的结点,并用

P返回其值。

15.设将整数1,2,3,4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下述问题:

  

(1)若入、出栈次序为Push

(1),Pop(),Push

(2),Push(3),Pop(),Pop(),Push(4),Pop(),则出栈的数字序列为何(这里Push(i)表示i进栈,Pop()表示出栈)?

  

(2)能否得到出栈序列1423和1432?

并说明为什么不能得到或者如何得到。

(3)请分析1,2,3,4的24种排列中,哪些序列是可以通过相应的入出栈操作得到的。

16.回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。

试写一个算法判定给定的字符向量是否为回文。

(提示:

将一半字符入栈)。

习题五

1.判断题(判断下列各题是否正确,若正确在()内打“√”,否则打“╳”)

(1)()如果两个串含有相同的字符,则说明它们相等。

(2)()如果一个串中的所有字符均在另一串中出现,那么则说明前者是后者的子串。

(3)()串的模式匹配BF算法的时间复杂度在最坏情况下为O(n×m),因此此算法没有实际使用价值。

(4)()设有两个串p和q,其中q是p的子串,把q在p中首次出现的位置作为子串q在p中的位置的算法称为匹配。

(5)()KMP算法的最大特点是指示主串的指针不需回溯。

2.选择题(请在选项A,B,C,D,E选择正确答案)

(1)串是()

A.少于一个字母的序列B.任意个字母的序列

C.不少于一个字符的序列D.有限个字符的序列

(2)设字符串s1=‘ABCDEFG’,s2=‘PQRST’,T,sub1,sub2为空串。

则运算s=Concation(T,SubString(sub1,s1,2,SubLength(s2)),SubString(sub2,s1,SubLength(s2),2))后的串T的值为()

A.‘BCDEF’B.‘BCDEFG’C.‘BCPQRST’D.‘BCDEFEF’E.‘BCQR‘

(3)串的长度是()

A.串中不同字母的个数B.串中不同字符的个数

C.串中所含字符的个数,且大于0D.串中所含字符的个数

(4)若某串的长度小于一个常数,则采用()存储方式最为节省空间。

A.链式B.堆结构C.顺序

(5)设有两个串p和q,求q在p中首次出现的位置的运算()

A.连接B.模式匹配C.求子串D.求串长

(6)串的联结运算不满足()

A.分配律B.交换律C.结合律

3.空白串与空串有何区别?

字符串中的空白符号有何意义?

4.假定串采用块链接表示,试写出删除一个子串的算法。

5.比较串的三种存储方式的优点和缺点。

6.已知:

s=‘xyz*’,t=‘(x+y)*z’。

试利用联接、求子串和置换等基本运算,将s转换为t。

7.试分别写出算法insert(a,i,b)和算法delete(a,b)。

其中,insert(a,i,b)将串b插入在串a中位置i之后;delete(a,b)将串a中的子串b删掉。

习题六

判断题(判断下列各题是否正确,若正确在()内打“√”,否则打“╳”)

(1)()数组是同类型值的集合。

(2)()数组是一组相继的内存单元。

(3)()数组是一种复杂的数据结构,数组元素之间的关系,既不是线性的,也不是树型的。

(4)()插入和删除操作是数据结构中最基本的两种操作,所以这两种操作在数组中也经常使用。

(5)()使用三元组表表示稀疏矩阵的元素,有时并不能节省存储空间。

(6)()广义表是由零或多个单元素或子表所组成的有序列,所以广义表可能为空表。

(7)()线性表可以看成是广义表的特例,如果广义表中的每个元素都是单元素,则广义表便成为线性表。

单选题(请从下列A、B、C、D、E、F选项中选择一项)

(1)设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一个元素,其存储地址为1,每个元素占1个地址空间,则a85的地址为()

A.13B.33C.18D.40

(2)一个n×n的对称矩阵,如果以行或列为主序存入内存,则其容量为()

A.n×nB.n×n/2C.n×(n+1)/2D.(n+1)×(n+1)/2

E.(n-1)×n/2F.n×(n-1)

(3)二维数组a的每个元素是由6个字符组成的串,行下标i的范围从0~8,列下标j的范围是从1~10。

从供选择的答案中选出正确答案填入下列关于数据存储叙述中的()内。

1  存放a至少需要(   )个字节。

A.90B.180C.240D.270E.540

2   a的第8列和第5行共占(   )字节。

A.108 B.114C.54D.60E.150

3  若a按行存放,元素a[8,5]的起始地址与当a按列存放的元素(    )的起始地址一致。

A.a[8,5]B.a[3,10]C.a[5,8]D.a[0,9]

(4)已知广义表LS=(a,(b,c,d),e),运用HEAD和TAIL函数取出LS中单元素b的运算是()。

A.HEAD(HEAD(LS))

B.TAIL(HEAD(LS))

C.HEAD(HEAD(TAIL(LS)))

D.HEAD(TAIL(LS))

(5)已知广义表A=((a,b,c),(d,e,f)),从A中取出单元素e的运算是()。

A.TAIL(HEAD(A))

B.HEAD(TAIL(A))

C.HEAD(TAIL(TAIL(HEAD(A))))

D.HEAD(TAIL(HEAD(TAIL(A))))

3假设在树中,结点x是结点y的双亲时,用(x,y)来表示树边.已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法出此树,并回答下列问题:

 

(1)哪个是根结点?

(2)哪些是叶结点?

(3)哪个是g的双亲?

(4)哪些是g的祖先?

 (5)哪些是g的孩子?

(6)哪些是e的子孙?

(7)哪些是e的兄弟?

哪些是f的兄弟?

 (8)结点b和n的层次各是多少?

(9)树的深度是多少?

(10)以结点c为根的子树的深度是多少?

 (11)树的度数是多少?

4.一棵度为2的有序树与一棵二叉树有何区别?

5.一个深度为h的满k叉树有如下性质:

第h层上的结点都是叶子结点,其余各层上每个结点都有k棵非空子树。

如果按层次顺序(同层自左至右)从1开始对全部结点编号,问:

 

(1)各层的结点数目是多少?

 

(2)编号为i的结点的双亲结点(若存在)的编号是多少?

 (3)编号为i的结点的第j个孩子结点(若存在)的编号是多少?

(1)编号为i的结点的有右兄弟的条件是什么?

其右兄弟的编号是多少?

6.试找出分别满足下面条件的所有二叉树:

 

(1)前序序列和中序序列相同;

(2)中序序列和后序序列相同;

 (3)前序序列和后序序列相同;(4)前序、中序、后序序列均相同。

7.给定一奇数n,构造一个n阶魔阵。

n阶魔阵是一个n阶方阵,其元素由自然数1,2,3,…,n组成。

魔阵的每行元素之和,每列元素之和以及主、副对角线之和均相等。

即对于给定的奇数n以及i=1,2,…,n,魔阵a满足条件:

(1)设有一每行每列都有8个正方格的棋盘。

试用8个棋子布到格子上,要求满足以下条件:

1任意两个棋子不在同一行和同一列;    

2 任意两个棋子不在同一斜线上。

问有多少种摆法。

(2)设B(n×m)是一个二维对称数组,为节省存储单元,只将上三角的元素存于内存中,试推导元素B{i,j}(0in,0jm)的位置的公式。

(3)求三维数组按行优先顺序存储的地址公式。

(4)求下列广义表运算的结果

1HEAD((p,h,w));

2TAIL((b,k,p,h));

3HEAD(TAIL(((a,b),(c,d)))).

(5)画出下列广义表的图形表示:

1D(A(),B(e),C(a,L(b,c,d)));

2M1(a,((b,c,d),e))

8.设有三对角矩阵

,将其三条对角线上的元素逐行地存储到向量B[0...3n-3]中,使得B[k]=

求:

 

(1)用i,j表示k的下标变换公式。

  

(2)用k表示i,j的下标变换公式。

(2)当三角矩阵采用题

(1)所述的压缩存储时,写一算法求三对角矩阵在这种压缩存储表示下的转置矩阵。

(3)当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。

习题七

1.判断题(判断下列各题是否正确,若正确在()内打“√”,否则打“╳”)

(1)()二叉树是树的特殊形式。

(2)()由树转换成二叉树,其根结点的右子树总是空的。

(3)()前序遍历树和前序遍历与该树对应的二叉树,其结果不同。

(4)()后序遍历树和中序遍历与该树对应的二叉树,其结果不同。

(5)()前序遍历森林和前序遍历与该森林对应的二叉树,其结果不同。

(6)()后序遍历森林和中序遍历与该森林对应的二叉树,其结果不同。

(7)()在二叉树中插入结点后,该二叉树就不是二叉树。

(8)()哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。

(9)()用一维数组存放二叉树时,总是以前序遍历存储结点。

2.单选题(请从下列A,B,C,D选项中选择一项)

(1)有一棵二叉树,如图7-28所示该二叉树是()

图7-28

A.二叉平衡树B.二叉排序树C.堆的形状

(2)线索化二叉树中某结点没有孩子的充要条件是()

A.D.Lchild=NULLB.D.Ltag=1C.D.Ltag=0

(3)如果结点A有3个兄弟,而且B是A的双亲,则B的度是()

A.4B.5C.1

(4)树B的层号表示1a,2b,3d,3e,2c对应于下面选择的()

A.1a[2b[3d,3e],2c]B.a[b[d],e],c]C.a[b,d[e,c]]D.a[b[d,e],c]

(5)某二叉树T有n个结点,设按某种顺序对T中的每个结点进行编号,编号值为1,2,...n。

且有如下性质:

T中任意结点v,其编号等于左子树上的最小编号减1,而v的右子树的结点中,其最小编号等于v左子树上结点的最大编号加1,这是按( )编号的。

A.中序遍历序列

B.前序遍历序列

C.后序遍历序列

(6)设F是一个森林;B是由F转换得到的二叉树,F中有n个非终端结点,B中右指针域为空的结点有( )个。

A.n-1B.nC.n+1D.n+2

(7)前序遍历的顺序是()

A.根结点,左子树,右子树

B.左子树,根结点,右子树

C.右子树,根结点,左子树

D.左子树,右子树,根结点

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 起诉状

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1